Moderna Capabilities

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

Sort
Expand

Receives an adverse event report, creates a safety case in Argus Enterprise, logs a pharmacovigilance ticket in ServiceNow, and sends an urgent alert to the safety team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Adverse Event Intake Pipeline"
  description: "Receives an adverse event report, creates a safety case in Argus Enterprise, logs a pharmacovigilance ticket in ServiceNow, and sends an urgent alert to the safety team via Microsoft Teams."
  tags:
    - pharmacovigilance
    - safety
    - argus-enterprise
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: drug-safety
      port: 8080
      tools:
        - name: intake-adverse-event
          description: "Given adverse event details and patient demographics, create the safety case in Argus, open a ServiceNow ticket, and alert the safety team."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "Product associated with the adverse event."
            - name: event_description
              in: body
              type: string
              description: "Description of the adverse event."
            - name: severity
              in: body
              type: string
              description: "Severity classification (mild, moderate, severe, life-threatening)."
            - name: reporter_id
              in: body
              type: string
              description: "ID of the reporting healthcare professional."
          steps:
            - name: create-case
              type: call
              call: "argus.create-case"
              with:
                product: "{{product_name}}"
                narrative: "{{event_description}}"
                seriousness: "{{severity}}"
                reporter: "{{reporter_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "AE Report: {{product_name}} - {{severity}}"
                category: "pharmacovigilance"
                urgency: "1"
                description: "Argus case {{create-case.case_number}} created. {{event_description}}"
            - name: alert-safety-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "drug-safety-ops"
                text: "URGENT: New {{severity}} AE for {{product_name}}. Case: {{create-case.case_number}}. SNOW: {{open-ticket.number}}. Immediate review required."
  consumes:
    - type: http
      namespace: argus
      baseUri: "https://moderna-argus.oracle.com/argus-safety/api/v1"
      authentication:
        type: bearer
        token: "$secrets.argus_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the patent database via OpenAI for prior art analysis, cross-references Moderna IP records in Confluence, generates a landscape summary, and creates a Jira task for the IP legal team to review.

naftiko: "0.5"
info:
  label: "AI-Driven Patent Landscape Analysis"
  description: "Queries the patent database via OpenAI for prior art analysis, cross-references Moderna IP records in Confluence, generates a landscape summary, and creates a Jira task for the IP legal team to review."
  tags:
    - intellectual-property
    - legal
    - openai
    - confluence
    - jira
capability:
  exposes:
    - type: mcp
      namespace: ip-analysis
      port: 8080
      tools:
        - name: analyze-patent-landscape
          description: "Given a technology area and key claims, use AI to analyze the patent landscape, cross-reference internal IP, and create a review task."
          inputParameters:
            - name: technology_area
              in: body
              type: string
              description: "Technology area (e.g., mRNA delivery, LNP formulation, codon optimization)."
            - name: key_claims
              in: body
              type: string
              description: "Description of key claims to analyze."
            - name: confluence_space
              in: body
              type: string
              description: "Confluence space key for IP records."
          steps:
            - name: ai-analysis
              type: call
              call: "openai.create-completion"
              with:
                model: "gpt-4"
                messages:
                  - role: "system"
                    content: "You are a patent landscape analyst specializing in mRNA therapeutics and vaccine technology."
                  - role: "user"
                    content: "Analyze the patent landscape for {{technology_area}} with focus on these claims: {{key_claims}}. Identify key competitors, freedom-to-operate risks, and white space opportunities."
            - name: search-internal-ip
              type: call
              call: "confluence.search"
              with:
                cql: "type=page AND space={{confluence_space}} AND text~\"{{technology_area}}\""
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "IPLEGAL"
                issue_type: "Task"
                summary: "Patent landscape review: {{technology_area}}"
                description: "AI analysis complete. {{search-internal-ip.totalSize}} internal IP records found. Review AI landscape analysis and update FTO assessment."
  consumes:
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: create-completion
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://moderna.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves the latest pipeline run status for a specified Azure DevOps build definition in the Moderna digital engineering project.

naftiko: "0.5"
info:
  label: "Azure DevOps Pipeline Status"
  description: "Retrieves the latest pipeline run status for a specified Azure DevOps build definition in the Moderna digital engineering project."
  tags:
    - engineering
    - ci-cd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: cicd
      port: 8080
      tools:
        - name: get-pipeline-status
          description: "Look up the latest Azure DevOps pipeline run by definition ID. Returns status, result, start time, and trigger info."
          inputParameters:
            - name: definition_id
              in: body
              type: string
              description: "Azure DevOps build definition ID."
            - name: project
              in: body
              type: string
              description: "Azure DevOps project name."
          call: "azdo.get-builds"
          with:
            project: "{{project}}"
            definition_id: "{{definition_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: start_time
              type: string
              mapping: "$.value[0].startTime"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/ModernaTx"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: definition_id
              in: query
          operations:
            - name: get-builds
              method: GET

Retrieves a Benchling entity (DNA sequence, protein, or custom entity) by ID and returns the name, schema, folder, creator, and creation date.

naftiko: "0.5"
info:
  label: "Benchling Entity Lookup"
  description: "Retrieves a Benchling entity (DNA sequence, protein, or custom entity) by ID and returns the name, schema, folder, creator, and creation date."
  tags:
    - research
    - benchling
    - entity-management
capability:
  exposes:
    - type: mcp
      namespace: lab-informatics
      port: 8080
      tools:
        - name: get-benchling-entity
          description: "Look up a Benchling entity by ID. Returns name, schema, folder, creator, and created date."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Benchling entity ID."
          call: "benchling.get-entity"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: schema
              type: string
              mapping: "$.schema.name"
            - name: folder
              type: string
              mapping: "$.folder.name"
            - name: creator
              type: string
              mapping: "$.creator.name"
  consumes:
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: entities
          path: "/custom-entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-entity
              method: GET

Pulls latest patient enrollment counts from the CTMS in Veeva, aggregates safety signals from Argus, and publishes an updated trial status dashboard in Power BI with a Confluence summary page.

naftiko: "0.5"
info:
  label: "Clinical Data Monitoring Pipeline"
  description: "Pulls latest patient enrollment counts from the CTMS in Veeva, aggregates safety signals from Argus, and publishes an updated trial status dashboard in Power BI with a Confluence summary page."
  tags:
    - clinical-trials
    - data-monitoring
    - veeva
    - argus-enterprise
    - power-bi
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: clinical-data-monitoring
      port: 8080
      tools:
        - name: refresh-trial-dashboard
          description: "Given a study ID, pull enrollment data from Veeva CTMS, aggregate safety signals from Argus, refresh the Power BI dashboard, and update the Confluence status page."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Clinical study identifier."
            - name: dashboard_dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the trial dashboard."
            - name: confluence_page_id
              in: body
              type: string
              description: "Confluence page ID for the study status page."
          steps:
            - name: get-enrollment
              type: call
              call: "veeva.get-enrollment"
              with:
                study_id: "{{study_id}}"
            - name: get-safety-signals
              type: call
              call: "argus.get-case-series"
              with:
                study_id: "{{study_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dashboard_dataset_id}}"
            - name: update-status-page
              type: call
              call: "confluence.update-page"
              with:
                page_id: "{{confluence_page_id}}"
                body: "Study {{study_id}} Status Update\n\nEnrolled: {{get-enrollment.total_enrolled}}/{{get-enrollment.target_enrollment}}\nActive Sites: {{get-enrollment.active_sites}}\nSafety Cases: {{get-safety-signals.total_cases}}\nSerious AEs: {{get-safety-signals.serious_count}}"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: enrollment
          path: "/objects/studies/{{study_id}}/enrollment"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: get-enrollment
              method: GET
    - type: http
      namespace: argus
      baseUri: "https://moderna-argus.oracle.com/argus-safety/api/v1"
      authentication:
        type: bearer
        token: "$secrets.argus_token"
      resources:
        - name: case-series
          path: "/case-series?study_id={{study_id}}"
          inputParameters:
            - name: study_id
              in: query
          operations:
            - name: get-case-series
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT

Activates a new clinical trial site by creating the site record in Veeva Vault, provisioning a SharePoint document library, assigning the site monitor in Workday, and posting a notification to the clinical operations Teams channel.

naftiko: "0.5"
info:
  label: "Clinical Site Activation Orchestrator"
  description: "Activates a new clinical trial site by creating the site record in Veeva Vault, provisioning a SharePoint document library, assigning the site monitor in Workday, and posting a notification to the clinical operations Teams channel."
  tags:
    - clinical-trials
    - site-management
    - veeva
    - sharepoint
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-site-mgmt
      port: 8080
      tools:
        - name: activate-clinical-site
          description: "Given a study ID, site number, principal investigator, and monitor employee ID, provision the site across Veeva, SharePoint, Workday, and Teams."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Clinical study identifier."
            - name: site_number
              in: body
              type: string
              description: "Site number to activate."
            - name: principal_investigator
              in: body
              type: string
              description: "Name of the principal investigator."
            - name: monitor_employee_id
              in: body
              type: string
              description: "Workday employee ID of the assigned CRA."
          steps:
            - name: create-site-record
              type: call
              call: "veeva.create-site"
              with:
                study_id: "{{study_id}}"
                site_number: "{{site_number}}"
                investigator: "{{principal_investigator}}"
            - name: provision-docs
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "clinical-trials-hub"
                folder_path: "{{study_id}}/Site-{{site_number}}"
            - name: get-monitor
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{monitor_employee_id}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "clinical-ops"
                text: "Site {{site_number}} activated for study {{study_id}}. PI: {{principal_investigator}}. CRA: {{get-monitor.full_name}}. Docs: {{provision-docs.url}}"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: sites
          path: "/objects/sites"
          operations:
            - name: create-site
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a clinical trial protocol document from Veeva Vault by study ID, pulls enrollment status from the CTMS, and posts a protocol summary to the clinical operations Teams channel.

naftiko: "0.5"
info:
  label: "Clinical Trial Protocol Lookup and Summary"
  description: "Retrieves a clinical trial protocol document from Veeva Vault by study ID, pulls enrollment status from the CTMS, and posts a protocol summary to the clinical operations Teams channel."
  tags:
    - clinical-trials
    - regulatory
    - veeva
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: get-trial-protocol
          description: "Look up a clinical trial protocol by study ID, enrich with enrollment data, and post summary to Teams."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "The Moderna study identifier (e.g., mRNA-1273-P301)."
          steps:
            - name: get-protocol
              type: call
              call: "veeva.get-document"
              with:
                study_id: "{{study_id}}"
            - name: get-enrollment
              type: call
              call: "veeva.get-enrollment"
              with:
                study_id: "{{study_id}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "clinical-ops"
                text: "Protocol: {{get-protocol.name__v}} ({{get-protocol.phase__c}}). Indication: {{get-protocol.indication__c}}. Status: {{get-protocol.status__v}}. Enrolled: {{get-enrollment.total_enrolled}}/{{get-enrollment.target_enrollment}}."
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: documents
          path: "/objects/documents/search?q=study_id__c={{study_id}}"
          inputParameters:
            - name: study_id
              in: query
          operations:
            - name: get-document
              method: GET
        - name: enrollment
          path: "/objects/studies/{{study_id}}/enrollment"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: get-enrollment
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls randomization records from the IRT system, cross-references enrollment data in Veeva CTMS, checks for protocol deviations in the EDC system, and publishes an audit summary to Confluence with a Teams notification to the data management team.

naftiko: "0.5"
info:
  label: "Clinical Trial Randomization Audit"
  description: "Pulls randomization records from the IRT system, cross-references enrollment data in Veeva CTMS, checks for protocol deviations in the EDC system, and publishes an audit summary to Confluence with a Teams notification to the data management team."
  tags:
    - clinical-trials
    - data-management
    - veeva
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-audit
      port: 8080
      tools:
        - name: audit-randomization
          description: "Given a study ID and site range, pull randomization records, cross-reference enrollment, check for deviations, and publish audit results."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Clinical study identifier."
            - name: site_numbers
              in: body
              type: string
              description: "Comma-separated list of site numbers to audit."
            - name: confluence_page_id
              in: body
              type: string
              description: "Confluence page ID for the audit report."
          steps:
            - name: get-randomization
              type: call
              call: "veeva.get-randomization"
              with:
                study_id: "{{study_id}}"
                sites: "{{site_numbers}}"
            - name: get-enrollment
              type: call
              call: "veeva.get-enrollment"
              with:
                study_id: "{{study_id}}"
            - name: publish-audit
              type: call
              call: "confluence.update-page"
              with:
                page_id: "{{confluence_page_id}}"
                body: "Randomization Audit: {{study_id}}\n\nSites Audited: {{site_numbers}}\nTotal Randomized: {{get-randomization.total_randomized}}\nTotal Enrolled: {{get-enrollment.total_enrolled}}\nDiscrepancies: {{get-randomization.discrepancy_count}}\nProtocol Deviations: {{get-randomization.deviation_count}}"
            - name: notify-data-mgmt
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "clinical-data-mgmt"
                text: "Randomization audit complete for {{study_id}} (sites: {{site_numbers}}). {{get-randomization.discrepancy_count}} discrepancies found. Report: {{publish-audit.url}}"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: randomization
          path: "/objects/studies/{{study_id}}/randomization?sites={{sites}}"
          inputParameters:
            - name: study_id
              in: path
            - name: sites
              in: query
          operations:
            - name: get-randomization
              method: GET
        - name: enrollment
          path: "/objects/studies/{{study_id}}/enrollment"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: get-enrollment
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an IoT sensor reports a temperature excursion in the mRNA vaccine cold chain, logs the event in Datadog, creates a SAP quality notification, opens a ServiceNow incident, and escalates to the supply chain team in Teams.

naftiko: "0.5"
info:
  label: "Cold Chain Temperature Alert Pipeline"
  description: "When an IoT sensor reports a temperature excursion in the mRNA vaccine cold chain, logs the event in Datadog, creates a SAP quality notification, opens a ServiceNow incident, and escalates to the supply chain team in Teams."
  tags:
    - supply-chain
    - cold-chain
    - datadog
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cold-chain-monitoring
      port: 8080
      tools:
        - name: handle-temperature-excursion
          description: "Given shipment and sensor data for a temperature excursion, log the event, create quality notifications, and escalate to supply chain operations."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment tracking identifier."
            - name: sensor_id
              in: body
              type: string
              description: "IoT sensor identifier."
            - name: recorded_temp_c
              in: body
              type: number
              description: "Recorded temperature in Celsius."
            - name: threshold_temp_c
              in: body
              type: number
              description: "Configured temperature threshold in Celsius."
            - name: location
              in: body
              type: string
              description: "Current shipment location."
          steps:
            - name: log-event
              type: call
              call: "datadog.submit-event"
              with:
                title: "Cold Chain Excursion: Shipment {{shipment_id}}"
                text: "Sensor {{sensor_id}} recorded {{recorded_temp_c}}C (threshold: {{threshold_temp_c}}C) at {{location}}."
                alert_type: "error"
                tags: "shipment:{{shipment_id}},sensor:{{sensor_id}}"
            - name: create-quality-notif
              type: call
              call: "sap.create-notification"
              with:
                notification_type: "Q1"
                short_text: "Temperature excursion: Shipment {{shipment_id}}"
                long_text: "Temp {{recorded_temp_c}}C exceeded {{threshold_temp_c}}C threshold at {{location}}. Sensor: {{sensor_id}}."
            - name: open-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Cold chain excursion: {{shipment_id}} at {{location}}"
                category: "supply_chain"
                urgency: "1"
                description: "Temperature excursion detected. SAP QN: {{create-quality-notif.notification_number}}. Product at risk."
            - name: escalate
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply-chain-ops"
                text: "CRITICAL: Cold chain excursion on shipment {{shipment_id}} at {{location}}. Temp: {{recorded_temp_c}}C (limit: {{threshold_temp_c}}C). SAP QN: {{create-quality-notif.notification_number}}. SNOW: {{open-incident.number}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: submit-event
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-notification
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a new GMP training requirement is identified, assigns the course in the LMS via Workday, creates a tracking record in ServiceNow, and sends a reminder to the employee and their manager in Teams.

naftiko: "0.5"
info:
  label: "Compliance Training Assignment Pipeline"
  description: "When a new GMP training requirement is identified, assigns the course in the LMS via Workday, creates a tracking record in ServiceNow, and sends a reminder to the employee and their manager in Teams."
  tags:
    - compliance
    - training
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: assign-compliance-training
          description: "Given an employee ID, course ID, and due date, assign the training in Workday, log in ServiceNow, and notify the employee and manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the employee."
            - name: course_id
              in: body
              type: string
              description: "Training course identifier."
            - name: due_date
              in: body
              type: string
              description: "Training completion due date (YYYY-MM-DD)."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: assign-course
              type: call
              call: "workday.assign-learning"
              with:
                worker_id: "{{employee_id}}"
                course_id: "{{course_id}}"
                due_date: "{{due_date}}"
            - name: log-assignment
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "GMP Training: {{get-employee.full_name}} - Course {{course_id}}"
                category: "compliance_training"
                description: "Assigned course {{course_id}} to {{get-employee.full_name}}. Due: {{due_date}}."
            - name: notify-employee
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "You have been assigned GMP training course {{course_id}}. Due date: {{due_date}}. Please complete in Workday Learning."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: learning
          path: "/workers/{{worker_id}}/learningAssignments"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: assign-learning
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Searches the Moderna Confluence knowledge base using a CQL query and returns matching page titles, excerpts, and links.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches the Moderna Confluence knowledge base using a CQL query and returns matching page titles, excerpts, and links."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search Moderna Confluence spaces with a text query. Returns matching page titles, excerpts, and URLs."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search query text."
            - name: space_key
              in: body
              type: string
              description: "Optional Confluence space key to scope the search."
          call: "confluence.search"
          with:
            cql: "type=page AND text~\"{{query}}\" AND space=\"{{space_key}}\""
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search
              method: GET

Queries Datadog for the current health status of Moderna's mRNA digital platform, and if error rates exceed thresholds, creates a ServiceNow incident and alerts the platform team in Teams.

naftiko: "0.5"
info:
  label: "Datadog mRNA Platform Health Check"
  description: "Queries Datadog for the current health status of Moderna's mRNA digital platform, and if error rates exceed thresholds, creates a ServiceNow incident and alerts the platform team in Teams."
  tags:
    - monitoring
    - infrastructure
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: platform-monitoring
      port: 8080
      tools:
        - name: get-platform-health
          description: "Query Datadog for service health metrics. If degraded, create a ServiceNow incident and alert the platform team."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name (e.g., mrna-design-api, lims-gateway)."
            - name: time_range
              in: body
              type: string
              description: "Time range for metrics (e.g., 1h, 24h, 7d)."
          steps:
            - name: query-health
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:trace.http.request.duration{service:{{service_name}}}"
                from: "{{time_range}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Platform health check: {{service_name}}"
                category: "infrastructure"
                description: "Service: {{service_name}}. Avg latency: {{query-health.avg_latency_ms}}ms. Error rate: {{query-health.error_rate}}%."
            - name: alert-platform-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "platform-engineering"
                text: "Health check for {{service_name}}: Latency {{query-health.avg_latency_ms}}ms, Error rate {{query-health.error_rate}}%. SNOW: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates drug product release by verifying batch quality in SAP QM, confirming analytical results in Benchling LIMS, generating a Certificate of Analysis document in Veeva Vault, and notifying the QA release team and distribution in Teams.

naftiko: "0.5"
info:
  label: "Drug Product Release Pipeline"
  description: "Orchestrates drug product release by verifying batch quality in SAP QM, confirming analytical results in Benchling LIMS, generating a Certificate of Analysis document in Veeva Vault, and notifying the QA release team and distribution in Teams."
  tags:
    - quality
    - manufacturing
    - release
    - sap
    - benchling
    - veeva
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-release
      port: 8080
      tools:
        - name: release-drug-product
          description: "Given a batch number and product code, verify quality data, confirm analytical results, generate the CoA in Veeva, and notify QA and distribution."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "Manufacturing batch number."
            - name: product_code
              in: body
              type: string
              description: "SAP material number."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
          steps:
            - name: get-quality-status
              type: call
              call: "sap.get-inspection-lot"
              with:
                batch: "{{batch_number}}"
                plant: "{{plant_code}}"
            - name: get-analytical-results
              type: call
              call: "benchling.list-results"
              with:
                batch_number: "{{batch_number}}"
            - name: generate-coa
              type: call
              call: "veeva.create-document"
              with:
                document_type: "certificate_of_analysis"
                study_id: "{{product_code}}"
                name: "CoA - {{product_code}} Batch {{batch_number}}"
                properties:
                  batch_number: "{{batch_number}}"
                  quality_disposition: "{{get-quality-status.disposition}}"
                  results_summary: "{{get-analytical-results.summary}}"
            - name: notify-release
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "qa-release"
                text: "Drug product release: {{product_code}} Batch {{batch_number}}. QA Status: {{get-quality-status.disposition}}. CoA: {{generate-coa.web_url}}. Ready for distribution."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot?$filter=Batch eq '{{batch}}' and Plant eq '{{plant}}'"
          inputParameters:
            - name: batch
              in: query
            - name: plant
              in: query
          operations:
            - name: get-inspection-lot
              method: GET
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: results
          path: "/assay-results?batch_number={{batch_number}}"
          inputParameters:
            - name: batch_number
              in: query
          operations:
            - name: list-results
              method: GET
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: documents
          path: "/objects/documents"
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the Moderna research data lake in Elasticsearch for indexed experimental results matching a search query, returning aggregated hit counts and sample records.

naftiko: "0.5"
info:
  label: "Elasticsearch Research Data Query"
  description: "Queries the Moderna research data lake in Elasticsearch for indexed experimental results matching a search query, returning aggregated hit counts and sample records."
  tags:
    - research
    - data-lake
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: research-data
      port: 8080
      tools:
        - name: search-research-data
          description: "Query the Elasticsearch research data lake with a search term and index pattern. Returns total hits and sample documents."
          inputParameters:
            - name: index_pattern
              in: body
              type: string
              description: "Elasticsearch index pattern (e.g., preclinical-*, clinical-trial-data)."
            - name: query
              in: body
              type: string
              description: "Search query string."
          call: "elasticsearch.search"
          with:
            index: "{{index_pattern}}"
            query: "{{query}}"
          outputParameters:
            - name: total_hits
              type: number
              mapping: "$.hits.total.value"
            - name: results
              type: array
              mapping: "$.hits.hits"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://moderna-es.eastus2.azure.elastic-cloud.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: search
          path: "/{{index}}/_search"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: search
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, sends a Microsoft Teams welcome message, and assigns onboarding tasks in Jira.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, sends a Microsoft Teams welcome message, and assigns onboarding tasks in Jira."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, Teams, and Jira."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "Department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr-onboarding"
                folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
            - name: create-onboarding-tasks
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ONB"
                issue_type: "Task"
                summary: "Onboarding: {{get-employee.full_name}} - {{department}}"
                description: "Complete onboarding checklist for {{get-employee.full_name}}. Start date: {{start_date}}. SNOW ticket: {{open-ticket.number}}."
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Moderna, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Training materials: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When an environmental monitoring sensor in a cleanroom reports an out-of-spec reading, logs the event in SAP QM, creates a deviation investigation in ServiceNow, quarantines affected batches, and alerts the manufacturing quality team.

naftiko: "0.5"
info:
  label: "Environmental Monitoring Excursion Handler"
  description: "When an environmental monitoring sensor in a cleanroom reports an out-of-spec reading, logs the event in SAP QM, creates a deviation investigation in ServiceNow, quarantines affected batches, and alerts the manufacturing quality team."
  tags:
    - manufacturing
    - environmental-monitoring
    - cleanroom
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: env-monitoring
      port: 8080
      tools:
        - name: handle-env-excursion
          description: "Given cleanroom sensor data, log the excursion in SAP, create a deviation in ServiceNow, and alert the quality team."
          inputParameters:
            - name: cleanroom_id
              in: body
              type: string
              description: "Cleanroom identifier."
            - name: parameter
              in: body
              type: string
              description: "Monitored parameter (e.g., particle-count, temperature, humidity, pressure-differential)."
            - name: reading
              in: body
              type: number
              description: "The out-of-spec reading value."
            - name: spec_limit
              in: body
              type: number
              description: "The specification limit."
            - name: affected_batches
              in: body
              type: string
              description: "Comma-separated batch numbers potentially affected."
          steps:
            - name: log-excursion
              type: call
              call: "sap.create-notification"
              with:
                notification_type: "Q2"
                short_text: "EM Excursion: {{cleanroom_id}} - {{parameter}}"
                long_text: "{{parameter}} reading {{reading}} exceeded limit {{spec_limit}} in {{cleanroom_id}}. Affected batches: {{affected_batches}}."
            - name: create-deviation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "EM Excursion: {{cleanroom_id}} {{parameter}}"
                category: "environmental_monitoring"
                urgency: "1"
                description: "SAP QN: {{log-excursion.notification_number}}. Reading: {{reading}} (limit: {{spec_limit}}). Affected batches: {{affected_batches}}."
            - name: alert-quality
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "mfg-quality"
                text: "EM ALERT: {{parameter}} excursion in {{cleanroom_id}}. Reading: {{reading}} (limit: {{spec_limit}}). Batches: {{affected_batches}}. QN: {{log-excursion.notification_number}}. SNOW: {{create-deviation.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-notification
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.

naftiko: "0.5"
info:
  label: "Expense Report Processing"
  description: "Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected."
  tags:
    - finance
    - expense
    - sap-concur
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance-expense
      port: 8080
      tools:
        - name: review-expense-report
          description: "Given a Concur expense report ID and employee ID, fetch the report, validate the cost center against Workday, and flag policy violations to ServiceNow."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report identifier."
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the submitter."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: flag-exceptions
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Expense policy review: {{get-employee.full_name}} - ${{get-report.total_amount}}"
                category: "finance_review"
                description: "Report {{expense_report_id}} for {{get-employee.full_name}} ({{get-employee.cost_center}}). Total: ${{get-report.total_amount}}. {{get-report.policy_violations}} violations detected."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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

Aggregates FDA submission status from Veeva Vault RIM, pulls latest correspondence from the regulatory document store, updates the tracking dashboard in Tableau, and posts a weekly status to the regulatory affairs Confluence page.

naftiko: "0.5"
info:
  label: "FDA Submission Tracking Dashboard Refresh"
  description: "Aggregates FDA submission status from Veeva Vault RIM, pulls latest correspondence from the regulatory document store, updates the tracking dashboard in Tableau, and posts a weekly status to the regulatory affairs Confluence page."
  tags:
    - regulatory
    - fda
    - veeva
    - tableau
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: regulatory-tracking
      port: 8080
      tools:
        - name: refresh-fda-tracker
          description: "Given a submission ID, pull status from Veeva RIM, refresh the Tableau dashboard, and update the Confluence tracking page."
          inputParameters:
            - name: submission_id
              in: body
              type: string
              description: "Veeva Vault RIM submission identifier."
            - name: tableau_workbook_id
              in: body
              type: string
              description: "Tableau workbook ID for the FDA tracker."
            - name: confluence_page_id
              in: body
              type: string
              description: "Confluence page ID for the regulatory tracker."
          steps:
            - name: get-submission-status
              type: call
              call: "veeva.get-submission"
              with:
                submission_id: "{{submission_id}}"
            - name: refresh-tableau
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "{{tableau_workbook_id}}"
            - name: update-confluence
              type: call
              call: "confluence.update-page"
              with:
                page_id: "{{confluence_page_id}}"
                body: "FDA Submission Tracker\n\nSubmission: {{submission_id}}\nStatus: {{get-submission-status.status}}\nType: {{get-submission-status.submission_type}}\nLast FDA Action: {{get-submission-status.last_action_date}}\nNext Milestone: {{get-submission-status.next_milestone}}"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: submissions
          path: "/objects/submissions/{{submission_id}}"
          inputParameters:
            - name: submission_id
              in: path
          operations:
            - name: get-submission
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://moderna-tableau.online.tableau.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/moderna/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT

