Bristol Myers Squibb Capabilities

Naftiko 0.5 capability definitions for Bristol Myers Squibb - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves adverse event case details from the BMS pharmacovigilance database.

naftiko: "0.5"
info:
  title: Adverse Event Lookup
  version: "1.0"
  description: Retrieves adverse event case details from the BMS pharmacovigilance database.
  tags: [pharmacovigilance, clinical, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_adverse_event
        description: Returns AE case details including seriousness and causality assessment.
        inputParameters:
          - name: case_id
            in: query
            required: true
            type: string
        call:
          operationId: getAECase
          input:
            caseId: "{{case_id}}"
        outputParameters:
          - name: seriousness
            type: string
          - name: causality
            type: string
          - name: reporter_type
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/pharmacovigilance/v1
      authentication:
        type: bearer
        token: $secrets.bms_pv_token
      resources:
        - path: /cases/{caseId}
          operations:
            - id: getAECase
              method: GET

Processes a new adverse event report, submits to FDA, and notifies the pharmacovigilance team.

naftiko: "0.5"
info:
  title: Adverse Event Reporting Workflow
  version: "1.0"
  description: Processes a new adverse event report, submits to FDA, and notifies the pharmacovigilance team.
  tags: [pharmacovigilance, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_ae_report
        description: Creates AE case, submits to FDA, notifies PV team.
        inputParameters:
          - name: patient_id
            in: body
            required: true
            type: string
          - name: drug_code
            in: body
            required: true
            type: string
          - name: event_description
            in: body
            required: true
            type: string
        steps:
          - name: create-case
            call:
              operationId: createAECase
              input:
                patientId: "{{patient_id}}"
                drugCode: "{{drug_code}}"
                description: "{{event_description}}"
          - name: submit-fda
            call:
              operationId: submitFDAReport
              input:
                caseId: "{{create-case.case_id}}"
                seriousness: "{{create-case.seriousness}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "pharmacovigilance"
                message: "AE case {{create-case.case_id}} submitted to FDA."
  consumes:
    - type: http
      baseUri: https://api.bms.com/pharmacovigilance/v1
      authentication:
        type: bearer
        token: $secrets.bms_pv_token
      resources:
        - path: /cases
          operations:
            - id: createAECase
              method: POST
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /fda/reports
          operations:
            - id: submitFDAReport
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team.

naftiko: "0.5"
info:
  label: "AI-Assisted Scientific Literature Summarizer"
  description: "Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team."
  tags:
    - ai
    - automation
    - anthropic
    - snowflake
    - medical-affairs
    - life-sciences
capability:
  exposes:
    - type: mcp
      namespace: ai-research
      port: 8080
      tools:
        - name: summarize-literature
          description: "Given a BMS compound name and list of PubMed article IDs, generate structured clinical evidence summaries via Anthropic Claude and store in Snowflake for medical affairs access. Use for competitive intelligence and evidence synthesis."
          inputParameters:
            - name: compound_name
              in: body
              type: string
              description: "The BMS drug or compound name, e.g. 'Opdivo', 'Revlimid'."
            - name: article_ids
              in: body
              type: string
              description: "Comma-separated PubMed article IDs to summarize."
          steps:
            - name: generate-summary
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-opus-4-5"
                max_tokens: 2048
                system: "You are a pharmaceutical research summarizer. Create structured summaries with sections for efficacy, safety, and patient population."
                content: "Summarize the following clinical evidence for {{compound_name}}: article IDs {{article_ids}}"
            - name: store-summaries
              type: call
              call: "snowflake.insert-rows"
              with:
                table: "MEDICAL_AFFAIRS.LITERATURE_SUMMARIES"
                data: "{{generate-summary.content}}"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://bms.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: rows
          path: "/databases/bms/schemas/medical_affairs/tables/{{table}}/insertRows"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: insert-rows
              method: POST

Auto-scales AKS.

naftiko: "0.5"
info:
  title: Azure BMS Scaler
  version: "1.0"
  description: Auto-scales AKS.
  tags: [infrastructure, observability, healthcare, azure]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: scale_bms
        description: Checks, scales, alerts.
        inputParameters:
          - name: cluster
            in: body
            required: true
            type: string
          - name: threshold
            in: body
            required: true
            type: number
        steps:
          - name: check
            call:
              operationId: queryMetric
              input:
                query: "avg:kubernetes.cpu{cluster:{{cluster}}}"
          - name: scale
            call:
              operationId: scaleNodes
              input:
                cluster: "{{cluster}}"
          - name: alert
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "platform"
                message: "Scaled."
  consumes:
    - type: http
      baseUri: https://api.datadoghq.com/api/v1
      authentication:
        type: apikey
        name: DD-API-KEY
        in: header
        key: $secrets.datadog_api_key
      resources:
        - path: /metrics/query
          operations:
            - id: queryMetric
              method: GET
    - type: http
      baseUri: https://management.azure.com/subscriptions/bms
      authentication:
        type: bearer
        token: $secrets.azure_mgmt_token
      resources:
        - path: /resourceGroups/research/providers/Microsoft.ContainerService/managedClusters/{cluster}
          operations:
            - id: scaleNodes
              method: PATCH
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Responder"
  description: "When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel."
  tags:
    - cloud
    - finops
    - azure
    - jira
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: finops-ops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID, anomaly detection alert, and the owning team name, retrieve cost breakdown details, create a Jira ticket, and alert the FinOps channel in Teams. Use when cloud spend exceeds expected variance."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID where the anomaly was detected."
            - name: anomaly_amount
              in: body
              type: number
              description: "The dollar amount above the expected baseline."
            - name: team_name
              in: body
              type: string
              description: "The owning team name for Jira routing."
          steps:
            - name: get-cost-detail
              type: call
              call: "azure.get-subscription-costs"
              with:
                subscription_id: "{{subscription_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FINOPS"
                issuetype: "Task"
                summary: "Azure cost anomaly: {{subscription_id}} exceeded by ${{anomaly_amount}}"
                description: "Subscription: {{subscription_id}}\nOverage: ${{anomaly_amount}}\nTeam: {{team_name}}"
            - name: notify-finops
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.finops_channel_id"
                text: "Azure cost anomaly on subscription {{subscription_id}}: ${{anomaly_amount}} over baseline. Jira: {{create-ticket.key}}."
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: subscription-costs
          path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: get-subscription-costs
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Monitors batch processing jobs.

naftiko: "0.5"
info:
  title: BMS Batch Monitor
  version: "1.0"
  description: Monitors batch processing jobs.
  tags: [manufacturing, itsm, healthcare, observability]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: monitor_bms_batch
        description: Checks, incidents, alerts.
        inputParameters:
          - name: batch
            in: body
            required: true
            type: string
          - name: time
            in: body
            required: true
            type: string
        steps:
          - name: check
            call:
              operationId: queryMetric
              input:
                query: "avg:batch.status{job:{{batch}}}"
          - name: incident
            call:
              operationId: createIncident
              input:
                short_description: "Batch {{batch}} failure"
                urgency: "1"
          - name: alert
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "mfg-ops"
                message: "Batch failed."
  consumes:
    - type: http
      baseUri: https://api.datadoghq.com/api/v1
      authentication:
        type: apikey
        name: DD-API-KEY
        in: header
        key: $secrets.datadog_api_key
      resources:
        - path: /metrics/query
          operations:
            - id: queryMetric
              method: GET
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Checks the storage status and availability of a biobank sample.

naftiko: "0.5"
info:
  title: BMS Biobank Sample Status
  version: "1.0"
  description: Checks the storage status and availability of a biobank sample.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_biobank_sample
        description: Returns sample location, condition, and availability.
        inputParameters:
          - name: sample_id
            in: query
            required: true
            type: string
        call:
          operationId: getSampleStatus
          input:
            sampleId: "{{sample_id}}"
        outputParameters:
          - name: location
            type: string
          - name: condition
            type: string
          - name: available
            type: boolean
  consumes:
    - type: http
      baseUri: https://api.bms.com/biobank/v1
      authentication:
        type: bearer
        token: $secrets.bms_biobank_token
      resources:
        - path: /samples/{sampleId}
          operations:
            - id: getSampleStatus
              method: GET

Reconciles clinical data management datasets between EDC and central lab.

naftiko: "0.5"
info:
  title: BMS CDM Data Reconciliation
  version: "1.0"
  description: Reconciles clinical data management datasets between EDC and central lab.
  tags: [clinical, analytics, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: reconcile_cdm_data
        description: Queries discrepancies and creates tickets.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: visit
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT subject, field FROM cdm_discrepancies WHERE trial='{{trial_id}}'"
          - name: ticket
            call:
              operationId: createIssue
              input:
                project: "CDM"
                summary: "Discrepancy in {{trial_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-data"
                message: "Discrepancies found."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/rest/api/3
      authentication:
        type: basic
        username: $secrets.jira_user
        password: $secrets.jira_api_token
      resources:
        - path: /issue
          operations:
            - id: createIssue
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Analyzes adverse event data for safety signals and escalates to the safety committee.

naftiko: "0.5"
info:
  title: BMS Clinical Safety Signal Detection
  version: "1.0"
  description: Analyzes adverse event data for safety signals and escalates to the safety committee.
  tags: [pharmacovigilance, analytics, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: detect_safety_signals
        description: Queries AE data, detects signals, escalates.
        inputParameters:
          - name: drug_code
            in: body
            required: true
            type: string
          - name: analysis_period
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT event_type, count, expected_rate FROM ae_signals WHERE drug='{{drug_code}}' AND period='{{analysis_period}}'"
          - name: escalate
            call:
              operationId: createIncident
              input:
                short_description: "Safety signal detected for {{drug_code}}"
                urgency: "1"
                category: "pharmacovigilance"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "safety-committee"
                message: "Safety signal for {{drug_code}} detected. Review required."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Activates a new clinical trial site by completing regulatory documents, training, and system setup.

naftiko: "0.5"
info:
  title: BMS Clinical Site Activation
  version: "1.0"
  description: Activates a new clinical trial site by completing regulatory documents, training, and system setup.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: activate_clinical_site
        description: Submits documents, assigns training, sets up systems.
        inputParameters:
          - name: site_id
            in: body
            required: true
            type: string
          - name: trial_id
            in: body
            required: true
            type: string
        steps:
          - name: submit-docs
            call:
              operationId: submitSiteDocuments
              input:
                siteId: "{{site_id}}"
                trialId: "{{trial_id}}"
          - name: assign-training
            call:
              operationId: assignSiteTraining
              input:
                siteId: "{{site_id}}"
                trialId: "{{trial_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-ops"
                message: "Site {{site_id}} activation initiated for trial {{trial_id}}."
  consumes:
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /sites/{siteId}/documents
          operations:
            - id: submitSiteDocuments
              method: POST
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /sites/{siteId}/training
          operations:
            - id: assignSiteTraining
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves enrollment and performance metrics for a clinical trial site.

naftiko: "0.5"
info:
  title: BMS Clinical Site Performance
  version: "1.0"
  description: Retrieves enrollment and performance metrics for a clinical trial site.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_site_performance
        description: Returns site enrollment rate and protocol deviations.
        inputParameters:
          - name: site_id
            in: query
            required: true
            type: string
          - name: trial_id
            in: query
            required: true
            type: string
        call:
          operationId: getSitePerformance
          input:
            siteId: "{{site_id}}"
            trialId: "{{trial_id}}"
        outputParameters:
          - name: enrollment_rate
            type: number
          - name: deviations
            type: integer
          - name: screen_fail_rate
            type: number
  consumes:
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /sites/{siteId}/performance
          operations:
            - id: getSitePerformance
              method: GET

Forecasts clinical trial drug supply needs and triggers manufacturing orders.

naftiko: "0.5"
info:
  title: BMS Clinical Supply Forecast
  version: "1.0"
  description: Forecasts clinical trial drug supply needs and triggers manufacturing orders.
  tags: [clinical, supply-chain, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: forecast_clinical_supply
        description: Queries enrollment, forecasts demand, creates orders.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: forecast_months
            in: body
            required: true
            type: integer
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT site_id, enrolled, projected FROM trial_enrollment WHERE trial='{{trial_id}}'"
          - name: forecast
            call:
              operationId: forecastDemand
              input:
                trialId: "{{trial_id}}"
                enrollment: "{{query.results}}"
                months: "{{forecast_months}}"
          - name: order
            call:
              operationId: createSupplyOrder
              input:
                trialId: "{{trial_id}}"
                quantity: "{{forecast.required_units}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /supply/forecast
          operations:
            - id: forecastDemand
              method: POST
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /orders
          operations:
            - id: createSupplyOrder
              method: POST

Monitors cold chain temperature during drug shipment and alerts on excursions.

naftiko: "0.5"
info:
  title: BMS Cold Chain Monitoring
  version: "1.0"
  description: Monitors cold chain temperature during drug shipment and alerts on excursions.
  tags: [supply-chain, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: monitor_cold_chain
        description: Checks temp, creates deviation, alerts.
        inputParameters:
          - name: shipment_id
            in: body
            required: true
            type: string
          - name: max_temp
            in: body
            required: true
            type: number
        steps:
          - name: check
            call:
              operationId: getShipmentTemp
              input:
                shipmentId: "{{shipment_id}}"
          - name: deviation
            call:
              operationId: createDeviation
              input:
                type: "temperature_excursion"
                shipment: "{{shipment_id}}"
                temp: "{{check.max_recorded}}"
          - name: alert
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "supply-chain-quality"
                message: "Temperature excursion on shipment {{shipment_id}}: {{check.max_recorded}}C."
  consumes:
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /shipments/{shipmentId}/temperature
          operations:
            - id: getShipmentTemp
              method: GET
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /deviations
          operations:
            - id: createDeviation
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Refreshes commercial performance analytics and notifies the commercial team.

naftiko: "0.5"
info:
  title: BMS Commercial Performance Dashboard
  version: "1.0"
  description: Refreshes commercial performance analytics and notifies the commercial team.
  tags: [commercial, analytics, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: refresh_commercial
        description: Queries sales, refreshes, notifies.
        inputParameters:
          - name: product
            in: body
            required: true
            type: string
          - name: quarter
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT territory, revenue, market_share FROM sales_data WHERE product='{{product}}' AND quarter='{{quarter}}'"
          - name: refresh
            call:
              operationId: refreshDataset
              input:
                dataset: "commercial-perf"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "commercial-analytics"
                message: "Commercial dashboard refreshed for {{product}}."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.powerbi.com/v1.0/myorg
      authentication:
        type: bearer
        token: $secrets.powerbi_token
      resources:
        - path: /groups/commercial/datasets/commercial-perf/refreshes
          operations:
            - id: refreshDataset
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Tracks companion diagnostic test results and links to treatment decisions.

naftiko: "0.5"
info:
  title: BMS Companion Diagnostic Tracker
  version: "1.0"
  description: Tracks companion diagnostic test results and links to treatment decisions.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: track_companion_dx
        description: Queries results, links to treatment, notifies.
        inputParameters:
          - name: patient_id
            in: body
            required: true
            type: string
          - name: test_type
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT result, biomarker_status FROM companion_dx WHERE patient_id='{{patient_id}}' AND test='{{test_type}}'"
          - name: update
            call:
              operationId: updateTreatmentPlan
              input:
                patientId: "{{patient_id}}"
                biomarkerStatus: "{{query.results}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "precision-medicine"
                message: "Companion dx for patient {{patient_id}}: {{query.results}}."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/patient-services/v1
      authentication:
        type: bearer
        token: $secrets.bms_patient_token
      resources:
        - path: /patients/{patientId}/treatment-plan
          operations:
            - id: updateTreatmentPlan
              method: PATCH
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Monitors competitive pipeline.

naftiko: "0.5"
info:
  title: BMS Competitive Intelligence
  version: "1.0"
  description: Monitors competitive pipeline.
  tags: [commercial, research, healthcare, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_bms_competitive
        description: Queries and publishes.
        inputParameters:
          - name: therapeutic_area
            in: body
            required: true
            type: string
          - name: quarter
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT competitor, compound FROM competitive WHERE ta='{{therapeutic_area}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "Competitive Intel — {{therapeutic_area}}"
                space: "STRATEGY"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Processes clinical trial site payments.

naftiko: "0.5"
info:
  title: BMS CTMS Site Payment
  version: "1.0"
  description: Processes clinical trial site payments.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_site_payments
        description: Calculates and submits payments.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: site_id
            in: body
            required: true
            type: string
          - name: period
            in: body
            required: true
            type: string
        steps:
          - name: calc
            call:
              operationId: calculatePayment
              input:
                trialId: "{{trial_id}}"
                siteId: "{{site_id}}"
          - name: submit
            call:
              operationId: submitPayment
              input:
                siteId: "{{site_id}}"
                amount: "{{calc.total}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-finance"
                message: "Payment processed."
  consumes:
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /sites/{siteId}/payments
          operations:
            - id: calculatePayment
              method: GET
    - type: http
      baseUri: https://bms-sap.com/api/v1
      authentication:
        type: bearer
        token: $secrets.sap_token
      resources:
        - path: /payments
          operations:
            - id: submitPayment
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Monitors data lake ingestion.

naftiko: "0.5"
info:
  title: BMS Data Ingestion Monitor
  version: "1.0"
  description: Monitors data lake ingestion.
  tags: [analytics, observability, healthcare, azure]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: monitor_bms_ingestion
        description: Checks, incidents, notifies.
        inputParameters:
          - name: pipeline
            in: body
            required: true
            type: string
          - name: lag
            in: body
            required: true
            type: integer
        steps:
          - name: check
            call:
              operationId: queryMetric
              input:
                query: "avg:ingestion.lag{pipeline:{{pipeline}}}"
          - name: incident
            call:
              operationId: createIncident
              input:
                short_description: "Ingestion lag: {{pipeline}}"
                urgency: "2"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "data-eng"
                message: "Alert."
  consumes:
    - type: http
      baseUri: https://api.datadoghq.com/api/v1
      authentication:
        type: apikey
        name: DD-API-KEY
        in: header
        key: $secrets.datadog_api_key
      resources:
        - path: /metrics/query
          operations:
            - id: queryMetric
              method: GET
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Processes drug label updates through regulatory review and approval.

naftiko: "0.5"
info:
  title: BMS Drug Label Update Workflow
  version: "1.0"
  description: Processes drug label updates through regulatory review and approval.
  tags: [regulatory, compliance, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_label_update
        description: Creates update, routes review, notifies.
        inputParameters:
          - name: product_code
            in: body
            required: true
            type: string
          - name: update_type
            in: body
            required: true
            type: string
          - name: description
            in: body
            required: true
            type: string
        steps:
          - name: create
            call:
              operationId: createLabelUpdate
              input:
                productCode: "{{product_code}}"
                updateType: "{{update_type}}"
                description: "{{description}}"
          - name: route
            call:
              operationId: routeForApproval
              input:
                updateId: "{{create.update_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "regulatory-labels"
                message: "Label update for {{product_code}} submitted for review."
  consumes:
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /labels
          operations:
            - id: createLabelUpdate
              method: POST
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /workflows/route
          operations:
            - id: routeForApproval
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves stability testing results for a drug product batch.

naftiko: "0.5"
info:
  title: BMS Drug Stability Data
  version: "1.0"
  description: Retrieves stability testing results for a drug product batch.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_stability_data
        description: Returns stability test results and shelf life prediction.
        inputParameters:
          - name: batch_number
            in: query
            required: true
            type: string
          - name: time_point
            in: query
            required: true
            type: string
        call:
          operationId: getStabilityData
          input:
            batchNumber: "{{batch_number}}"
            timePoint: "{{time_point}}"
        outputParameters:
          - name: results
            type: array
          - name: shelf_life_months
            type: integer
  consumes:
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /stability/{batchNumber}
          operations:
            - id: getStabilityData
              method: GET

Offboards employees with access revocation and asset collection.

naftiko: "0.5"
info:
  title: BMS Employee Offboarding
  version: "1.0"
  description: Offboards employees with access revocation and asset collection.
  tags: [human-resources, identity-management, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: offboard_bms
        description: Revokes access, collects assets, logs.
        inputParameters:
          - name: eid
            in: body
            required: true
            type: string
          - name: last_day
            in: body
            required: true
            type: string
        steps:
          - name: revoke
            call:
              operationId: revokeAccess
              input:
                eid: "{{eid}}"
                date: "{{last_day}}"
          - name: assets
            call:
              operationId: collectAssets
              input:
                eid: "{{eid}}"
          - name: log
            call:
              operationId: createIncident
              input:
                short_description: "Offboarding: {{eid}}"
                category: "hr_offboarding"
                urgency: "3"
  consumes:
    - type: http
      baseUri: https://bms.okta.com/api/v1
      authentication:
        type: bearer
        token: $secrets.okta_token
      resources:
        - path: /users/{eid}/deactivate
          operations:
            - id: revokeAccess
              method: POST
    - type: http
      baseUri: https://api.bms.com/hr/v1
      authentication:
        type: bearer
        token: $secrets.bms_hr_token
      resources:
        - path: /assets/collect
          operations:
            - id: collectAssets
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST

Retrieves cleanroom environmental monitoring data from the manufacturing facility.

naftiko: "0.5"
info:
  title: BMS Environmental Monitoring
  version: "1.0"
  description: Retrieves cleanroom environmental monitoring data from the manufacturing facility.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_env_monitoring
        description: Returns particle counts, temperature, and humidity readings.
        inputParameters:
          - name: facility_id
            in: query
            required: true
            type: string
          - name: room_id
            in: query
            required: true
            type: string
        call:
          operationId: getEnvData
          input:
            facilityId: "{{facility_id}}"
            roomId: "{{room_id}}"
        outputParameters:
          - name: particle_count
            type: number
          - name: temperature
            type: number
          - name: humidity
            type: number
  consumes:
    - type: http
      baseUri: https://api.bms.com/manufacturing/v1
      authentication:
        type: bearer
        token: $secrets.bms_mfg_token
      resources:
        - path: /facilities/{facilityId}/rooms/{roomId}/monitoring
          operations:
            - id: getEnvData
              method: GET

Manages GxP system audit trails and creates compliance findings.

naftiko: "0.5"
info:
  title: BMS GxP Audit Workflow
  version: "1.0"
  description: Manages GxP system audit trails and creates compliance findings.
  tags: [compliance, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_gxp_audit
        description: Queries audit logs, identifies findings, creates CAPAs.
        inputParameters:
          - name: system_name
            in: body
            required: true
            type: string
          - name: audit_period
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT event_type, user_id, timestamp FROM gxp_audit WHERE system='{{system_name}}' AND period='{{audit_period}}' AND anomaly=true"
          - name: create-finding
            call:
              operationId: createDeviation
              input:
                type: "gxp_audit_finding"
                system: "{{system_name}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "quality-compliance"
                message: "GxP audit findings for {{system_name}}."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /deviations
          operations:
            - id: createDeviation
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves healthcare professional engagement history from Veeva CRM.

naftiko: "0.5"
info:
  title: BMS HCP Engagement Lookup
  version: "1.0"
  description: Retrieves healthcare professional engagement history from Veeva CRM.
  tags: [commercial, hcp-engagement, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_hcp_engagement
        description: Returns HCP interaction history and territory details.
        inputParameters:
          - name: hcp_id
            in: query
            required: true
            type: string
        call:
          operationId: getHCPEngagement
          input:
            hcpId: "{{hcp_id}}"
        outputParameters:
          - name: interactions
            type: array
          - name: territory
            type: string
  consumes:
    - type: http
      baseUri: https://bms.veevacrm.com/api/v1
      authentication:
        type: bearer
        token: $secrets.veeva_crm_token
      resources:
        - path: /hcps/{hcpId}/engagement
          operations:
            - id: getHCPEngagement
              method: GET

Audits PHI access in clinical systems.

naftiko: "0.5"
info:
  title: BMS HIPAA PHI Audit
  version: "1.0"
  description: Audits PHI access in clinical systems.
  tags: [compliance, hipaa, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: audit_bms_phi
        description: Queries, incidents, notifies.
        inputParameters:
          - name: start
            in: body
            required: true
            type: string
          - name: end
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT user_id FROM phi_log WHERE access BETWEEN '{{start}}' AND '{{end}}' AND anomaly=true"
          - name: incident
            call:
              operationId: createIncident
              input:
                short_description: "PHI anomaly"
                urgency: "1"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "privacy"
                message: "PHI anomaly detected."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Updates the investigator brochure with new safety data and distributes to sites.

naftiko: "0.5"
info:
  title: BMS Investigator Brochure Update
  version: "1.0"
  description: Updates the investigator brochure with new safety data and distributes to sites.
  tags: [clinical, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: update_ib
        description: Gets safety data, updates IB, distributes.
        inputParameters:
          - name: compound
            in: body
            required: true
            type: string
          - name: version
            in: body
            required: true
            type: string
        steps:
          - name: get-safety
            call:
              operationId: executeQuery
              input:
                statement: "SELECT ae_type, frequency FROM safety_data WHERE compound='{{compound}}'"
          - name: update-ib
            call:
              operationId: updateInvestigatorBrochure
              input:
                compound: "{{compound}}"
                version: "{{version}}"
                safetyData: "{{get-safety.results}}"
          - name: distribute
            call:
              operationId: distributToSites
              input:
                compound: "{{compound}}"
                version: "{{version}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /documents/ib
          operations:
            - id: updateInvestigatorBrochure
              method: PUT
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /distribution
          operations:
            - id: distributToSites
              method: POST

Analyzes competitive patent landscape for a therapeutic area.

naftiko: "0.5"
info:
  title: BMS IP Landscape Analysis
  version: "1.0"
  description: Analyzes competitive patent landscape for a therapeutic area.
  tags: [commercial, intellectual-property, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: analyze_ip_landscape
        description: Queries patent data, publishes analysis.
        inputParameters:
          - name: therapeutic_area
            in: body
            required: true
            type: string
          - name: compound
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT patent_number, assignee, expiry FROM patent_landscape WHERE therapeutic_area='{{therapeutic_area}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "IP Landscape — {{therapeutic_area}}"
                space: "IP"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Tracks IRB submissions.

naftiko: "0.5"
info:
  title: BMS IRB Submission Tracker
  version: "1.0"
  description: Tracks IRB submissions.
  tags: [clinical, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: track_irb
        description: Submits, tracks, notifies.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: site_id
            in: body
            required: true
            type: string
          - name: type
            in: body
            required: true
            type: string
        steps:
          - name: submit
            call:
              operationId: submitIRB
              input:
                trialId: "{{trial_id}}"
                siteId: "{{site_id}}"
          - name: track
            call:
              operationId: trackStatus
              input:
                submissionId: "{{submit.submission_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-regulatory"
                message: "IRB submitted."
  consumes:
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /irb/submissions
          operations:
            - id: submitIRB
              method: POST
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /irb/submissions/{submissionId}
          operations:
            - id: trackStatus
              method: GET
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Schedules and tracks laboratory equipment maintenance and calibration.

naftiko: "0.5"
info:
  title: BMS Lab Equipment Maintenance
  version: "1.0"
  description: Schedules and tracks laboratory equipment maintenance and calibration.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: schedule_equipment_maintenance
        description: Checks calibration, schedules service, notifies.
        inputParameters:
          - name: equipment_id
            in: body
            required: true
            type: string
          - name: facility_id
            in: body
            required: true
            type: string
        steps:
          - name: check
            call:
              operationId: getCalibrationStatus
              input:
                equipmentId: "{{equipment_id}}"
          - name: schedule
            call:
              operationId: scheduleService
              input:
                equipmentId: "{{equipment_id}}"
                facility: "{{facility_id}}"
                dueDate: "{{check.next_calibration}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "lab-ops"
                message: "Maintenance scheduled for {{equipment_id}} at {{facility_id}}."
  consumes:
    - type: http
      baseUri: https://api.bms.com/manufacturing/v1
      authentication:
        type: bearer
        token: $secrets.bms_mfg_token
      resources:
        - path: /equipment/{equipmentId}/calibration
          operations:
            - id: getCalibrationStatus
              method: GET
    - type: http
      baseUri: https://api.bms.com/manufacturing/v1
      authentication:
        type: bearer
        token: $secrets.bms_mfg_token
      resources:
        - path: /maintenance/schedule
          operations:
            - id: scheduleService
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Aggregates manufacturing deviations and publishes quality reports to Confluence.

naftiko: "0.5"
info:
  title: BMS Manufacturing Deviation Report
  version: "1.0"
  description: Aggregates manufacturing deviations and publishes quality reports to Confluence.
  tags: [manufacturing, quality, healthcare, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: generate_deviation_report
        description: Queries deviations, publishes report.
        inputParameters:
          - name: facility
            in: body
            required: true
            type: string
          - name: period
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT deviation_type, count, impact FROM mfg_deviations WHERE facility='{{facility}}' AND period='{{period}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "Deviation Report — {{facility}} — {{period}}"
                space: "QUALITY"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Analyzes payer coverage data and publishes market access reports.

naftiko: "0.5"
info:
  title: BMS Market Access Analytics
  version: "1.0"
  description: Analyzes payer coverage data and publishes market access reports.
  tags: [commercial, analytics, healthcare, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_market_access
        description: Queries, analyzes, publishes.
        inputParameters:
          - name: product
            in: body
            required: true
            type: string
          - name: market
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT payer, tier, lives_covered FROM market_access WHERE product='{{product}}' AND market='{{market}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "Market Access — {{product}} — {{market}}"
                space: "COMMERCIAL"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Retrieves payer formulary positioning and market access data for a BMS product.

naftiko: "0.5"
info:
  title: BMS Market Access Data
  version: "1.0"
  description: Retrieves payer formulary positioning and market access data for a BMS product.
  tags: [commercial, market-access, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_market_access
        description: Returns formulary status across major payers.
        inputParameters:
          - name: product_code
            in: query
            required: true
            type: string
          - name: market
            in: query
            required: true
            type: string
        call:
          operationId: getMarketAccess
          input:
            productCode: "{{product_code}}"
            market: "{{market}}"
        outputParameters:
          - name: payer_coverage
            type: array
          - name: tier_distribution
            type: object
  consumes:
    - type: http
      baseUri: https://api.bms.com/commercial/v1
      authentication:
        type: bearer
        token: $secrets.bms_commercial_token
      resources:
        - path: /products/{productCode}/market-access
          operations:
            - id: getMarketAccess
              method: GET

Queries medical affairs scientific publication data.

naftiko: "0.5"
info:
  title: BMS Medical Affairs Query
  version: "1.0"
  description: Queries medical affairs scientific publication data.
  tags: [clinical, medical-affairs, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: query_med_affairs
        description: Returns publications and KOL interactions.
        inputParameters:
          - name: compound_id
            in: query
            required: true
            type: string
          - name: year
            in: query
            required: true
            type: string
        call:
          operationId: getMedAffairsData
          input:
            compoundId: "{{compound_id}}"
            year: "{{year}}"
        outputParameters:
          - name: publications
            type: array
          - name: kol_interactions
            type: integer
  consumes:
    - type: http
      baseUri: https://api.bms.com/medical-affairs/v1
      authentication:
        type: bearer
        token: $secrets.bms_medaffairs_token
      resources:
        - path: /compounds/{compoundId}/data
          operations:
            - id: getMedAffairsData
              method: GET

Processes healthcare professional medical information requests.

naftiko: "0.5"
info:
  title: BMS Medical Information Request
  version: "1.0"
  description: Processes healthcare professional medical information requests.
  tags: [medical-affairs, clinical, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_med_info
        description: Receives request, retrieves literature, responds.
        inputParameters:
          - name: hcp_id
            in: body
            required: true
            type: string
          - name: topic
            in: body
            required: true
            type: string
          - name: compound
            in: body
            required: true
            type: string
        steps:
          - name: search
            call:
              operationId: searchLiterature
              input:
                compound: "{{compound}}"
                topic: "{{topic}}"
          - name: respond
            call:
              operationId: createResponse
              input:
                hcpId: "{{hcp_id}}"
                literature: "{{search.results}}"
                compound: "{{compound}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "medical-affairs"
                message: "Med info request from HCP {{hcp_id}} for {{compound}} processed."
  consumes:
    - type: http
      baseUri: https://api.bms.com/medical-affairs/v1
      authentication:
        type: bearer
        token: $secrets.bms_medaffairs_token
      resources:
        - path: /literature/search
          operations:
            - id: searchLiterature
              method: GET
    - type: http
      baseUri: https://api.bms.com/medical-affairs/v1
      authentication:
        type: bearer
        token: $secrets.bms_medaffairs_token
      resources:
        - path: /responses
          operations:
            - id: createResponse
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves patent expiration and exclusivity data for a BMS compound.

naftiko: "0.5"
info:
  title: BMS Patent Portfolio Check
  version: "1.0"
  description: Retrieves patent expiration and exclusivity data for a BMS compound.
  tags: [commercial, intellectual-property, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: check_patent_status
        description: Returns patent expiry dates and market exclusivity periods.
        inputParameters:
          - name: compound_id
            in: query
            required: true
            type: string
        call:
          operationId: getPatentStatus
          input:
            compoundId: "{{compound_id}}"
        outputParameters:
          - name: patents
            type: array
          - name: exclusivity_end
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/ip/v1
      authentication:
        type: bearer
        token: $secrets.bms_ip_token
      resources:
        - path: /compounds/{compoundId}/patents
          operations:
            - id: getPatentStatus
              method: GET

Identifies non-adherent patients.

naftiko: "0.5"
info:
  title: BMS Patient Adherence Outreach
  version: "1.0"
  description: Identifies non-adherent patients.
  tags: [clinical, patient-services, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: trigger_bms_adherence
        description: Queries and creates tasks.
        inputParameters:
          - name: program
            in: body
            required: true
            type: string
          - name: threshold
            in: body
            required: true
            type: number
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT patient_id FROM adherence WHERE program='{{program}}' AND rate < {{threshold}}"
          - name: create
            call:
              operationId: createOutreach
              input:
                patients: "{{query.results}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "patient-services"
                message: "Outreach initiated."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/patient-services/v1
      authentication:
        type: bearer
        token: $secrets.bms_patient_token
      resources:
        - path: /outreach/tasks
          operations:
            - id: createOutreach
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Runs pharmacogenomics analysis.

naftiko: "0.5"
info:
  title: BMS Pharmacogenomics Analysis
  version: "1.0"
  description: Runs pharmacogenomics analysis.
  tags: [clinical, research, healthcare, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_pgx_analysis
        description: Queries genomic data, publishes.
        inputParameters:
          - name: compound
            in: body
            required: true
            type: string
          - name: biomarker
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT patient_id, genotype FROM pgx_data WHERE compound='{{compound}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "PGx — {{compound}}"
                space: "RESEARCH"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Generates periodic safety update reports from AE data and submits to regulatory.

naftiko: "0.5"
info:
  title: BMS Pharmacovigilance Periodic Report
  version: "1.0"
  description: Generates periodic safety update reports from AE data and submits to regulatory.
  tags: [pharmacovigilance, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: generate_psur
        description: Queries AE data, generates report, submits.
        inputParameters:
          - name: drug_code
            in: body
            required: true
            type: string
          - name: report_period
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT ae_type, count, seriousness FROM adverse_events WHERE drug='{{drug_code}}' AND period='{{report_period}}'"
          - name: generate
            call:
              operationId: generatePSUR
              input:
                drugCode: "{{drug_code}}"
                period: "{{report_period}}"
                data: "{{query.results}}"
          - name: submit
            call:
              operationId: submitToAgency
              input:
                reportId: "{{generate.report_id}}"
                agency: "FDA"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/pharmacovigilance/v1
      authentication:
        type: bearer
        token: $secrets.bms_pv_token
      resources:
        - path: /reports/psur
          operations:
            - id: generatePSUR
              method: POST
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /submissions
          operations:
            - id: submitToAgency
              method: POST

Processes a clinical trial protocol amendment through review and approval.

naftiko: "0.5"
info:
  title: BMS Protocol Amendment Workflow
  version: "1.0"
  description: Processes a clinical trial protocol amendment through review and approval.
  tags: [clinical, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_protocol_amendment
        description: Submits amendment, routes review, notifies.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: amendment_number
            in: body
            required: true
            type: string
          - name: description
            in: body
            required: true
            type: string
        steps:
          - name: submit
            call:
              operationId: submitAmendment
              input:
                trialId: "{{trial_id}}"
                amendmentNumber: "{{amendment_number}}"
                description: "{{description}}"
          - name: route
            call:
              operationId: routeReview
              input:
                trialId: "{{trial_id}}"
                amendmentId: "{{submit.amendment_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-regulatory"
                message: "Protocol amendment {{amendment_number}} for trial {{trial_id}} submitted for review."
  consumes:
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /trials/{trialId}/amendments
          operations:
            - id: submitAmendment
              method: POST
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /workflows/route
          operations:
            - id: routeReview
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Runs real-world evidence analysis from claims and EHR data.

naftiko: "0.5"
info:
  title: BMS Real World Evidence Pipeline
  version: "1.0"
  description: Runs real-world evidence analysis from claims and EHR data.
  tags: [clinical, analytics, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_rwe_analysis
        description: Queries RWE data, publishes findings.
        inputParameters:
          - name: compound
            in: body
            required: true
            type: string
          - name: indication
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT patient_count, outcome_rate FROM rwe_data WHERE compound='{{compound}}' AND indication='{{indication}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "RWE — {{compound}} — {{indication}}"
                space: "MEDAFFAIRS"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Submits regulatory filings.

naftiko: "0.5"
info:
  title: BMS Regulatory Filing
  version: "1.0"
  description: Submits regulatory filings.
  tags: [regulatory, compliance, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: submit_bms_filing
        description: Gets, submits, logs.
        inputParameters:
          - name: filing
            in: body
            required: true
            type: string
          - name: agency
            in: body
            required: true
            type: string
        steps:
          - name: req
            call:
              operationId: getRequirements
              input:
                filing: "{{filing}}"
                agency: "{{agency}}"
          - name: submit
            call:
              operationId: submitFiling
              input:
                filing: "{{filing}}"
                data: "{{req.data}}"
          - name: log
            call:
              operationId: createIncident
              input:
                short_description: "Filing: {{filing}} — {{agency}}"
                urgency: "2"
  consumes:
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /filings/requirements
          operations:
            - id: getRequirements
              method: GET
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /filings/submit
          operations:
            - id: submitFiling
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST

Tracks drug product serialization for regulatory compliance and supply chain visibility.

naftiko: "0.5"
info:
  title: BMS Drug Serialization Tracking
  version: "1.0"
  description: Tracks drug product serialization for regulatory compliance and supply chain visibility.
  tags: [supply-chain, regulatory, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: track_serialization
        description: Queries serial data, validates compliance, reports.
        inputParameters:
          - name: lot_number
            in: body
            required: true
            type: string
          - name: product_code
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT serial_number, status, location FROM serialization WHERE lot='{{lot_number}}' AND product='{{product_code}}'"
          - name: validate
            call:
              operationId: validateCompliance
              input:
                lotNumber: "{{lot_number}}"
                serials: "{{query.results}}"
          - name: report
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "supply-chain-compliance"
                message: "Serialization validation for lot {{lot_number}}: {{validate.status}}."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /serialization/validate
          operations:
            - id: validateCompliance
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Monitors supply chain risks.

naftiko: "0.5"
info:
  title: BMS Supply Chain Risk Monitor
  version: "1.0"
  description: Monitors supply chain risks.
  tags: [supply-chain, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: monitor_supply_risk
        description: Queries and creates alerts.
        inputParameters:
          - name: category
            in: body
            required: true
            type: string
          - name: threshold
            in: body
            required: true
            type: number
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT supplier, risk FROM supply_risk WHERE category='{{category}}' AND risk > {{threshold}}"
          - name: alert
            call:
              operationId: createIncident
              input:
                short_description: "Supply risk: {{category}}"
                urgency: "2"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "supply-risk"
                message: "Risk detected."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams.

naftiko: "0.5"
info:
  label: "Change Management Approval Gate"
  description: "When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - gxp
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: route-change-request
          description: "Given a ServiceNow change request number for a GxP system, retrieve the change details and risk level, notify the CAB in Teams, and update the change record status to under review. Use for all changes to validated pharmaceutical systems."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number, e.g. 'CHG0002345'."
          steps:
            - name: get-change
              type: call
              call: "servicenow.get-change"
              with:
                number: "{{change_number}}"
            - name: notify-cab
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.cab_channel_id"
                text: "GxP Change Advisory Review: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | System: {{get-change.cmdb_ci}}"
            - name: update-change
              type: call
              call: "servicenow-update.patch-change"
              with:
                sys_id: "{{get-change.sys_id}}"
                state: "2"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: servicenow-update
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-patch
          path: "/table/change_request/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: patch-change
              method: PATCH

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a PagerDuty incident for on-call engineers.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Handler"
  description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a PagerDuty incident for on-call engineers."
  tags:
    - devops
    - cicd
    - github
    - jira
    - microsoft-teams
    - pagerduty
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions failure on a protected branch with repo, branch, run ID, and failed job name, create a Jira bug, post a Teams alert, and trigger a PagerDuty incident. Use for automated CI/CD failure triage."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'bms/clinical-data-platform'."
            - name: branch
              in: body
              type: string
              description: "The Git branch where the failure occurred."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions run ID."
            - name: failed_job
              in: body
              type: string
              description: "The name of the failed CI job."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repo}} / {{branch}} — {{failed_job}}"
                description: "Repository: {{repo}}\nBranch: {{branch}}\nRun ID: {{run_id}}"
            - name: alert-teams
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.engineering_alerts_channel_id"
                text: "Pipeline failure: {{repo}} on {{branch}} — job {{failed_job}}. Jira: {{create-bug.key}}."
            - name: create-pd-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "CI Failure: {{repo}} {{branch}} {{failed_job}}"
                service_id: "$secrets.pagerduty_engineering_service_id"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Runs data quality checks on clinical trial data and creates CAPA items for discrepancies.

naftiko: "0.5"
info:
  title: Clinical Data Quality Pipeline
  version: "1.0"
  description: Runs data quality checks on clinical trial data and creates CAPA items for discrepancies.
  tags: [clinical, analytics, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_clinical_dq
        description: Queries data, identifies issues, creates CAPAs.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: visit_window
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT subject_id, discrepancy_type FROM clinical_dq WHERE trial='{{trial_id}}' AND visit_window='{{visit_window}}'"
          - name: create-capa
            call:
              operationId: createDeviation
              input:
                type: "data_quality"
                trial: "{{trial_id}}"
                details: "{{query.results}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "clinical-data"
                message: "DQ issues found for trial {{trial_id}}. CAPA created."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /deviations
          operations:
            - id: createDeviation
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Runs clinical endpoint analysis from Snowflake and publishes results to Confluence.

naftiko: "0.5"
info:
  title: Clinical Endpoint Analysis Pipeline
  version: "1.0"
  description: Runs clinical endpoint analysis from Snowflake and publishes results to Confluence.
  tags: [clinical, analytics, healthcare, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_endpoint_analysis
        description: Queries, analyzes, publishes.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: endpoint
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT subject_id, value FROM endpoints WHERE trial='{{trial_id}}' AND endpoint='{{endpoint}}'"
          - name: publish
            call:
              operationId: createContent
              input:
                type: "page"
                title: "Endpoint Analysis — {{trial_id}} — {{endpoint}}"
                space: "CLINICAL"
                body: "{{query.results}}"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content
          operations:
            - id: createContent
              method: POST

Queries trial enrollment data, identifies underperforming sites, and creates Jira improvement stories.

naftiko: "0.5"
info:
  title: Clinical Trial Enrollment Pipeline
  version: "1.0"
  description: Queries trial enrollment data, identifies underperforming sites, and creates Jira improvement stories.
  tags: [clinical, research, healthcare, jira]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: run_enrollment_pipeline
        description: Queries enrollment, identifies gaps, creates stories.
        inputParameters:
          - name: trial_id
            in: body
            required: true
            type: string
          - name: target_rate
            in: body
            required: true
            type: number
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT site_id, enrolled, target FROM trial_enrollment WHERE trial='{{trial_id}}' AND enrolled < {{target_rate}}"
          - name: create
            call:
              operationId: createIssue
              input:
                project: "CLINICAL"
                summary: "Enrollment gap for trial {{trial_id}}"
                priority: "High"
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.atlassian.net/rest/api/3
      authentication:
        type: basic
        username: $secrets.jira_user
        password: $secrets.jira_api_token
      resources:
        - path: /issue
          operations:
            - id: createIssue
              method: POST

Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams.

naftiko: "0.5"
info:
  label: "Clinical Trial Milestone Tracker"
  description: "Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams."
  tags:
    - clinical-trials
    - veeva
    - jira
    - microsoft-teams
    - life-sciences
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: track-trial-milestone
          description: "Given a Veeva Vault study ID and milestone name, retrieve current milestone status, create a Jira tracking task for the clinical operations team, and notify the study lead via Teams. Use for clinical trial milestone monitoring and escalation."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "The Veeva Vault clinical study ID."
            - name: milestone_name
              in: body
              type: string
              description: "The clinical milestone name, e.g. 'First Patient In', 'Last Patient Out', 'Database Lock'."
          steps:
            - name: get-milestone
              type: call
              call: "veeva.get-study-milestone"
              with:
                study_id: "{{study_id}}"
                milestone: "{{milestone_name}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "CLIN"
                issuetype: "Task"
                summary: "Milestone update: {{milestone_name}} for study {{study_id}}"
                description: "Status: {{get-milestone.status}}\nPlanned date: {{get-milestone.planned_date}}\nActual date: {{get-milestone.actual_date}}"
            - name: notify-lead
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.clinical_ops_channel_id"
                text: "Trial {{study_id}} — {{milestone_name}}: {{get-milestone.status}}. Jira: {{create-task.key}}."
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://bms.veevavault.com/api/v23.3"
      authentication:
        type: bearer
        token: "$secrets.veeva_token"
      resources:
        - name: study-milestones
          path: "/objects/study__v/{{study_id}}/milestones"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: get-study-milestone
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves the current status and enrollment metrics for a BMS clinical trial.

naftiko: "0.5"
info:
  title: Clinical Trial Status Lookup
  version: "1.0"
  description: Retrieves the current status and enrollment metrics for a BMS clinical trial.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_trial_status
        description: Returns trial phase, enrollment, and site count.
        inputParameters:
          - name: trial_id
            in: query
            required: true
            type: string
        call:
          operationId: getTrialStatus
          input:
            trialId: "{{trial_id}}"
        outputParameters:
          - name: phase
            type: string
          - name: enrolled
            type: integer
          - name: sites
            type: integer
  consumes:
    - type: http
      baseUri: https://api.bms.com/clinical-trials/v1
      authentication:
        type: bearer
        token: $secrets.bms_clinical_token
      resources:
        - path: /trials/{trialId}
          operations:
            - id: getTrialStatus
              method: GET

Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams.

naftiko: "0.5"
info:
  label: "Concur Expense Report Approval Escalation"
  description: "Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams."
  tags:
    - finance
    - expense-management
    - sap-concur
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-ops
      port: 8080
      tools:
        - name: escalate-pending-expenses
          description: "Retrieve expense reports pending approval for more than the specified number of days from SAP Concur, and send reminder messages to the pending approvers via Teams. Use for weekly expense approval monitoring."
          inputParameters:
            - name: pending_days
              in: body
              type: integer
              description: "Minimum number of days an expense report must be pending to trigger a reminder."
          steps:
            - name: get-pending-reports
              type: call
              call: "concur.list-pending-reports"
              with:
                approvalStatusCode: "A_PEND"
                limit: "50"
            - name: notify-approvers
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-pending-reports.approver_email}}"
                text: "Reminder: You have {{get-pending-reports.count}} expense report(s) pending approval in SAP Concur. Please review at your earliest convenience."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          operations:
            - name: list-pending-reports
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Searches Confluence for standard operating procedures.

naftiko: "0.5"
info:
  title: Confluence BMS SOP Search
  version: "1.0"
  description: Searches Confluence for standard operating procedures.
  tags: [knowledge-management, quality, confluence]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: search_bms_sops
        description: Returns matching SOP pages.
        inputParameters:
          - name: query
            in: query
            required: true
            type: string
          - name: space
            in: query
            required: true
            type: string
        call:
          operationId: searchContent
          input:
            cql: "space={{space}} AND type=page AND text~'{{query}}'"
            limit: "20"
        outputParameters:
          - name: results
            type: array
  consumes:
    - type: http
      baseUri: https://bms.atlassian.net/wiki/rest/api
      authentication:
        type: basic
        username: $secrets.confluence_user
        password: $secrets.confluence_api_token
      resources:
        - path: /content/search
          operations:
            - id: searchContent
              method: GET

Triggers ML pipeline for drug discovery.

naftiko: "0.5"
info:
  title: Databricks BMS ML Pipeline
  version: "1.0"
  description: Triggers ML pipeline for drug discovery.
  tags: [analytics, research, healthcare, databricks]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: trigger_bms_ml
        description: Runs, refreshes, notifies.
        inputParameters:
          - name: pipeline
            in: body
            required: true
            type: string
          - name: model
            in: body
            required: true
            type: string
        steps:
          - name: run
            call:
              operationId: triggerJob
              input:
                pipeline: "{{pipeline}}"
          - name: refresh
            call:
              operationId: refreshDataset
              input:
                dataset: "drug-predictions"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "data-science"
                message: "ML complete."
  consumes:
    - type: http
      baseUri: https://bms-databricks.azuredatabricks.net/api/2.1
      authentication:
        type: bearer
        token: $secrets.databricks_token
      resources:
        - path: /jobs/run-now
          operations:
            - id: triggerJob
              method: POST
    - type: http
      baseUri: https://api.powerbi.com/v1.0/myorg
      authentication:
        type: bearer
        token: $secrets.powerbi_token
      resources:
        - path: /groups/research/datasets/drug-predictions/refreshes
          operations:
            - id: refreshDataset
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Queries Datadog for BMS digital platform health metrics.

naftiko: "0.5"
info:
  title: Datadog BMS Platform Health
  version: "1.0"
  description: Queries Datadog for BMS digital platform health metrics.
  tags: [observability, datadog, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: query_bms_health
        description: Returns error rates and latency.
        inputParameters:
          - name: service
            in: query
            required: true
            type: string
          - name: range
            in: query
            required: true
            type: string
        call:
          operationId: queryMetric
          input:
            query: "avg:http.errors{service:{{service}}}"
            from: "{{range}}"
        outputParameters:
          - name: error_rate
            type: number
          - name: p99_ms
            type: number
  consumes:
    - type: http
      baseUri: https://api.datadoghq.com/api/v1
      authentication:
        type: apikey
        name: DD-API-KEY
        in: header
        key: $secrets.datadog_api_key
      resources:
        - path: /metrics/query
          operations:
            - id: queryMetric
              method: GET

When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team.

naftiko: "0.5"
info:
  label: "Datadog Production Alert Escalation"
  description: "When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team."
  tags:
    - observability
    - datadog
    - pagerduty
    - incident-response
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: observability-ops
      port: 8080
      tools:
        - name: escalate-monitor-alert
          description: "Given a Datadog monitor ID in ALERT state and the responsible PagerDuty service ID, fetch monitor details and create a PagerDuty incident. Use for any production monitor requiring on-call response."
          inputParameters:
            - name: monitor_id
              in: body
              type: integer
              description: "The Datadog monitor ID that entered ALERT state."
            - name: pagerduty_service_id
              in: body
              type: string
              description: "The PagerDuty service ID for routing the incident."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-monitor.name}} — ALERT"
                service_id: "{{pagerduty_service_id}}"
                body: "Monitor: {{get-monitor.name}}\nQuery: {{get-monitor.query}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Retrieves the current development pipeline status for a BMS compound.

naftiko: "0.5"
info:
  title: Drug Pipeline Status
  version: "1.0"
  description: Retrieves the current development pipeline status for a BMS compound.
  tags: [research, drug-development, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_pipeline_status
        description: Returns compound phase, indication, and expected milestones.
        inputParameters:
          - name: compound_id
            in: query
            required: true
            type: string
        call:
          operationId: getPipelineStatus
          input:
            compoundId: "{{compound_id}}"
        outputParameters:
          - name: phase
            type: string
          - name: indication
            type: string
          - name: next_milestone
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/pipeline/v1
      authentication:
        type: bearer
        token: $secrets.bms_pipeline_token
      resources:
        - path: /compounds/{compoundId}
          operations:
            - id: getPipelineStatus
              method: GET

Creates a drug supply order, validates inventory, and schedules distribution.

naftiko: "0.5"
info:
  title: Drug Supply Chain Order
  version: "1.0"
  description: Creates a drug supply order, validates inventory, and schedules distribution.
  tags: [manufacturing, supply-chain, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: create_drug_supply_order
        description: Checks inventory, creates order, notifies logistics.
        inputParameters:
          - name: product_code
            in: body
            required: true
            type: string
          - name: quantity
            in: body
            required: true
            type: integer
          - name: destination
            in: body
            required: true
            type: string
        steps:
          - name: check
            call:
              operationId: checkInventory
              input:
                productCode: "{{product_code}}"
          - name: order
            call:
              operationId: createSupplyOrder
              input:
                productCode: "{{product_code}}"
                quantity: "{{quantity}}"
                destination: "{{destination}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "supply-chain"
                message: "Supply order {{order.order_id}} created for {{product_code}}."
  consumes:
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /inventory/{productCode}
          operations:
            - id: checkInventory
              method: GET
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /orders
          operations:
            - id: createSupplyOrder
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

When an employee termination is processed in Workday, revokes Okta access, closes open ServiceNow tickets, and notifies the IT offboarding team via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee termination is processed in Workday, revokes Okta access, closes open ServiceNow tickets, and notifies the IT offboarding team via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, deactivate the employee's Okta account, close their open ServiceNow tickets, and notify the IT offboarding team in Teams. Invoke when an employee departure is confirmed."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's final working day in ISO 8601 format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: deactivate-okta
              type: call
              call: "okta.deactivate-user"
              with:
                user_login: "{{get-employee.work_email}}"
            - name: notify-it
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.it_offboarding_channel_id"
                text: "Offboarding initiated: {{get-employee.full_name}} ({{get-employee.work_email}}). Okta deactivated. Last day: {{termination_date}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/bms/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://bms.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-deactivate
          path: "/users/{{user_login}}/lifecycle/deactivate"
          inputParameters:
            - name: user_login
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message to the employee and their manager.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message to the employee and their manager."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Okta, and Microsoft Teams. Invoke when a new hire record is confirmed in Workday."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire, e.g. 'WD-00456'."
            - name: start_date
              in: body
              type: string
              description: "The employee's start date in ISO 8601 format, e.g. '2026-04-14'."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr_onboarding"
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                assigned_group: "IT_Onboarding"
            - name: provision-okta
              type: call
              call: "okta.create-user"
              with:
                first_name: "{{get-employee.first_name}}"
                last_name: "{{get-employee.last_name}}"
                email: "{{get-employee.work_email}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Bristol Myers Squibb, {{get-employee.first_name}}! Your IT ticket is {{open-ticket.number}}. Start date: {{start_date}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/bms/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://bms.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

App release workflow.

naftiko: "0.5"
info:
  title: GitHub BMS Release
  version: "1.0"
  description: App release workflow.
  tags: [devops, research, healthcare, github]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: release_bms_app
        description: Builds, changes, notifies.
        inputParameters:
          - name: repo
            in: body
            required: true
            type: string
          - name: tag
            in: body
            required: true
            type: string
        steps:
          - name: build
            call:
              operationId: triggerWorkflow
              input:
                repo: "{{repo}}"
                ref: "{{tag}}"
          - name: change
            call:
              operationId: createChange
              input:
                short_description: "Release {{tag}} for {{repo}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "releases"
                message: "Release {{tag}} initiated."
  consumes:
    - type: http
      baseUri: https://api.github.com
      authentication:
        type: bearer
        token: $secrets.github_token
      resources:
        - path: /repos/bms/{repo}/actions/workflows/release.yml/dispatches
          operations:
            - id: triggerWorkflow
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/change_request
          operations:
            - id: createChange
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty.

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Triage"
  description: "When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty."
  tags:
    - devops
    - security
    - github
    - jira
    - pagerduty
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: triage-security-vulnerability
          description: "Given a GitHub repository, CVE ID, and severity level, create a Jira security ticket with full vulnerability context and trigger a PagerDuty alert for the security engineering team. Use for critical and high-severity CVE findings."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository full name, e.g. 'bms/genomics-pipeline'."
            - name: cve_id
              in: body
              type: string
              description: "The CVE identifier, e.g. 'CVE-2025-1234'."
            - name: severity
              in: body
              type: string
              description: "Severity level: 'critical', 'high', 'medium', 'low'."
          steps:
            - name: create-sec-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "[{{severity}}] {{cve_id}} in {{repo}}"
                description: "Repository: {{repo}}\nCVE: {{cve_id}}\nSeverity: {{severity}}"
            - name: page-security
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "Security vulnerability {{cve_id}} in {{repo}} — {{severity}}"
                service_id: "$secrets.pagerduty_security_service_id"
                body: "Jira: {{create-sec-ticket.key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Identifies target HCPs from Snowflake data and creates engagement campaigns in Veeva CRM.

naftiko: "0.5"
info:
  title: HCP Engagement Campaign Orchestrator
  version: "1.0"
  description: Identifies target HCPs from Snowflake data and creates engagement campaigns in Veeva CRM.
  tags: [commercial, hcp-engagement, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: orchestrate_hcp_campaign
        description: Queries HCPs, creates campaign, assigns reps.
        inputParameters:
          - name: product_code
            in: body
            required: true
            type: string
          - name: specialty
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: executeQuery
              input:
                statement: "SELECT hcp_id, prescribing_volume FROM hcp_data WHERE product='{{product_code}}' AND specialty='{{specialty}}'"
          - name: campaign
            call:
              operationId: createCampaign
              input:
                product: "{{product_code}}"
                hcps: "{{query.results}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "commercial"
                message: "HCP campaign launched for {{product_code}}."
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST
    - type: http
      baseUri: https://bms.veevacrm.com/api/v1
      authentication:
        type: bearer
        token: $secrets.veeva_crm_token
      resources:
        - path: /campaigns
          operations:
            - id: createCampaign
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Queries the Jira backlog for BMS R&D platform stories.

naftiko: "0.5"
info:
  title: Jira BMS Backlog Query
  version: "1.0"
  description: Queries the Jira backlog for BMS R&D platform stories.
  tags: [project-management, research, jira]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: query_bms_backlog
        description: Returns backlog items.
        inputParameters:
          - name: project
            in: query
            required: true
            type: string
          - name: priority
            in: query
            required: true
            type: string
        call:
          operationId: searchIssues
          input:
            jql: "project={{project}} AND priority={{priority}}"
            maxResults: "50"
        outputParameters:
          - name: issues
            type: array
          - name: total
            type: integer
  consumes:
    - type: http
      baseUri: https://bms.atlassian.net/rest/api/3
      authentication:
        type: basic
        username: $secrets.jira_user
        password: $secrets.jira_api_token
      resources:
        - path: /search
          operations:
            - id: searchIssues
              method: GET

Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel.

naftiko: "0.5"
info:
  label: "Jira Regulatory Sprint Digest"
  description: "Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel."
  tags:
    - regulatory
    - jira
    - microsoft-teams
    - sprint-planning
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: digest-regulatory-sprint
          description: "Given a Jira project key and sprint ID for regulatory affairs, fetch all open issues and their status, then post a structured digest to the regulatory leadership Teams channel. Use weekly for sprint reviews."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key for regulatory work, e.g. 'REGY'."
            - name: sprint_id
              in: body
              type: integer
              description: "The Jira sprint ID to digest."
          steps:
            - name: get-issues
              type: call
              call: "jira.search-issues"
              with:
                jql: "project={{project_key}} AND sprint={{sprint_id}}"
            - name: post-digest
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.regulatory_leadership_channel_id"
                text: "Regulatory sprint {{sprint_id}} digest: {{get-issues.total}} issues in scope."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issue-search
          path: "/search"
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves laboratory assay results for a clinical sample from the LIMS.

naftiko: "0.5"
info:
  title: Lab Result Query
  version: "1.0"
  description: Retrieves laboratory assay results for a clinical sample from the LIMS.
  tags: [clinical, research, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_lab_results
        description: Returns assay results, QC status, and analyst details.
        inputParameters:
          - name: sample_id
            in: query
            required: true
            type: string
          - name: assay_type
            in: query
            required: true
            type: string
        call:
          operationId: getLabResult
          input:
            sampleId: "{{sample_id}}"
            assayType: "{{assay_type}}"
        outputParameters:
          - name: result_value
            type: number
          - name: qc_status
            type: string
          - name: analyst
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/lims/v1
      authentication:
        type: bearer
        token: $secrets.bms_lims_token
      resources:
        - path: /samples/{sampleId}/results
          operations:
            - id: getLabResult
              method: GET

Validates quality test results for a batch and routes through release approval with notification.

naftiko: "0.5"
info:
  title: Manufacturing Batch Release Workflow
  version: "1.0"
  description: Validates quality test results for a batch and routes through release approval with notification.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_batch_release
        description: Checks QC, submits release, notifies.
        inputParameters:
          - name: batch_number
            in: body
            required: true
            type: string
          - name: product_code
            in: body
            required: true
            type: string
        steps:
          - name: check-qc
            call:
              operationId: getQCResults
              input:
                batchNumber: "{{batch_number}}"
          - name: submit-release
            call:
              operationId: submitBatchRelease
              input:
                batchNumber: "{{batch_number}}"
                qcPassed: "{{check-qc.all_passed}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "manufacturing-quality"
                message: "Batch {{batch_number}} release: {{submit-release.status}}."
  consumes:
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /batches/{batchNumber}/qc
          operations:
            - id: getQCResults
              method: GET
    - type: http
      baseUri: https://api.bms.com/manufacturing/v1
      authentication:
        type: bearer
        token: $secrets.bms_mfg_token
      resources:
        - path: /batches/{batchNumber}/release
          operations:
            - id: submitBatchRelease
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Provisions access.

naftiko: "0.5"
info:
  title: Okta BMS Access
  version: "1.0"
  description: Provisions access.
  tags: [identity-management, okta, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: provision_bms
        description: Role, provision, log.
        inputParameters:
          - name: eid
            in: body
            required: true
            type: string
          - name: app
            in: body
            required: true
            type: string
        steps:
          - name: role
            call:
              operationId: getRole
              input:
                eid: "{{eid}}"
          - name: provision
            call:
              operationId: assignApp
              input:
                eid: "{{eid}}"
                app: "{{app}}"
          - name: log
            call:
              operationId: createIncident
              input:
                short_description: "Access: {{eid}}"
                urgency: "4"
  consumes:
    - type: http
      baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
      authentication:
        type: bearer
        token: $secrets.workday_token
      resources:
        - path: /workers/{eid}
          operations:
            - id: getRole
              method: GET
    - type: http
      baseUri: https://bms.okta.com/api/v1
      authentication:
        type: bearer
        token: $secrets.okta_token
      resources:
        - path: /apps/{app}/users
          operations:
            - id: assignApp
              method: PUT
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST

Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team.

naftiko: "0.5"
info:
  label: "Okta User Access Review for GxP Systems"
  description: "Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team."
  tags:
    - identity
    - security
    - okta
    - servicenow
    - compliance
    - gxp
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-compliance
      port: 8080
      tools:
        - name: run-gxp-access-review
          description: "Given an Okta GxP application ID and ServiceNow assignment group, list all application users, compile an access roster, and create a ServiceNow task for the compliance team to review. Use for quarterly GxP system access reviews."
          inputParameters:
            - name: okta_app_id
              in: body
              type: string
              description: "The Okta application ID for the GxP-regulated system."
            - name: assignment_group
              in: body
              type: string
              description: "The ServiceNow assignment group for the compliance review task."
          steps:
            - name: list-app-users
              type: call
              call: "okta.list-app-users"
              with:
                app_id: "{{okta_app_id}}"
            - name: create-review-task
              type: call
              call: "servicenow.create-incident"
              with:
                category: "access_review"
                short_description: "GxP access review: {{okta_app_id}} — {{list-app-users.count}} users"
                assigned_group: "{{assignment_group}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://bms.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: app-users
          path: "/apps/{{app_id}}/users"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: list-app-users
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves patient enrollment details for a BMS patient support program.

naftiko: "0.5"
info:
  title: Patient Enrollment Lookup
  version: "1.0"
  description: Retrieves patient enrollment details for a BMS patient support program.
  tags: [clinical, patient-services, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_patient_enrollment
        description: Returns enrollment status and assigned nurse navigator.
        inputParameters:
          - name: patient_id
            in: query
            required: true
            type: string
          - name: program_id
            in: query
            required: true
            type: string
        call:
          operationId: getPatientEnrollment
          input:
            patientId: "{{patient_id}}"
            programId: "{{program_id}}"
        outputParameters:
          - name: status
            type: string
          - name: navigator
            type: string
          - name: enrollment_date
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/patient-services/v1
      authentication:
        type: bearer
        token: $secrets.bms_patient_token
      resources:
        - path: /patients/{patientId}/enrollment
          operations:
            - id: getPatientEnrollment
              method: GET

Enrolls a patient in a BMS support program, assigns a nurse navigator, and sends welcome materials.

naftiko: "0.5"
info:
  title: Patient Support Enrollment Workflow
  version: "1.0"
  description: Enrolls a patient in a BMS support program, assigns a nurse navigator, and sends welcome materials.
  tags: [clinical, patient-services, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: enroll_patient_support
        description: Enrolls patient, assigns navigator, sends welcome.
        inputParameters:
          - name: patient_id
            in: body
            required: true
            type: string
          - name: program_id
            in: body
            required: true
            type: string
          - name: prescriber_npi
            in: body
            required: true
            type: string
        steps:
          - name: enroll
            call:
              operationId: enrollPatient
              input:
                patientId: "{{patient_id}}"
                programId: "{{program_id}}"
                prescriberNpi: "{{prescriber_npi}}"
          - name: assign
            call:
              operationId: assignNavigator
              input:
                patientId: "{{patient_id}}"
                programId: "{{program_id}}"
          - name: welcome
            call:
              operationId: sendEmail
              input:
                to: "{{patient_id}}@bms-patient-portal.com"
                subject: "Welcome to BMS Patient Support"
                body: "You have been enrolled in program {{program_id}}. Your navigator: {{assign.navigator_name}}."
  consumes:
    - type: http
      baseUri: https://api.bms.com/patient-services/v1
      authentication:
        type: bearer
        token: $secrets.bms_patient_token
      resources:
        - path: /enrollment
          operations:
            - id: enrollPatient
              method: POST
    - type: http
      baseUri: https://api.bms.com/patient-services/v1
      authentication:
        type: bearer
        token: $secrets.bms_patient_token
      resources:
        - path: /patients/{patientId}/navigator
          operations:
            - id: assignNavigator
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /me/sendMail
          operations:
            - id: sendEmail
              method: POST

When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder.

naftiko: "0.5"
info:
  label: "Pharmacovigilance Adverse Event Reporter"
  description: "When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder."
  tags:
    - pharmacovigilance
    - safety
    - veeva
    - microsoft-teams
    - compliance
    - life-sciences
capability:
  exposes:
    - type: mcp
      namespace: pv-ops
      port: 8080
      tools:
        - name: report-adverse-event
          description: "Given an adverse event case ID, drug name, and reporter contact, create a Veeva Vault safety case record and notify the pharmacovigilance team in Teams with the 15-day regulatory deadline. Use for post-market safety reporting."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The internal adverse event case identifier."
            - name: drug_name
              in: body
              type: string
              description: "The BMS product name involved in the adverse event."
            - name: seriousness
              in: body
              type: string
              description: "Seriousness classification: 'Serious' or 'Non-Serious'."
          steps:
            - name: create-vault-case
              type: call
              call: "veeva.create-safety-case"
              with:
                case_id: "{{case_id}}"
                product: "{{drug_name}}"
                seriousness: "{{seriousness}}"
            - name: notify-pv-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.pv_team_channel_id"
                text: "New {{seriousness}} AE case {{case_id}} for {{drug_name}} submitted to Vault ({{create-vault-case.doc_id}}). 15-day deadline applies."
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://bms.veevavault.com/api/v23.3"
      authentication:
        type: bearer
        token: "$secrets.veeva_token"
      resources:
        - name: safety-cases
          path: "/objects/safety_case__v"
          operations:
            - name: create-safety-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Refreshes analytics dashboard.

naftiko: "0.5"
info:
  title: Power BI BMS Refresh
  version: "1.0"
  description: Refreshes analytics dashboard.
  tags: [analytics, research, healthcare, power-bi]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: refresh_bms_dash
        description: Refreshes and notifies.
        inputParameters:
          - name: dataset
            in: body
            required: true
            type: string
          - name: workspace
            in: body
            required: true
            type: string
        steps:
          - name: refresh
            call:
              operationId: refreshDataset
              input:
                dataset: "{{dataset}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "analytics"
                message: "Dashboard refreshed."
  consumes:
    - type: http
      baseUri: https://api.powerbi.com/v1.0/myorg
      authentication:
        type: bearer
        token: $secrets.powerbi_token
      resources:
        - path: /groups/{workspace}/datasets/{dataset}/refreshes
          operations:
            - id: refreshDataset
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete.

naftiko: "0.5"
info:
  label: "Power BI Regulatory KPI Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete."
  tags:
    - data
    - analytics
    - power-bi
    - microsoft-teams
    - reporting
    - regulatory
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: refresh-regulatory-dashboard
          description: "Given a Power BI dataset ID and workspace ID, trigger a dataset refresh and send a Teams notification to regulatory leadership when complete. Use before monthly regulatory review meetings."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID containing the regulatory dashboard."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-leadership
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.regulatory_leadership_channel_id"
                text: "Regulatory KPI dashboard dataset {{dataset_id}} has been refreshed and is ready for review."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Creates a CAPA for a quality deviation, assigns investigators, and tracks resolution.

naftiko: "0.5"
info:
  title: Quality Deviation CAPA Workflow
  version: "1.0"
  description: Creates a CAPA for a quality deviation, assigns investigators, and tracks resolution.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_deviation_capa
        description: Creates CAPA, assigns, tracks.
        inputParameters:
          - name: deviation_id
            in: body
            required: true
            type: string
          - name: root_cause
            in: body
            required: true
            type: string
        steps:
          - name: create-capa
            call:
              operationId: createCAPA
              input:
                deviationId: "{{deviation_id}}"
                rootCause: "{{root_cause}}"
          - name: assign
            call:
              operationId: assignInvestigator
              input:
                capaId: "{{create-capa.capa_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "quality-ops"
                message: "CAPA {{create-capa.capa_id}} created for deviation {{deviation_id}}."
  consumes:
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /capas
          operations:
            - id: createCAPA
              method: POST
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /capas/{capaId}/assign
          operations:
            - id: assignInvestigator
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves details of a quality deviation or CAPA from the BMS quality management system.

naftiko: "0.5"
info:
  title: Quality Deviation Lookup
  version: "1.0"
  description: Retrieves details of a quality deviation or CAPA from the BMS quality management system.
  tags: [manufacturing, quality, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_quality_deviation
        description: Returns deviation type, root cause, and CAPA status.
        inputParameters:
          - name: deviation_id
            in: query
            required: true
            type: string
        call:
          operationId: getDeviation
          input:
            deviationId: "{{deviation_id}}"
        outputParameters:
          - name: type
            type: string
          - name: root_cause
            type: string
          - name: capa_status
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/quality/v1
      authentication:
        type: bearer
        token: $secrets.bms_quality_token
      resources:
        - path: /deviations/{deviationId}
          operations:
            - id: getDeviation
              method: GET

Monitors Veeva Vault for regulatory submission documents approaching deadline, creates ServiceNow tasks for the regulatory affairs team, and sends Teams alerts.

naftiko: "0.5"
info:
  label: "Regulatory Document Submission Tracker"
  description: "Monitors Veeva Vault for regulatory submission documents approaching deadline, creates ServiceNow tasks for the regulatory affairs team, and sends Teams alerts."
  tags:
    - regulatory
    - veeva
    - servicenow
    - microsoft-teams
    - compliance
    - life-sciences
capability:
  exposes:
    - type: mcp
      namespace: regulatory-ops
      port: 8080
      tools:
        - name: track-submission-deadline
          description: "Given a Veeva Vault submission ID, retrieve the submission package status and upcoming deadline, create a ServiceNow task for regulatory affairs, and alert the regulatory team in Teams. Use for proactive deadline monitoring."
          inputParameters:
            - name: submission_id
              in: body
              type: string
              description: "The Veeva Vault regulatory submission ID."
            - name: days_until_deadline
              in: body
              type: integer
              description: "Number of days until the submission deadline to trigger the alert."
          steps:
            - name: get-submission
              type: call
              call: "veeva.get-submission"
              with:
                submission_id: "{{submission_id}}"
            - name: create-task
              type: call
              call: "servicenow.create-incident"
              with:
                category: "regulatory_submission"
                short_description: "Submission {{submission_id}} due in {{days_until_deadline}} days: {{get-submission.submission_type}}"
            - name: alert-team
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.regulatory_affairs_channel_id"
                text: "Regulatory submission {{submission_id}} ({{get-submission.submission_type}}) is due in {{days_until_deadline}} days. ServiceNow: {{create-task.number}}."
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://bms.veevavault.com/api/v23.3"
      authentication:
        type: bearer
        token: "$secrets.veeva_token"
      resources:
        - name: submissions
          path: "/objects/regulatory_submission__v/{{submission_id}}"
          inputParameters:
            - name: submission_id
              in: path
          operations:
            - name: get-submission
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates a regulatory submission by compiling documents from Veeva, generating the submission package, and tracking in ServiceNow.

naftiko: "0.5"
info:
  title: Regulatory Submission Orchestrator
  version: "1.0"
  description: Orchestrates a regulatory submission by compiling documents from Veeva, generating the submission package, and tracking in ServiceNow.
  tags: [regulatory, compliance, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: orchestrate_submission
        description: Compiles documents, generates package, tracks progress.
        inputParameters:
          - name: submission_id
            in: body
            required: true
            type: string
          - name: submission_type
            in: body
            required: true
            type: string
        steps:
          - name: compile
            call:
              operationId: compileDocuments
              input:
                submissionId: "{{submission_id}}"
                type: "{{submission_type}}"
          - name: generate
            call:
              operationId: generatePackage
              input:
                submissionId: "{{submission_id}}"
                documents: "{{compile.document_ids}}"
          - name: track
            call:
              operationId: createIncident
              input:
                short_description: "Regulatory submission {{submission_id}} initiated"
                category: "regulatory"
                urgency: "2"
  consumes:
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /submissions/{submissionId}/documents
          operations:
            - id: compileDocuments
              method: GET
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /submissions/{submissionId}/package
          operations:
            - id: generatePackage
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST

Checks the status of an FDA or EMA regulatory submission.

naftiko: "0.5"
info:
  title: Regulatory Submission Status
  version: "1.0"
  description: Checks the status of an FDA or EMA regulatory submission.
  tags: [regulatory, compliance, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_submission_status
        description: Returns submission status, target action date, and reviewer assignment.
        inputParameters:
          - name: submission_id
            in: query
            required: true
            type: string
        call:
          operationId: getSubmissionStatus
          input:
            submissionId: "{{submission_id}}"
        outputParameters:
          - name: status
            type: string
          - name: target_date
            type: string
          - name: reviewer
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/regulatory/v1
      authentication:
        type: bearer
        token: $secrets.bms_regulatory_token
      resources:
        - path: /submissions/{submissionId}
          operations:
            - id: getSubmissionStatus
              method: GET

Manages key opinion leader engagement tracking in Salesforce.

naftiko: "0.5"
info:
  title: Salesforce BMS KOL Engagement
  version: "1.0"
  description: Manages key opinion leader engagement tracking in Salesforce.
  tags: [commercial, medical-affairs, healthcare, salesforce]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: track_kol_engagement
        description: Creates engagement records and assigns follow-ups.
        inputParameters:
          - name: kol_id
            in: body
            required: true
            type: string
          - name: interaction_type
            in: body
            required: true
            type: string
          - name: compound
            in: body
            required: true
            type: string
        steps:
          - name: create
            call:
              operationId: createEngagement
              input:
                kolId: "{{kol_id}}"
                type: "{{interaction_type}}"
                compound: "{{compound}}"
          - name: followup
            call:
              operationId: createTask
              input:
                kolId: "{{kol_id}}"
                type: "follow_up"
                compound: "{{compound}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "medical-affairs"
                message: "KOL {{kol_id}} engagement recorded for {{compound}}."
  consumes:
    - type: http
      baseUri: https://bms.my.salesforce.com/services/data/v58.0
      authentication:
        type: bearer
        token: $secrets.salesforce_token
      resources:
        - path: /sobjects/Engagement__c
          operations:
            - id: createEngagement
              method: POST
    - type: http
      baseUri: https://bms.my.salesforce.com/services/data/v58.0
      authentication:
        type: bearer
        token: $secrets.salesforce_token
      resources:
        - path: /sobjects/Task
          operations:
            - id: createTask
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping.

naftiko: "0.5"
info:
  label: "Salesforce CRM New Lead Routing"
  description: "When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping."
  tags:
    - crm
    - sales
    - salesforce
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: crm-ops
      port: 8080
      tools:
        - name: route-new-lead
          description: "Given a Salesforce lead ID from a marketing event, retrieve the lead details, assign to the correct territory-based sales representative, and update the lead source field. Use for automated lead routing from conferences and digital campaigns."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce Lead ID (18-character)."
            - name: territory_code
              in: body
              type: string
              description: "The sales territory code for routing, e.g. 'NE-ONCO-01'."
          steps:
            - name: get-lead
              type: call
              call: "salesforce.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: update-lead
              type: call
              call: "salesforce-update.update-lead"
              with:
                lead_id: "{{lead_id}}"
                Territory__c: "{{territory_code}}"
                Status: "Working"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://bms.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: get-lead
              method: GET
    - type: http
      namespace: salesforce-update
      baseUri: "https://bms.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: lead-update
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: update-lead
              method: PATCH

When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Supplier Onboarding"
  description: "When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams."
  tags:
    - procurement
    - sap-ariba
    - microsoft-teams
    - supplier-management
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: onboard-supplier
          description: "Given a supplier name, DUNS number, and commodity code, create the supplier profile in SAP Ariba, trigger the qualification workflow, and notify the procurement team in Teams. Use when a new supplier relationship is approved."
          inputParameters:
            - name: supplier_name
              in: body
              type: string
              description: "The legal name of the supplier company."
            - name: duns_number
              in: body
              type: string
              description: "The Dun & Bradstreet DUNS number for the supplier."
            - name: commodity_code
              in: body
              type: string
              description: "The UNSPSC commodity code for supplier classification."
          steps:
            - name: create-supplier
              type: call
              call: "ariba.create-supplier"
              with:
                name: "{{supplier_name}}"
                duns: "{{duns_number}}"
                commodity: "{{commodity_code}}"
            - name: trigger-qualification
              type: call
              call: "ariba-qual.trigger-qualification-survey"
              with:
                supplier_id: "{{create-supplier.id}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.procurement_channel_id"
                text: "Supplier {{supplier_name}} onboarded in Ariba (ID: {{create-supplier.id}}). Qualification survey triggered."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: suppliers
          path: "/suppliers"
          operations:
            - name: create-supplier
              method: POST
    - type: http
      namespace: ariba-qual
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: qualification-surveys
          path: "/suppliers/{{supplier_id}}/qualificationSurveys"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: trigger-qualification-survey
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams channel.

naftiko: "0.5"
info:
  label: "SAP Budget vs Actuals Variance Report"
  description: "Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams channel."
  tags:
    - finance
    - erp
    - sap
    - reporting
    - budgeting
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: publish-budget-variance
          description: "Given a SAP controlling area and fiscal period, retrieve actuals vs. budget by cost center and post a variance summary to the finance Teams channel. Use monthly for budget review meetings."
          inputParameters:
            - name: controlling_area
              in: body
              type: string
              description: "The SAP controlling area code."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period in YYYYMM format, e.g. '202603'."
          steps:
            - name: get-actuals
              type: call
              call: "sap.get-cost-center-actuals"
              with:
                controlling_area: "{{controlling_area}}"
                period: "{{fiscal_period}}"
            - name: post-summary
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.finance_leadership_channel_id"
                text: "Budget variance for period {{fiscal_period}}: Actuals {{get-actuals.total_actual}}, Budget {{get-actuals.total_budget}}. Variance: {{get-actuals.variance_pct}}%."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bms-s4.sap.com/sap/opu/odata/sap/FCO_PI_CONTROLLING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-actuals
          path: "/CostCenterActualsSet"
          operations:
            - name: get-cost-center-actuals
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves a manufacturing production order from the BMS SAP system.

naftiko: "0.5"
info:
  title: SAP Manufacturing Order Lookup
  version: "1.0"
  description: Retrieves a manufacturing production order from the BMS SAP system.
  tags: [manufacturing, sap, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_mfg_order
        description: Returns order status, batch number, and completion percentage.
        inputParameters:
          - name: order_number
            in: query
            required: true
            type: string
        call:
          operationId: getProductionOrder
          input:
            orderNumber: "{{order_number}}"
        outputParameters:
          - name: status
            type: string
          - name: batch_number
            type: string
          - name: completion_pct
            type: number
  consumes:
    - type: http
      baseUri: https://bms-sap.com/api/v1
      authentication:
        type: bearer
        token: $secrets.sap_token
      resources:
        - path: /production-orders/{orderNumber}
          operations:
            - id: getProductionOrder
              method: GET

Routes BMS procurement requests through SAP and notifies finance.

naftiko: "0.5"
info:
  title: SAP BMS Procurement Approval
  version: "1.0"
  description: Routes BMS procurement requests through SAP and notifies finance.
  tags: [procurement, sap, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: process_bms_procurement
        description: Gets requisition, submits, notifies.
        inputParameters:
          - name: req_id
            in: body
            required: true
            type: string
          - name: dept
            in: body
            required: true
            type: string
        steps:
          - name: get
            call:
              operationId: getRequisition
              input:
                reqId: "{{req_id}}"
          - name: submit
            call:
              operationId: submitApproval
              input:
                reqId: "{{req_id}}"
                dept: "{{dept}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "finance"
                message: "Procurement {{req_id}} submitted."
  consumes:
    - type: http
      baseUri: https://bms-sap.com/api/v1
      authentication:
        type: bearer
        token: $secrets.sap_token
      resources:
        - path: /requisitions/{reqId}
          operations:
            - id: getRequisition
              method: GET
    - type: http
      baseUri: https://bms-sap.com/api/v1
      authentication:
        type: bearer
        token: $secrets.sap_token
      resources:
        - path: /approvals
          operations:
            - id: submitApproval
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and open line items.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by number, returning header status, vendor name, total value, and open line items."
  tags:
    - finance
    - erp
    - sap
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, retrieve the full PO header including status, vendor, total amount, currency, and line item count. Use for procurement status checks and AP validation."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number, e.g. '4500012345'."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_amount
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bms-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves IT incident details from BMS ServiceNow.

naftiko: "0.5"
info:
  title: ServiceNow BMS Ticket Lookup
  version: "1.0"
  description: Retrieves IT incident details from BMS ServiceNow.
  tags: [itsm, servicenow, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_bms_ticket
        description: Returns ticket state.
        inputParameters:
          - name: number
            in: query
            required: true
            type: string
        call:
          operationId: getIncident
          input:
            number: "{{number}}"
        outputParameters:
          - name: state
            type: string
          - name: assigned_to
            type: string
  consumes:
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: getIncident
              method: GET

When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Triage and On-Call Routing"
  description: "When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: triage-incident
          description: "Given a ServiceNow incident number and priority, fetch incident details, find the on-call engineer via PagerDuty, assign the ticket, and post an alert to the IT Teams channel. Use for P1/P2 incidents requiring immediate response."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number, e.g. 'INC0009876'."
            - name: priority
              in: body
              type: string
              description: "Priority level: 1 (Critical), 2 (High)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                number: "{{incident_number}}"
            - name: get-oncall
              type: call
              call: "pagerduty.get-oncall-user"
              with:
                schedule_id: "$secrets.pagerduty_it_schedule_id"
            - name: assign-incident
              type: call
              call: "servicenow-assign.update-incident"
              with:
                sys_id: "{{get-incident.sys_id}}"
                assigned_to: "{{get-oncall.user_email}}"
            - name: notify-teams
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.it_ops_channel_id"
                text: "P{{priority}} {{incident_number}}: {{get-incident.short_description}} assigned to {{get-oncall.user_name}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall-user
              method: GET
    - type: http
      namespace: servicenow-assign
      baseUri: "https://bms.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incident-update
          path: "/table/incident/{{sys_id}}"
          inputParameters:
            - name: sys_id
              in: path
          operations:
            - name: update-incident
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for clinical trial analytics data.

naftiko: "0.5"
info:
  title: Snowflake BMS Clinical Query
  version: "1.0"
  description: Queries Snowflake for clinical trial analytics data.
  tags: [clinical, analytics, snowflake]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: query_bms_clinical
        description: Returns clinical data aggregates.
        inputParameters:
          - name: trial_id
            in: query
            required: true
            type: string
          - name: endpoint
            in: query
            required: true
            type: string
        call:
          operationId: executeQuery
          input:
            statement: "SELECT subject_id, endpoint_value FROM clinical_data WHERE trial='{{trial_id}}' AND endpoint='{{endpoint}}'"
        outputParameters:
          - name: results
            type: array
  consumes:
    - type: http
      baseUri: https://bms-analytics.snowflakecomputing.com/api/v2
      authentication:
        type: bearer
        token: $secrets.snowflake_token
      resources:
        - path: /statements
          operations:
            - id: executeQuery
              method: POST

Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team.

naftiko: "0.5"
info:
  label: "Snowflake Clinical Data Quality Monitor"
  description: "Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - data-quality
    - clinical-trials
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: run-clinical-data-quality
          description: "Given a Snowflake schema and clinical study ID, execute data quality validation rules and create Jira tasks for any failing checks. Use for automated data quality gates before database lock."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "The clinical study identifier to scope the quality checks."
            - name: snowflake_schema
              in: body
              type: string
              description: "The Snowflake schema containing clinical trial data, e.g. 'CLINICAL.STUDY_CA125'."
          steps:
            - name: run-checks
              type: call
              call: "snowflake.execute-quality-checks"
              with:
                schema: "{{snowflake_schema}}"
                study_id: "{{study_id}}"
            - name: create-dq-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DG"
                issuetype: "Task"
                summary: "Data quality issues in study {{study_id}}: {{run-checks.failed_count}} checks failed"
                description: "Schema: {{snowflake_schema}}\nFailed checks: {{run-checks.failed_count}}\nDetails: {{run-checks.summary}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bms.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: execute-quality-checks
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Correlates security events.

naftiko: "0.5"
info:
  title: Splunk BMS Security
  version: "1.0"
  description: Correlates security events.
  tags: [security, compliance, healthcare, splunk]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: correlate_bms
        description: Queries, escalates, notifies.
        inputParameters:
          - name: window
            in: body
            required: true
            type: string
          - name: type
            in: body
            required: true
            type: string
        steps:
          - name: query
            call:
              operationId: searchEvents
              input:
                query: "index=security event_type={{type}}"
          - name: escalate
            call:
              operationId: createIncident
              input:
                short_description: "Security: {{type}}"
                urgency: "1"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "soc"
                message: "Escalation: {{type}}."
  consumes:
    - type: http
      baseUri: https://bms-splunk.com:8089/services
      authentication:
        type: bearer
        token: $secrets.splunk_token
      resources:
        - path: /search/jobs
          operations:
            - id: searchEvents
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/incident
          operations:
            - id: createIncident
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Checks drug product inventory levels at a BMS distribution center.

naftiko: "0.5"
info:
  title: Supply Chain Inventory Check
  version: "1.0"
  description: Checks drug product inventory levels at a BMS distribution center.
  tags: [manufacturing, supply-chain, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: check_drug_inventory
        description: Returns current stock level and reorder point.
        inputParameters:
          - name: product_code
            in: query
            required: true
            type: string
          - name: warehouse
            in: query
            required: true
            type: string
        call:
          operationId: checkInventory
          input:
            productCode: "{{product_code}}"
            warehouse: "{{warehouse}}"
        outputParameters:
          - name: quantity_on_hand
            type: integer
          - name: reorder_point
            type: integer
          - name: lot_number
            type: string
  consumes:
    - type: http
      baseUri: https://api.bms.com/supply-chain/v1
      authentication:
        type: bearer
        token: $secrets.bms_supply_token
      resources:
        - path: /inventory/{productCode}
          operations:
            - id: checkInventory
              method: GET

Provisions GxP infrastructure.

naftiko: "0.5"
info:
  title: Terraform BMS Provisioner
  version: "1.0"
  description: Provisions GxP infrastructure.
  tags: [infrastructure, devops, healthcare, terraform]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: provision_bms_env
        description: Terraform, CMDB, notify.
        inputParameters:
          - name: env
            in: body
            required: true
            type: string
          - name: workspace
            in: body
            required: true
            type: string
        steps:
          - name: apply
            call:
              operationId: triggerRun
              input:
                workspace: "{{workspace}}"
          - name: register
            call:
              operationId: createCI
              input:
                name: "{{env}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "platform"
                message: "Provisioned."
  consumes:
    - type: http
      baseUri: https://app.terraform.io/api/v2
      authentication:
        type: bearer
        token: $secrets.terraform_token
      resources:
        - path: /runs
          operations:
            - id: triggerRun
              method: POST
    - type: http
      baseUri: https://bms.service-now.com/api/now/v1
      authentication:
        type: basic
        username: $secrets.snow_user
        password: $secrets.snow_password
      resources:
        - path: /table/cmdb_ci
          operations:
            - id: createCI
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams.

naftiko: "0.5"
info:
  label: "Veeva Vault Document Approval Workflow"
  description: "Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams."
  tags:
    - regulatory
    - veeva
    - microsoft-teams
    - document-management
    - approval
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: document-ops
      port: 8080
      tools:
        - name: initiate-document-approval
          description: "Given a Veeva Vault document ID and list of approver emails, submit the document for approval in Vault, assign approvers, and send Teams notifications to each approver. Use for SOP revisions, regulatory filings, and quality document approvals."
          inputParameters:
            - name: vault_document_id
              in: body
              type: string
              description: "The Veeva Vault document ID to submit for approval."
            - name: approver_emails
              in: body
              type: string
              description: "Comma-separated list of approver email addresses."
            - name: due_date
              in: body
              type: string
              description: "The approval due date in ISO 8601 format."
          steps:
            - name: submit-for-approval
              type: call
              call: "veeva.submit-document-approval"
              with:
                document_id: "{{vault_document_id}}"
            - name: notify-approvers
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{approver_emails}}"
                text: "Document {{vault_document_id}} requires your approval in Veeva Vault by {{due_date}}. Workflow: {{submit-for-approval.workflow_id}}."
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://bms.veevavault.com/api/v23.3"
      authentication:
        type: bearer
        token: "$secrets.veeva_token"
      resources:
        - name: document-workflows
          path: "/objects/documents/{{document_id}}/lifecycles"
          inputParameters:
            - name: document_id
              in: path
          operations:
            - name: submit-document-approval
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Routes a regulatory document through multi-level approval in Veeva Vault and notifies stakeholders.

naftiko: "0.5"
info:
  title: Veeva Vault Document Approval Chain
  version: "1.0"
  description: Routes a regulatory document through multi-level approval in Veeva Vault and notifies stakeholders.
  tags: [regulatory, document-management, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: route_document_approval
        description: Submits for review, gets approval, notifies.
        inputParameters:
          - name: document_id
            in: body
            required: true
            type: string
          - name: approver_group
            in: body
            required: true
            type: string
        steps:
          - name: submit
            call:
              operationId: submitForReview
              input:
                documentId: "{{document_id}}"
                approverGroup: "{{approver_group}}"
          - name: approve
            call:
              operationId: getApprovalStatus
              input:
                documentId: "{{document_id}}"
          - name: notify
            call:
              operationId: sendTeamsMessage
              input:
                channelId: "regulatory-docs"
                message: "Document {{document_id}} approval status: {{approve.status}}."
  consumes:
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /objects/documents/{documentId}/actions/submit
          operations:
            - id: submitForReview
              method: POST
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /objects/documents/{documentId}/workflow
          operations:
            - id: getApprovalStatus
              method: GET
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /teams/messages
          operations:
            - id: sendTeamsMessage
              method: POST

Retrieves a regulatory document from Veeva Vault by document number.

naftiko: "0.5"
info:
  title: Veeva Vault Document Lookup
  version: "1.0"
  description: Retrieves a regulatory document from Veeva Vault by document number.
  tags: [regulatory, document-management, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: get_vault_document
        description: Returns document metadata and approval status.
        inputParameters:
          - name: document_id
            in: query
            required: true
            type: string
        call:
          operationId: getDocument
          input:
            documentId: "{{document_id}}"
        outputParameters:
          - name: title
            type: string
          - name: status
            type: string
          - name: version
            type: string
  consumes:
    - type: http
      baseUri: https://bms.veevavault.com/api/v23.1
      authentication:
        type: bearer
        token: $secrets.veeva_token
      resources:
        - path: /objects/documents/{documentId}
          operations:
            - id: getDocument
              method: GET

Syncs employee benefit elections.

naftiko: "0.5"
info:
  title: Workday BMS Benefits Sync
  version: "1.0"
  description: Syncs employee benefit elections.
  tags: [human-resources, workday, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: sync_bms_benefits
        description: Gets, syncs, confirms.
        inputParameters:
          - name: eid
            in: body
            required: true
            type: string
          - name: period
            in: body
            required: true
            type: string
        steps:
          - name: get
            call:
              operationId: getElections
              input:
                eid: "{{eid}}"
          - name: sync
            call:
              operationId: syncBenefits
              input:
                eid: "{{eid}}"
          - name: confirm
            call:
              operationId: sendEmail
              input:
                to: "{{eid}}@bms.com"
                subject: "Benefits"
                body: "Processed."
  consumes:
    - type: http
      baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
      authentication:
        type: bearer
        token: $secrets.workday_token
      resources:
        - path: /benefits/elections
          operations:
            - id: getElections
              method: GET
    - type: http
      baseUri: https://api.bms.com/hr/v1
      authentication:
        type: bearer
        token: $secrets.bms_hr_token
      resources:
        - path: /benefits/sync
          operations:
            - id: syncBenefits
              method: POST
    - type: http
      baseUri: https://graph.microsoft.com/v1.0
      authentication:
        type: bearer
        token: $secrets.ms_graph_token
      resources:
        - path: /me/sendMail
          operations:
            - id: sendEmail
              method: POST

Onboards BMS staff.

naftiko: "0.5"
info:
  title: Workday BMS Onboarding
  version: "1.0"
  description: Onboards BMS staff.
  tags: [human-resources, workday, healthcare]
capability:
  exposes:
    type: mcp
    port: 8080
    tools:
      - name: onboard_bms
        description: Creates, provisions, trains.
        inputParameters:
          - name: eid
            in: body
            required: true
            type: string
          - name: dept
            in: body
            required: true
            type: string
          - name: role
            in: body
            required: true
            type: string
        steps:
          - name: create
            call:
              operationId: createWorker
              input:
                eid: "{{eid}}"
                dept: "{{dept}}"
          - name: provision
            call:
              operationId: provisionAccess
              input:
                eid: "{{eid}}"
          - name: train
            call:
              operationId: assignLearning
              input:
                eid: "{{eid}}"
                courses: "GxP,HIPAA,Safety"
  consumes:
    - type: http
      baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
      authentication:
        type: bearer
        token: $secrets.workday_token
      resources:
        - path: /workers
          operations:
            - id: createWorker
              method: POST
    - type: http
      baseUri: https://bms.okta.com/api/v1
      authentication:
        type: bearer
        token: $secrets.okta_token
      resources:
        - path: /apps/assignments
          operations:
            - id: provisionAccess
              method: POST
    - type: http
      baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bms
      authentication:
        type: bearer
        token: $secrets.workday_token
      resources:
        - path: /learning/assignments
          operations:
            - id: assignLearning
              method: POST

Returns current headcount by department and cost center from Workday for finance planning, headcount budgeting, and HR reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount and Payroll Snapshot"
  description: "Returns current headcount by department and cost center from Workday for finance planning, headcount budgeting, and HR reporting."
  tags:
    - hr
    - finance
    - workday
    - reporting
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns all active employees with department, cost center, and employment type from Workday. Use for headcount planning, finance budgeting, and HR analytics."
          call: "workday.list-workers"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data[*]"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/bms/workers"
          operations:
            - name: list-workers
              method: GET

When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions.

naftiko: "0.5"
info:
  label: "Workday Open Role Requisition Creator"
  description: "When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions."
  tags:
    - hr
    - recruiting
    - workday
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: create-job-requisition
          description: "Given a Workday department ID, role title, grade level, and hiring manager ID, create a job requisition in Workday and publish the job posting to LinkedIn. Use when a headcount request is approved."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID for the open role."
            - name: role_title
              in: body
              type: string
              description: "The job title for the open position."
            - name: hiring_manager_id
              in: body
              type: string
              description: "The Workday worker ID of the hiring manager."
          steps:
            - name: get-manager
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{hiring_manager_id}}"
            - name: create-requisition
              type: call
              call: "workday-rec.create-job-req"
              with:
                department_id: "{{department_id}}"
                title: "{{role_title}}"
                manager_id: "{{hiring_manager_id}}"
            - name: post-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{role_title}}"
                company_id: "$secrets.bms_linkedin_company_id"
                req_id: "{{create-requisition.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/bms/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: workday-rec
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/bms/recruiting/jobRequisitions"
          operations:
            - name: create-job-req
              method: POST
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/jobPostings"
          operations:
            - name: create-job-posting
              method: POST

Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Kickoff"
  description: "Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams."
  tags:
    - hr
    - performance-management
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: kickoff-review-cycle
          description: "Given a Workday division ID and review cycle period, initiate the performance review process, create a Jira tracking epic, and notify HR business partners in Teams. Use at the start of each semi-annual performance review period."
          inputParameters:
            - name: division_id
              in: body
              type: string
              description: "The Workday division or department ID."
            - name: review_period
              in: body
              type: string
              description: "The review cycle label, e.g. 'H1-2026'."
          steps:
            - name: initiate-review
              type: call
              call: "workday.create-review-process"
              with:
                division_id: "{{division_id}}"
                period: "{{review_period}}"
            - name: create-epic
              type: call
              call: "jira.create-issue"
              with:
                project_key: "HR"
                issuetype: "Epic"
                summary: "Performance Review {{review_period}} — {{division_id}}"
            - name: notify-hrbp
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "$secrets.hrbp_channel_id"
                text: "Performance review {{review_period}} initiated for division {{division_id}}. Jira epic: {{create-epic.key}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: review-processes
          path: "/bms/performanceManagement/reviewProcesses"
          operations:
            - name: create-review-process
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://bms.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST