Moderna Capabilities
Naftiko 0.5 capability definitions for Moderna - 100 capabilities showing integration workflows and service orchestrations.
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