Retrieves a Moderna GitHub repository status, checks the latest GitHub Actions workflow run, and posts a CI health summary to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Repository Status and CI Summary"
  description: "Retrieves a Moderna GitHub repository status, checks the latest GitHub Actions workflow run, and posts a CI health summary to the engineering Teams channel."
  tags:
    - engineering
    - github
    - github-actions
    - ci-cd
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dev-ops
      port: 8080
      tools:
        - name: get-repo-status
          description: "Look up a GitHub repository, check CI status, and post summary to Teams."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "Repository name under the Moderna GitHub org."
          steps:
            - name: get-repo
              type: call
              call: "github.get-repo"
              with:
                repo_name: "{{repo_name}}"
            - name: get-workflows
              type: call
              call: "github.get-workflow-runs"
              with:
                repo_name: "{{repo_name}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering"
                text: "Repo: {{repo_name}}. Branch: {{get-repo.default_branch}}. Open issues: {{get-repo.open_issues_count}}. Last CI run: {{get-workflows.workflow_runs[0].conclusion}}. Updated: {{get-repo.updated_at}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com/repos/ModernaTx"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/{{repo_name}}"
          inputParameters:
            - name: repo_name
              in: path
          operations:
            - name: get-repo
              method: GET
        - name: workflow-runs
          path: "/{{repo_name}}/actions/runs?per_page=1"
          inputParameters:
            - name: repo_name
              in: path
          operations:
            - name: get-workflow-runs
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a GMP deviation is detected on the manufacturing floor, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads root-cause documentation to SharePoint, and alerts the quality team in Teams.

naftiko: "0.5"
info:
  label: "GMP Deviation Workflow"
  description: "When a GMP deviation is detected on the manufacturing floor, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads root-cause documentation to SharePoint, and alerts the quality team in Teams."
  tags:
    - quality
    - manufacturing
    - gmp
    - sap
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-mgmt
      port: 8080
      tools:
        - name: report-gmp-deviation
          description: "Given deviation details and batch information, create quality events, open CAPA, store documentation, and alert quality assurance."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "Affected manufacturing batch number."
            - name: deviation_type
              in: body
              type: string
              description: "Type of deviation (e.g., process, equipment, environmental)."
            - name: description
              in: body
              type: string
              description: "Detailed description of the deviation."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code where the deviation occurred."
          steps:
            - name: create-quality-event
              type: call
              call: "sap.create-notification"
              with:
                notification_type: "Q2"
                plant: "{{plant_code}}"
                material_batch: "{{batch_number}}"
                short_text: "GMP Deviation: {{deviation_type}} - Batch {{batch_number}}"
                long_text: "{{description}}"
            - name: open-capa
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "CAPA: {{deviation_type}} deviation - Batch {{batch_number}}"
                category: "quality_capa"
                urgency: "2"
                description: "SAP QN: {{create-quality-event.notification_number}}. {{description}}"
            - name: store-docs
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "quality-management"
                folder_path: "Deviations/{{batch_number}}_{{deviation_type}}"
            - name: alert-quality
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-assurance"
                text: "GMP Deviation Alert: {{deviation_type}} on batch {{batch_number}} at plant {{plant_code}}. SAP QN: {{create-quality-event.notification_number}}. CAPA: {{open-capa.number}}. Docs: {{store-docs.url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-notification
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a document from Google Drive by file ID, returning the file name, MIME type, owner, and download link. Used for accessing shared research documents.

naftiko: "0.5"
info:
  label: "Google Drive Document Retrieval"
  description: "Retrieves a document from Google Drive by file ID, returning the file name, MIME type, owner, and download link. Used for accessing shared research documents."
  tags:
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: document-mgmt
      port: 8080
      tools:
        - name: get-drive-file
          description: "Look up a Google Drive file by ID. Returns name, MIME type, owner, and web view link."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "Google Drive file ID."
          call: "gdrive.get-file"
          with:
            file_id: "{{file_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: mime_type
              type: string
              mapping: "$.mimeType"
            - name: owner
              type: string
              mapping: "$.owners[0].displayName"
            - name: web_link
              type: string
              mapping: "$.webViewLink"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files/{{file_id}}?fields=name,mimeType,owners,webViewLink"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file
              method: GET

Retrieves a Jira issue by key from the Moderna R&D project board and returns the summary, assignee, status, and sprint information.

naftiko: "0.5"
info:
  label: "Jira Research Ticket Status"
  description: "Retrieves a Jira issue by key from the Moderna R&D project board and returns the summary, assignee, status, and sprint information."
  tags:
    - research
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: research-tracking
      port: 8080
      tools:
        - name: get-research-ticket
          description: "Look up a Jira issue by key. Returns summary, status, assignee, priority, and sprint."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "Jira issue key (e.g., MRNA-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://moderna.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Queries Kubernetes cluster health via Datadog, checks active Prometheus alerts for the cluster, and posts a consolidated infrastructure report to the platform engineering Teams channel.

naftiko: "0.5"
info:
  label: "Kubernetes Cluster Health and Scaling Report"
  description: "Queries Kubernetes cluster health via Datadog, checks active Prometheus alerts for the cluster, and posts a consolidated infrastructure report to the platform engineering Teams channel."
  tags:
    - infrastructure
    - kubernetes
    - datadog
    - prometheus
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: k8s-monitoring
      port: 8080
      tools:
        - name: get-cluster-health
          description: "Query Datadog for K8s metrics, check Prometheus alerts, and post a health report to Teams."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "Kubernetes cluster name."
          steps:
            - name: query-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:kubernetes.node.count{cluster_name:{{cluster_name}}}"
            - name: check-alerts
              type: call
              call: "prometheus.get-alerts"
              with:
                filter: "cluster={{cluster_name}}"
            - name: post-report
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "platform-engineering"
                text: "K8s cluster {{cluster_name}}: Nodes: {{query-metrics.node_count}}. Active alerts: {{check-alerts.data.alerts.length}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: prometheus
      baseUri: "https://moderna-prometheus.internal.modernatx.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.prometheus_token"
      resources:
        - name: alerts
          path: "/alerts"
          operations:
            - name: get-alerts
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves equipment calibration status from ServiceNow CMDB, checks the next calibration date, and if overdue, creates a maintenance work order and alerts the lab operations team in Teams.

naftiko: "0.5"
info:
  label: "Lab Equipment Calibration Tracker"
  description: "Retrieves equipment calibration status from ServiceNow CMDB, checks the next calibration date, and if overdue, creates a maintenance work order and alerts the lab operations team in Teams."
  tags:
    - lab-operations
    - equipment
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lab-equipment
      port: 8080
      tools:
        - name: check-calibration-status
          description: "Given an equipment asset tag, check calibration status in ServiceNow CMDB. If overdue, create a work order and notify lab ops."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "Equipment asset tag identifier."
            - name: lab_location
              in: body
              type: string
              description: "Lab location code."
          steps:
            - name: get-equipment
              type: call
              call: "servicenow.get-ci"
              with:
                asset_tag: "{{asset_tag}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Calibration due: {{get-equipment.name}} ({{asset_tag}})"
                category: "lab_maintenance"
                description: "Equipment {{get-equipment.name}} at {{lab_location}} requires calibration. Last calibrated: {{get-equipment.last_calibration_date}}. Due: {{get-equipment.next_calibration_date}}."
            - name: alert-lab-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "lab-operations"
                text: "Calibration alert: {{get-equipment.name}} ({{asset_tag}}) at {{lab_location}} is due for calibration. Work order: {{create-work-order.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}"
          inputParameters:
            - name: asset_tag
              in: query
          operations:
            - name: get-ci
              method: GET
        - 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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves LNP formulation data from Benchling by experiment ID, pulls the associated analytical results from the LIMS, and updates the formulation dashboard in Power BI.

naftiko: "0.5"
info:
  label: "Lipid Nanoparticle Formulation Tracker"
  description: "Retrieves LNP formulation data from Benchling by experiment ID, pulls the associated analytical results from the LIMS, and updates the formulation dashboard in Power BI."
  tags:
    - drug-development
    - formulation
    - benchling
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: formulation-tracking
      port: 8080
      tools:
        - name: track-lnp-formulation
          description: "Given an experiment ID, pull formulation parameters from Benchling, retrieve analytical data, and refresh the Power BI dashboard."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "Benchling experiment ID for the LNP formulation."
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the formulation dashboard."
          steps:
            - name: get-experiment
              type: call
              call: "benchling.get-experiment"
              with:
                experiment_id: "{{experiment_id}}"
            - name: get-results
              type: call
              call: "benchling.list-results"
              with:
                experiment_id: "{{experiment_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: experiments
          path: "/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment
              method: GET
        - name: results
          path: "/experiments/{{experiment_id}}/results"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: list-results
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates a manufacturing line changeover by closing the current batch in SAP, cleaning equipment via the MES system, running environmental monitoring checks, logging the changeover in ServiceNow, and notifying the production team in Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Changeover Orchestrator"
  description: "Orchestrates a manufacturing line changeover by closing the current batch in SAP, cleaning equipment via the MES system, running environmental monitoring checks, logging the changeover in ServiceNow, and notifying the production team in Teams."
  tags:
    - manufacturing
    - changeover
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-ops
      port: 8080
      tools:
        - name: execute-changeover
          description: "Given current and next batch details, close the current batch, initiate cleaning, verify environmental monitoring, log the changeover, and notify production."
          inputParameters:
            - name: current_batch
              in: body
              type: string
              description: "Current batch number being completed."
            - name: next_batch
              in: body
              type: string
              description: "Next batch number to start."
            - name: production_line
              in: body
              type: string
              description: "Manufacturing line identifier."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
          steps:
            - name: close-batch
              type: call
              call: "sap.update-batch-status"
              with:
                batch_number: "{{current_batch}}"
                plant: "{{plant_code}}"
                status: "COMPLETED"
            - name: log-changeover
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Line changeover: {{production_line}} - {{current_batch}} to {{next_batch}}"
                category: "manufacturing"
                description: "Changeover on line {{production_line}} at plant {{plant_code}}. Batch {{current_batch}} completed. Preparing for batch {{next_batch}}."
            - name: notify-production
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "production-floor"
                text: "Changeover initiated on line {{production_line}}: Batch {{current_batch}} closed. Next: {{next_batch}}. Changeover ticket: {{log-changeover.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/A_Batch(Batch='{{batch_number}}',Plant='{{plant}}')"
          inputParameters:
            - name: batch_number
              in: path
            - name: plant
              in: path
          operations:
            - name: update-batch-status
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves calendar events for a specified user from Microsoft Graph, returning meeting titles, times, attendees, and Teams join links for scheduling coordination.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Calendar Event Lookup"
  description: "Retrieves calendar events for a specified user from Microsoft Graph, returning meeting titles, times, attendees, and Teams join links for scheduling coordination."
  tags:
    - collaboration
    - microsoft-outlook
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: calendar
      port: 8080
      tools:
        - name: get-calendar-events
          description: "Retrieve calendar events for a user in a date range. Returns event titles, times, and join links."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "User email address."
            - name: start_date
              in: body
              type: string
              description: "Start date (YYYY-MM-DD)."
            - name: end_date
              in: body
              type: string
              description: "End date (YYYY-MM-DD)."
          call: "msgraph.get-events"
          with:
            user_email: "{{user_email}}"
            start: "{{start_date}}"
            end: "{{end_date}}"
          outputParameters:
            - name: events
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: calendar-events
          path: "/users/{{user_email}}/calendarView?startDateTime={{start}}&endDateTime={{end}}"
          inputParameters:
            - name: user_email
              in: path
            - name: start
              in: query
            - name: end
              in: query
          operations:
            - name: get-events
              method: GET

Sends a formatted notification message to a specified Microsoft Teams channel. Used as a building block for alerting across Moderna workflows.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notification"
  description: "Sends a formatted notification message to a specified Microsoft Teams channel. Used as a building block for alerting across Moderna workflows."
  tags:
    - communication
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: notifications
      port: 8080
      tools:
        - name: send-teams-notification
          description: "Send a message to a Microsoft Teams channel by channel ID."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel identifier."
            - name: message
              in: body
              type: string
              description: "The notification message text."
          call: "msteams.send-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls production batch yield data from SAP, aggregates quality metrics from the LIMS via Benchling, feeds the data into the Azure ML anomaly detection model, and updates the manufacturing excellence Power BI dashboard.

naftiko: "0.5"
info:
  label: "mRNA Production Yield Analytics Pipeline"
  description: "Pulls production batch yield data from SAP, aggregates quality metrics from the LIMS via Benchling, feeds the data into the Azure ML anomaly detection model, and updates the manufacturing excellence Power BI dashboard."
  tags:
    - manufacturing
    - analytics
    - sap
    - benchling
    - azure-machine-learning
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: mfg-analytics
      port: 8080
      tools:
        - name: analyze-production-yield
          description: "Given a production run range, pull batch yields from SAP, quality data from Benchling, run anomaly detection, and refresh the analytics dashboard."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code."
            - name: date_from
              in: body
              type: string
              description: "Start date for production data (YYYY-MM-DD)."
            - name: date_to
              in: body
              type: string
              description: "End date for production data (YYYY-MM-DD)."
            - name: dashboard_dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the manufacturing dashboard."
          steps:
            - name: get-batch-yields
              type: call
              call: "sap.get-production-orders"
              with:
                plant: "{{plant_code}}"
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: get-quality-metrics
              type: call
              call: "benchling.list-results"
              with:
                schema_id: "production_quality"
                created_after: "{{date_from}}"
            - name: detect-anomalies
              type: call
              call: "azureml.invoke-endpoint"
              with:
                deployment_name: "yield-anomaly-detector"
                payload:
                  yields: "{{get-batch-yields.results}}"
                  quality: "{{get-quality-metrics}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dashboard_dataset_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder?$filter=Plant eq '{{plant}}' and StartDate ge datetime'{{date_from}}' and StartDate le datetime'{{date_to}}'"
          inputParameters:
            - name: plant
              in: query
            - name: date_from
              in: query
            - name: date_to
              in: query
          operations:
            - name: get-production-orders
              method: GET
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: results
          path: "/assay-results?schemaId={{schema_id}}&createdAt.gte={{created_after}}"
          inputParameters:
            - name: schema_id
              in: query
            - name: created_after
              in: query
          operations:
            - name: list-results
              method: GET
    - type: http
      namespace: azureml
      baseUri: "https://moderna-ml.eastus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: deployments
          path: "/score"
          operations:
            - name: invoke-endpoint
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Submits a target protein sequence to the internal mRNA design platform, runs codon optimization via the AI engine, stores the candidate construct in Benchling, and notifies the research team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "mRNA Sequence Design Orchestrator"
  description: "Submits a target protein sequence to the internal mRNA design platform, runs codon optimization via the AI engine, stores the candidate construct in Benchling, and notifies the research team in Microsoft Teams."
  tags:
    - drug-development
    - mrna
    - benchling
    - azure-machine-learning
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mrna-design
      port: 8080
      tools:
        - name: design-mrna-construct
          description: "Given a target protein sequence and optimization parameters, run codon optimization, register the construct in Benchling, and notify the research team."
          inputParameters:
            - name: protein_sequence
              in: body
              type: string
              description: "Amino acid sequence of the target protein."
            - name: optimization_strategy
              in: body
              type: string
              description: "Codon optimization strategy (e.g., max-expression, gc-balanced)."
            - name: project_id
              in: body
              type: string
              description: "Benchling project ID to register the construct under."
          steps:
            - name: optimize-codons
              type: call
              call: "azureml.invoke-endpoint"
              with:
                deployment_name: "codon-optimizer-v3"
                payload:
                  protein_sequence: "{{protein_sequence}}"
                  strategy: "{{optimization_strategy}}"
            - name: register-construct
              type: call
              call: "benchling.create-dna-sequence"
              with:
                folder_id: "{{project_id}}"
                name: "mRNA-{{optimize-codons.construct_id}}"
                bases: "{{optimize-codons.optimized_sequence}}"
                annotations: "{{optimize-codons.annotations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "mrna-design-team"
                text: "New mRNA construct {{register-construct.entity_id}} registered. Optimization: {{optimization_strategy}}. GC content: {{optimize-codons.gc_content}}%. View: {{register-construct.web_url}}"
  consumes:
    - type: http
      namespace: azureml
      baseUri: "https://moderna-ml.eastus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: deployments
          path: "/score"
          operations:
            - name: invoke-endpoint
              method: POST
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: dna-sequences
          path: "/dna-sequences"
          operations:
            - name: create-dna-sequence
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Oracle Cloud ERP for vaccine inventory levels, compares against reorder thresholds, and if stock is low, creates a SAP purchase requisition and alerts the supply chain team in Teams.

naftiko: "0.5"
info:
  label: "Oracle Cloud Inventory Check and Reorder Alert"
  description: "Queries Oracle Cloud ERP for vaccine inventory levels, compares against reorder thresholds, and if stock is low, creates a SAP purchase requisition and alerts the supply chain team in Teams."
  tags:
    - supply-chain
    - inventory
    - oracle-cloud
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: inventory-mgmt
      port: 8080
      tools:
        - name: check-inventory-reorder
          description: "Check inventory levels in Oracle Cloud. If below threshold, create a SAP purchase requisition and alert supply chain."
          inputParameters:
            - name: item_number
              in: body
              type: string
              description: "Oracle item number for the vaccine product."
            - name: warehouse_code
              in: body
              type: string
              description: "Warehouse organization code."
            - name: reorder_threshold
              in: body
              type: number
              description: "Minimum stock level before reorder."
          steps:
            - name: get-inventory
              type: call
              call: "oracle.get-inventory"
              with:
                item_number: "{{item_number}}"
                warehouse_code: "{{warehouse_code}}"
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                material: "{{item_number}}"
                plant: "{{warehouse_code}}"
                quantity: "{{reorder_threshold}}"
            - name: alert-supply-chain
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply-chain-ops"
                text: "Inventory alert: {{item_number}} at {{warehouse_code}}. On-hand: {{get-inventory.OnHandQuantity}}. Threshold: {{reorder_threshold}}. Requisition created: {{create-requisition.requisition_number}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://moderna-erp.fa.us2.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: inventory
          path: "/inventoryBalances?q=ItemNumber={{item_number}};OrganizationCode={{warehouse_code}}"
          inputParameters:
            - name: item_number
              in: query
            - name: warehouse_code
              in: query
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseRequisitionHeader"
          operations:
            - name: create-requisition
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Activates pandemic response manufacturing by scaling Kubernetes clusters via Terraform, provisioning additional SAP production orders, alerting the global supply chain team in Teams, and creating an executive dashboard in Power BI.

naftiko: "0.5"
info:
  label: "Pandemic Response Scale-Up Orchestrator"
  description: "Activates pandemic response manufacturing by scaling Kubernetes clusters via Terraform, provisioning additional SAP production orders, alerting the global supply chain team in Teams, and creating an executive dashboard in Power BI."
  tags:
    - pandemic-response
    - manufacturing
    - scale-up
    - terraform
    - sap
    - microsoft-teams
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: pandemic-response
      port: 8080
      tools:
        - name: activate-scale-up
          description: "Given a product code and target production volume, scale infrastructure, create production orders, alert supply chain, and provision the executive dashboard."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Vaccine product material number."
            - name: target_volume
              in: body
              type: number
              description: "Target production volume in doses."
            - name: workspace_id
              in: body
              type: string
              description: "Terraform workspace for manufacturing infrastructure."
            - name: dashboard_dataset_id
              in: body
              type: string
              description: "Power BI dataset for the response dashboard."
          steps:
            - name: scale-infra
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "Pandemic scale-up: {{product_code}} target {{target_volume}} doses"
            - name: create-production-orders
              type: call
              call: "sap.create-production-order"
              with:
                material: "{{product_code}}"
                target_quantity: "{{target_volume}}"
                priority: "urgent"
            - name: alert-supply-chain
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "global-supply-chain"
                text: "PANDEMIC RESPONSE ACTIVATED: {{product_code}} scale-up to {{target_volume}} doses. Infra scaling initiated (run: {{scale-infra.run_id}}). Production order: {{create-production-orders.order_number}}."
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "{{dashboard_dataset_id}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder"
          operations:
            - name: create-production-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 1"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-1
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-1"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://moderna.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 10"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-10
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-10"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-10
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://moderna.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 11"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-11
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-11"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 11 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-11
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 12"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-12
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-12"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "pharma.workflow_12"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-12
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 13"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-13
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-13"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-13
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://moderna.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 14"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-14
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-14"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-14
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 15"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-15
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-15"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#pharma"
                text: "Completed workflow 15: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-15
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 16"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-16
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-16"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "PHARMA"
                title: "Report 16"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-16
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 17"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-17
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-17"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_17"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-17
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 18"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-18
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-18"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "PHAR"
                summary: "Task from workflow 18"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-18
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 19"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-19
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-19"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "pharma"
                message: "Workflow 19 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-19
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 2"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-2
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-2"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 20"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-20
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-20"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_20"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-20
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://moderna-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 21"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-21
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-21"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-21
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 22"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-22
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-22"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-22
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://moderna.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 23"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-23
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-23"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 23 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-23
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 24"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-24
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-24"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "pharma.workflow_24"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-24
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 25"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-25
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-25"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-25
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://moderna.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 26"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-26
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-26"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-26
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 27"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-27
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-27"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#pharma"
                text: "Completed workflow 27: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-27
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 28"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-28
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-28"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "PHARMA"
                title: "Report 28"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-28
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 29"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-29
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-29"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_29"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-29
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 3"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-3
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-3"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#pharma"
                text: "Completed workflow 3: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-3
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 30"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-30
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-30"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "PHAR"
                summary: "Task from workflow 30"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-30
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 31"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-31
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-31"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "pharma"
                message: "Workflow 31 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-31
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 32"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-32
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-32"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_32"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-32
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://moderna-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 33"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-33
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-33"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-33
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 34"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-34
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-34"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-34
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://moderna.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 35"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-35
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-35"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 35 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-35
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 4"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-4
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-4"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "PHARMA"
                title: "Report 4"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-4
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 5"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-5
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-5"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_5"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-5
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 6"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-6
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-6"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "PHAR"
                summary: "Task from workflow 6"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-6
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 7"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-7
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-7"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "pharma"
                message: "Workflow 7 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-7
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 8"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-8
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-8"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_8"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-8
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://moderna-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: "0.5"
info:
  label: "Moderna Workflow 9"
  description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
  tags:
    - pharma
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: pharma
      port: 8080
      tools:
        - name: moderna-workflow-9
          description: "Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "moderna-ops.run-workflow-9"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: moderna-ops
      baseUri: "https://api.moderna.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-9
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 1"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-1
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-1"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-1
          path: "/data-1/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-1
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 10"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-10
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-10"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-10
          path: "/data-10/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-10
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 11"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-11
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-11"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-11
          path: "/data-11/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-11
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 12"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-12
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-12"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-12
          path: "/data-12/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-12
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 13"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-13
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-13"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-13
          path: "/data-13/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-13
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 14"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-14
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-14"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-14
          path: "/data-14/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-14
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 15"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-15
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-15"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-15
          path: "/data-15/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-15
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 2"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-2
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-2"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-2
          path: "/data-2/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-2
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 3"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-3
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-3"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-3
          path: "/data-3/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-3
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 4"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-4
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-4"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-4
          path: "/data-4/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-4
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 5"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-5
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-5"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-5
          path: "/data-5/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-5
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 6"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-6
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-6"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-6
          path: "/data-6/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-6
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 7"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-7
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-7"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-7
          path: "/data-7/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-7
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 8"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-8
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-8"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-8
          path: "/data-8/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-8
              method: GET

Retrieves operational data for Moderna pharma workflows.

naftiko: "0.5"
info:
  label: "Moderna Data Lookup 9"
  description: "Retrieves operational data for Moderna pharma workflows."
  tags:
    - pharma
    - operations
capability:
  exposes:
    - type: mcp
      namespace: moderna-data
      port: 8080
      tools:
        - name: get-data-9
          description: "Retrieves operational data for Moderna pharma workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "moderna-data.get-data-9"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: moderna-data
      baseUri: "https://api.moderna.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.moderna_api_token"
      resources:
        - name: data-9
          path: "/data-9/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-9
              method: GET

Triggers a refresh of a specified Power BI dataset used for Moderna operational reporting and returns the refresh status.

naftiko: "0.5"
info:
  label: "Power BI Report Refresh"
  description: "Triggers a refresh of a specified Power BI dataset used for Moderna operational reporting and returns the refresh status."
  tags:
    - analytics
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-report
          description: "Trigger a Power BI dataset refresh by dataset ID. Returns the refresh request ID and status."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset identifier."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: request_id
              type: string
              mapping: "$.requestId"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Ingests preclinical study results from Benchling into the Elasticsearch data lake, triggers a TensorFlow model for immunogenicity prediction via Azure ML, and stores the prediction output back in Benchling with a Jira task for review.

naftiko: "0.5"
info:
  label: "Preclinical Study Data Ingestion"
  description: "Ingests preclinical study results from Benchling into the Elasticsearch data lake, triggers a TensorFlow model for immunogenicity prediction via Azure ML, and stores the prediction output back in Benchling with a Jira task for review."
  tags:
    - research
    - preclinical
    - benchling
    - elasticsearch
    - azure-machine-learning
    - jira
capability:
  exposes:
    - type: mcp
      namespace: preclinical-ai
      port: 8080
      tools:
        - name: ingest-and-predict
          description: "Given a Benchling experiment ID, ingest results into the data lake, run immunogenicity prediction, store predictions, and create a review task."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "Benchling experiment ID with preclinical results."
            - name: model_endpoint
              in: body
              type: string
              description: "Azure ML deployment name for the immunogenicity model."
          steps:
            - name: get-results
              type: call
              call: "benchling.list-results"
              with:
                experiment_id: "{{experiment_id}}"
            - name: index-data
              type: call
              call: "elasticsearch.index-document"
              with:
                index: "preclinical-results"
                body: "{{get-results}}"
            - name: predict-immunogenicity
              type: call
              call: "azureml.invoke-endpoint"
              with:
                deployment_name: "{{model_endpoint}}"
                payload: "{{get-results}}"
            - name: store-prediction
              type: call
              call: "benchling.create-result"
              with:
                experiment_id: "{{experiment_id}}"
                result_type: "immunogenicity_prediction"
                data: "{{predict-immunogenicity.predictions}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "PRECLIN"
                issue_type: "Task"
                summary: "Review immunogenicity prediction for {{experiment_id}}"
                description: "Prediction score: {{predict-immunogenicity.score}}. Results indexed in Elasticsearch. Experiment: {{experiment_id}}."
  consumes:
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: results
          path: "/experiments/{{experiment_id}}/results"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: list-results
              method: GET
            - name: create-result
              method: POST
    - type: http
      namespace: elasticsearch
      baseUri: "https://moderna-es.eastus2.azure.elastic-cloud.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: documents
          path: "/{{index}}/_doc"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: index-document
              method: POST
    - type: http
      namespace: azureml
      baseUri: "https://moderna-ml.eastus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: deployments
          path: "/score"
          operations:
            - name: invoke-endpoint
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.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

Assembles a regulatory submission package by pulling the latest clinical study report from Veeva Vault, CMC data from SAP, and generating a submission index in Confluence, then notifying regulatory affairs via Teams.

naftiko: "0.5"
info:
  label: "Regulatory Submission Assembly"
  description: "Assembles a regulatory submission package by pulling the latest clinical study report from Veeva Vault, CMC data from SAP, and generating a submission index in Confluence, then notifying regulatory affairs via Teams."
  tags:
    - regulatory
    - submissions
    - veeva
    - sap
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory-submissions
      port: 8080
      tools:
        - name: assemble-submission
          description: "Given a study ID and submission type, gather documents from Veeva, pull CMC data from SAP, create an index page in Confluence, and notify the regulatory team."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Clinical study identifier."
            - name: submission_type
              in: body
              type: string
              description: "Type of submission (IND, BLA, supplement, annual-report)."
            - name: target_authority
              in: body
              type: string
              description: "Regulatory authority (FDA, EMA, PMDA, HC)."
          steps:
            - name: get-clinical-docs
              type: call
              call: "veeva.search-documents"
              with:
                query: "study_id__c={{study_id}} AND document_type__c='Clinical Study Report'"
            - name: get-cmc-data
              type: call
              call: "sap.get-material-master"
              with:
                study_id: "{{study_id}}"
            - name: create-index
              type: call
              call: "confluence.create-page"
              with:
                space_key: "REG"
                title: "{{submission_type}} Submission - {{study_id}} - {{target_authority}}"
                body: "Submission Package Index\n\nStudy: {{study_id}}\nType: {{submission_type}}\nAuthority: {{target_authority}}\nCSR Documents: {{get-clinical-docs.document_count}}\nCMC Material: {{get-cmc-data.material_number}}"
            - name: notify-regulatory
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "regulatory-affairs"
                text: "Submission package assembled for {{study_id}} ({{submission_type}}) targeting {{target_authority}}. {{get-clinical-docs.document_count}} clinical docs collected. Index: {{create-index.url}}"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: documents
          path: "/objects/documents/search"
          operations:
            - name: search-documents
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_MASTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Material"
          operations:
            - name: get-material-master
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a healthcare professional account from Salesforce, pulls recent engagement activities, and logs a summary report in Confluence for the medical affairs team.

naftiko: "0.5"
info:
  label: "Salesforce HCP Account and Engagement Report"
  description: "Retrieves a healthcare professional account from Salesforce, pulls recent engagement activities, and logs a summary report in Confluence for the medical affairs team."
  tags:
    - commercial
    - salesforce
    - hcp-engagement
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: commercial-crm
      port: 8080
      tools:
        - name: get-hcp-account
          description: "Look up an HCP account in Salesforce, pull engagement activities, and publish a summary to Confluence."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Salesforce account ID for the HCP."
            - name: confluence_space
              in: body
              type: string
              description: "Confluence space key for medical affairs."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-activities
              type: call
              call: "salesforce.get-activities"
              with:
                account_id: "{{account_id}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{confluence_space}}"
                title: "HCP Engagement: {{get-account.Name}}"
                body: "HCP: {{get-account.Name}}\nSpecialty: {{get-account.Specialty__c}}\nInstitution: {{get-account.Institution__c}}\nTerritory: {{get-account.Territory__c}}\nRecent Activities: {{get-activities.totalSize}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://moderna.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: activities
          path: "/sobjects/Account/{{account_id}}/Activities"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-activities
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://moderna.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves a Salesforce opportunity by ID for the Moderna commercial team, returning the opportunity name, stage, amount, close date, and associated account.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID for the Moderna commercial team, returning the opportunity name, stage, amount, close date, and associated account."
  tags:
    - commercial
    - salesforce
    - opportunity
capability:
  exposes:
    - type: mcp
      namespace: commercial-sales
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID. Returns name, stage, amount, close date, and account."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: amount
              type: number
              mapping: "$.Amount"
            - name: close_date
              type: string
              mapping: "$.CloseDate"
            - name: account
              type: string
              mapping: "$.Account.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://moderna.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET

When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.

naftiko: "0.5"
info:
  label: "SAP Ariba Procurement Approval"
  description: "When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status."
  tags:
    - procurement
    - sap-ariba
    - workday
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: procurement-approval
      port: 8080
      tools:
        - name: route-requisition-approval
          description: "Given an Ariba requisition ID, requestor employee ID, and spend amount, resolve the approver from Workday and notify both parties in Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The SAP Ariba requisition identifier."
            - name: requestor_employee_id
              in: body
              type: string
              description: "Workday employee ID of the requestor."
            - name: spend_amount
              in: body
              type: number
              description: "Total spend amount on the requisition."
          steps:
            - name: get-requisition
              type: call
              call: "ariba.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: get-requestor
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{requestor_employee_id}}"
            - name: get-manager
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-requestor.manager_id}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-manager.work_email}}"
                text: "Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for ${{spend_amount}}. Vendor: {{get-requisition.vendor_name}}."
            - name: notify-requestor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-requestor.work_email}}"
                text: "Your requisition {{requisition_id}} (${{spend_amount}}) has been routed to {{get-manager.full_name}} for approval."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-req/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a manufacturing batch record from SAP S/4HANA, pulls associated quality inspection results, and logs the batch review in ServiceNow for production traceability.

naftiko: "0.5"
info:
  label: "SAP Manufacturing Batch Record and Quality Check"
  description: "Retrieves a manufacturing batch record from SAP S/4HANA, pulls associated quality inspection results, and logs the batch review in ServiceNow for production traceability."
  tags:
    - manufacturing
    - sap
    - sap-s4hana
    - batch-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: get-batch-record
          description: "Look up a manufacturing batch, pull quality inspection results, and log the review in ServiceNow."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "The SAP batch number (10-digit)."
            - name: plant_code
              in: body
              type: string
              description: "SAP plant code (e.g., 1000 for Norwood)."
          steps:
            - name: get-batch
              type: call
              call: "sap.get-batch"
              with:
                batch_number: "{{batch_number}}"
                plant_code: "{{plant_code}}"
            - name: get-inspection
              type: call
              call: "sap.get-inspection-lot"
              with:
                batch: "{{batch_number}}"
                plant: "{{plant_code}}"
            - name: log-review
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Batch review: {{batch_number}} at plant {{plant_code}}"
                category: "manufacturing"
                description: "Batch {{batch_number}} status: {{get-batch.BatchStatus}}. Yield: {{get-batch.YieldPercentage}}%. QA disposition: {{get-inspection.disposition}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: batches
          path: "/A_Batch(Batch='{{batch_number}}',Plant='{{plant_code}}')"
          inputParameters:
            - name: batch_number
              in: path
            - name: plant_code
              in: path
          operations:
            - name: get-batch
              method: GET
    - type: http
      namespace: sap-qm
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot?$filter=Batch eq '{{batch}}' and Plant eq '{{plant}}'"
          inputParameters:
            - name: batch
              in: query
            - name: plant
              in: query
          operations:
            - name: get-inspection-lot
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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

Looks up a SAP S/4HANA purchase order, cross-references the vendor qualification status in SAP Ariba, and notifies the procurement team in Teams if vendor qualification has lapsed.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status and Vendor Check"
  description: "Looks up a SAP S/4HANA purchase order, cross-references the vendor qualification status in SAP Ariba, and notifies the procurement team in Teams if vendor qualification has lapsed."
  tags:
    - procurement
    - sap
    - sap-s4hana
    - sap-ariba
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a PO in SAP, check vendor qualification in Ariba, and notify procurement if there are issues."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (10-digit)."
          steps:
            - name: get-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: check-vendor
              type: call
              call: "ariba.get-supplier"
              with:
                supplier_id: "{{get-po.Supplier.SupplierID}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement-ops"
                text: "PO {{po_number}}: {{get-po.OverallStatus}}. Vendor: {{get-po.Supplier.CompanyName}} (${{get-po.TotalAmount}}). Qualification: {{check-vendor.qualification_status}}. Delivery: {{get-po.DeliveryDate}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - 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/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a ServiceNow incident by number and returns the short description, state, priority, assigned group, and resolution notes.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns the short description, state, priority, assigned group, and resolution notes."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number. Returns description, state, priority, and assigned group."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: short_description
              type: string
              mapping: "$.result.short_description"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Searches a Moderna SharePoint site for documents matching a keyword query, returning file names, paths, and last modified dates.

naftiko: "0.5"
info:
  label: "SharePoint Document Search"
  description: "Searches a Moderna SharePoint site for documents matching a keyword query, returning file names, paths, and last modified dates."
  tags:
    - collaboration
    - sharepoint
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: doc-search
      port: 8080
      tools:
        - name: search-documents
          description: "Search a SharePoint site for documents by keyword. Returns matching file names, paths, and modification dates."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "SharePoint site ID to search within."
            - name: query
              in: body
              type: string
              description: "Search keyword or phrase."
          call: "sharepoint.search"
          with:
            site_id: "{{site_id}}"
            query: "{{query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/{{site_id}}/drive/root/search(q='{{query}}')"
          inputParameters:
            - name: site_id
              in: path
            - name: query
              in: path
          operations:
            - name: search
              method: GET

Queries Splunk for security events, correlates with Microsoft Entra sign-in logs, and creates a ServiceNow security incident with findings for the SOC team.

naftiko: "0.5"
info:
  label: "Splunk Security Incident Investigation"
  description: "Queries Splunk for security events, correlates with Microsoft Entra sign-in logs, and creates a ServiceNow security incident with findings for the SOC team."
  tags:
    - security
    - splunk
    - microsoft-entra
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: investigate-security-event
          description: "Search Splunk for security events, correlate with Entra sign-in data, and create a ServiceNow security incident."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Splunk search query (SPL syntax)."
            - name: earliest_time
              in: body
              type: string
              description: "Earliest time for the search (e.g., -24h, -7d)."
            - name: user_principal_name
              in: body
              type: string
              description: "UPN of the user to correlate sign-in logs."
          steps:
            - name: search-logs
              type: call
              call: "splunk.create-search"
              with:
                search: "{{search_query}}"
                earliest_time: "{{earliest_time}}"
            - name: get-signin-logs
              type: call
              call: "entra.get-signins"
              with:
                user_principal_name: "{{user_principal_name}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Security investigation: {{user_principal_name}}"
                category: "security"
                urgency: "2"
                description: "Splunk results: {{search-logs.resultCount}} events. Entra sign-ins: {{get-signin-logs.value.length}} in period. Query: {{search_query}}."
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://moderna-splunk.splunkcloud.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search-jobs
          path: "/search/jobs"
          operations:
            - name: create-search
              method: POST
    - type: http
      namespace: entra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: signins
          path: "/auditLogs/signIns?$filter=userPrincipalName eq '{{user_principal_name}}'"
          inputParameters:
            - name: user_principal_name
              in: query
          operations:
            - name: get-signins
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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

Triggers a refresh of a specified Tableau workbook used for Moderna operational and clinical reporting.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Refresh"
  description: "Triggers a refresh of a specified Tableau workbook used for Moderna operational and clinical reporting."
  tags:
    - analytics
    - tableau
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: bi-tableau
      port: 8080
      tools:
        - name: refresh-tableau-workbook
          description: "Trigger a Tableau workbook refresh by workbook ID. Returns the refresh job ID."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Tableau workbook identifier."
          call: "tableau.refresh-workbook"
          with:
            workbook_id: "{{workbook_id}}"
          outputParameters:
            - name: job_id
              type: string
              mapping: "$.job.id"
            - name: status
              type: string
              mapping: "$.job.status"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://moderna-tableau.online.tableau.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/moderna/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST

Triggers a Terraform plan run for a Moderna infrastructure workspace, creates a Jira change request ticket, and notifies the infrastructure team in Teams with the plan summary.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Plan and Notify"
  description: "Triggers a Terraform plan run for a Moderna infrastructure workspace, creates a Jira change request ticket, and notifies the infrastructure team in Teams with the plan summary."
  tags:
    - infrastructure
    - terraform
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-automation
      port: 8080
      tools:
        - name: trigger-terraform-plan
          description: "Trigger a Terraform plan, create a Jira change request, and notify the infra team."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Terraform Cloud workspace ID."
            - name: message
              in: body
              type: string
              description: "Commit message or reason for the plan."
          steps:
            - name: create-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "{{message}}"
            - name: create-change-request
              type: call
              call: "jira.create-issue"
              with:
                project_key: "INFRA"
                issue_type: "Task"
                summary: "Terraform plan: {{message}}"
                description: "Run ID: {{create-run.data.id}}. Status: {{create-run.data.attributes.status}}. Workspace: {{workspace_id}}."
            - name: notify-infra
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "infrastructure"
                text: "Terraform plan triggered: {{message}}. Run: {{create-run.data.id}}. Status: {{create-run.data.attributes.status}}. Jira: {{create-change-request.key}}."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates a distribution order in SAP, reserves cold-chain logistics via the supply chain platform, generates the shipping label in the warehouse system, and notifies the distribution team in Teams.

naftiko: "0.5"
info:
  label: "Vaccine Distribution Order Pipeline"
  description: "Creates a distribution order in SAP, reserves cold-chain logistics via the supply chain platform, generates the shipping label in the warehouse system, and notifies the distribution team in Teams."
  tags:
    - supply-chain
    - distribution
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: distribution
      port: 8080
      tools:
        - name: create-distribution-order
          description: "Given destination, product, quantity, and required delivery date, create the SAP delivery, reserve logistics, and notify distribution ops."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "SAP customer/ship-to ID."
            - name: product_code
              in: body
              type: string
              description: "SAP material number for the vaccine product."
            - name: quantity
              in: body
              type: number
              description: "Number of doses to ship."
            - name: delivery_date
              in: body
              type: string
              description: "Required delivery date in YYYY-MM-DD format."
          steps:
            - name: create-delivery
              type: call
              call: "sap.create-delivery"
              with:
                customer: "{{customer_id}}"
                material: "{{product_code}}"
                quantity: "{{quantity}}"
                requested_date: "{{delivery_date}}"
            - name: log-shipment
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Distribution order: {{product_code}} x{{quantity}} to {{customer_id}}"
                category: "supply_chain"
                description: "SAP delivery {{create-delivery.delivery_number}} created. Required by {{delivery_date}}."
            - name: notify-distribution
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "distribution-ops"
                text: "New distribution order: {{product_code}} x{{quantity}} doses to {{customer_id}}. Delivery: {{create-delivery.delivery_number}}. Ship by: {{delivery_date}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/A_OutboundDeliveryHeader"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates a stability study protocol in Benchling, schedules time-point samples in SAP QM, sets up the data collection template in the LIMS, and notifies the analytical development team via Teams.

naftiko: "0.5"
info:
  label: "Vaccine Stability Study Orchestrator"
  description: "Creates a stability study protocol in Benchling, schedules time-point samples in SAP QM, sets up the data collection template in the LIMS, and notifies the analytical development team via Teams."
  tags:
    - quality
    - stability
    - benchling
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: stability-studies
      port: 8080
      tools:
        - name: initiate-stability-study
          description: "Given product details and storage conditions, create the stability protocol, schedule samples in SAP, and notify the analytical team."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Material number for the vaccine product."
            - name: batch_number
              in: body
              type: string
              description: "Batch number to place on stability."
            - name: storage_conditions
              in: body
              type: string
              description: "Storage conditions (e.g., -20C, 2-8C, 25C/60%RH)."
            - name: duration_months
              in: body
              type: number
              description: "Planned study duration in months."
          steps:
            - name: create-protocol
              type: call
              call: "benchling.create-experiment"
              with:
                name: "Stability Study: {{product_code}} Batch {{batch_number}} at {{storage_conditions}}"
                schema_id: "stability_protocol"
                fields:
                  product_code: "{{product_code}}"
                  batch_number: "{{batch_number}}"
                  conditions: "{{storage_conditions}}"
                  duration: "{{duration_months}}"
            - name: schedule-samples
              type: call
              call: "sap.create-inspection-lot"
              with:
                material: "{{product_code}}"
                batch: "{{batch_number}}"
                inspection_type: "stability"
                plan_duration: "{{duration_months}}"
            - name: notify-analytical
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "analytical-development"
                text: "Stability study initiated: {{product_code}} Batch {{batch_number}} at {{storage_conditions}} for {{duration_months}} months. Protocol: {{create-protocol.web_url}}. SAP Inspection Lot: {{schedule-samples.lot_number}}."
  consumes:
    - type: http
      namespace: benchling
      baseUri: "https://moderna.benchling.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.benchling_token"
      resources:
        - name: experiments
          path: "/experiments"
          operations:
            - name: create-experiment
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://moderna-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot"
          operations:
            - name: create-inspection-lot
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the latest version of a document in Veeva Vault by document ID, returning version number, status, owner, and last modified date.

naftiko: "0.5"
info:
  label: "Veeva Vault Document Version Lookup"
  description: "Retrieves the latest version of a document in Veeva Vault by document ID, returning version number, status, owner, and last modified date."
  tags:
    - regulatory
    - veeva
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: vault-docs
      port: 8080
      tools:
        - name: get-document-version
          description: "Look up the latest version of a Veeva Vault document by document ID."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "Veeva Vault document ID."
          call: "veeva.get-doc-version"
          with:
            document_id: "{{document_id}}"
          outputParameters:
            - name: version
              type: string
              mapping: "$.versions[0].version_number__v"
            - name: status
              type: string
              mapping: "$.versions[0].status__v"
            - name: owner
              type: string
              mapping: "$.versions[0].owner__v"
            - name: modified_date
              type: string
              mapping: "$.versions[0].modified_date__v"
  consumes:
    - type: http
      namespace: veeva
      baseUri: "https://moderna.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_session_id"
      resources:
        - name: document-versions
          path: "/objects/documents/{{document_id}}/versions"
          inputParameters:
            - name: document_id
              in: path
          operations:
            - name: get-doc-version
              method: GET

Qualifies a new raw material vendor by pulling vendor details from SAP Ariba, creating a quality audit record in ServiceNow, provisioning a document repository in SharePoint, and notifying the quality and procurement teams in Teams.

naftiko: "0.5"
info:
  label: "Vendor Qualification Pipeline"
  description: "Qualifies a new raw material vendor by pulling vendor details from SAP Ariba, creating a quality audit record in ServiceNow, provisioning a document repository in SharePoint, and notifying the quality and procurement teams in Teams."
  tags:
    - procurement
    - quality
    - vendor-management
    - sap-ariba
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-qualification
      port: 8080
      tools:
        - name: qualify-vendor
          description: "Given a vendor ID and material category, pull vendor data from Ariba, create a quality audit in ServiceNow, set up a document folder in SharePoint, and notify stakeholders."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "SAP Ariba vendor/supplier ID."
            - name: material_category
              in: body
              type: string
              description: "Material category the vendor will supply (e.g., lipids, excipients, packaging)."
            - name: audit_type
              in: body
              type: string
              description: "Type of qualification audit (desktop, on-site, virtual)."
          steps:
            - name: get-vendor
              type: call
              call: "ariba.get-supplier"
              with:
                supplier_id: "{{vendor_id}}"
            - name: create-audit
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Vendor qualification: {{get-vendor.supplier_name}} - {{material_category}}"
                category: "quality_audit"
                description: "{{audit_type}} audit for {{get-vendor.supplier_name}} ({{vendor_id}}). Category: {{material_category}}. Country: {{get-vendor.country}}."
            - name: provision-docs
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "vendor-management"
                folder_path: "Qualifications/{{get-vendor.supplier_name}}_{{material_category}}"
            - name: notify-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "vendor-qualification"
                text: "Vendor qualification initiated: {{get-vendor.supplier_name}} for {{material_category}}. Audit type: {{audit_type}}. SNOW: {{create-audit.number}}. Docs: {{provision-docs.url}}"
  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/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://moderna.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves employee profile information from Workday by worker ID, including name, title, department, cost center, and manager.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee profile information from Workday by worker ID, including name, title, department, cost center, and manager."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up an employee by Workday worker ID. Returns name, title, department, cost center, and manager."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.full_name"
            - name: title
              type: string
              mapping: "$.worker.job_title"
            - name: department
              type: string
              mapping: "$.worker.department"
            - name: cost_center
              type: string
              mapping: "$.worker.cost_center"
            - name: manager
              type: string
              mapping: "$.worker.manager.full_name"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET