AstraZeneca Capabilities
Naftiko 0.5 capability definitions for AstraZeneca - 100 capabilities showing integration workflows and service orchestrations.
Collects access entitlements, routes for review, revokes expired access, and creates audit records.
naftiko: "0.5"
info:
label: "Access Review Certification Pipeline"
description: "Collects access entitlements, routes for review, revokes expired access, and creates audit records."
tags:
- security
- okta
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: access_review_certification_pipeline
description: "Orchestrate access review certification pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-okta
type: call
call: "okta.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-okta.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Access Review Certification Pipeline step 3 complete."
consumes:
- type: http
namespace: okta
baseUri: "https://astrazeneca.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: okta-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves an adverse event case from the pharmacovigilance safety database by case ID, returning patient demographics, suspected drug, event terms, and seriousness classification.
naftiko: "0.5"
info:
label: "Adverse Event Report Lookup"
description: "Retrieves an adverse event case from the pharmacovigilance safety database by case ID, returning patient demographics, suspected drug, event terms, and seriousness classification."
tags:
- pharmacovigilance
- drug-safety
- adverse-events
- oracle
capability:
exposes:
- type: mcp
namespace: pharmacovigilance
port: 8080
tools:
- name: get-adverse-event
description: "Look up an adverse event case by case number, log the inquiry in ServiceNow for audit trail, and notify the pharmacovigilance team via Slack."
inputParameters:
- name: case_number
in: body
type: string
description: "The safety database case number."
- name: requester_name
in: body
type: string
description: "Name of the person requesting the case review."
steps:
- name: fetch-case
type: call
call: "safety-db.get-case"
with:
case_number: "{{case_number}}"
- name: log-inquiry
type: call
call: "servicenow.create-record"
with:
table: "u_pv_case_inquiries"
case_number: "{{case_number}}"
requester: "{{requester_name}}"
seriousness: "{{fetch-case.seriousness}}"
- name: notify-pv
type: call
call: "slack.post-message"
with:
channel: "pharmacovigilance"
text: "AE case {{case_number}} reviewed by {{requester_name}}. Product: {{fetch-case.products[0].name}}. PT: {{fetch-case.events[0].meddra_pt}}. Seriousness: {{fetch-case.seriousness}}."
consumes:
- type: http
namespace: safety-db
baseUri: "https://astrazeneca-safety.oracle.com/argus/api/v1"
authentication:
type: bearer
token: "$secrets.argus_token"
resources:
- name: cases
path: "/cases/{{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.
naftiko: "0.5"
info:
label: "API Deprecation Notice Pipeline"
description: "Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress."
tags:
- engineering
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: api_deprecation_notice_pipeline
description: "Orchestrate api deprecation notice pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-datadog
type: call
call: "datadog.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-datadog.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "API Deprecation Notice Pipeline step 3 complete."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves current monitoring alert status. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Alert Status Check"
description: "Retrieves current monitoring alert status. Used by AstraZeneca teams."
tags:
- pharmaceutical
- elasticsearch
capability:
exposes:
- type: mcp
namespace: elasticsearc
port: 8080
tools:
- name: get-alert_status_check
description: "Retrieves current monitoring alert status. Used by AstraZeneca teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "The alert_id to look up."
call: "elasticsearch.get-alert_id"
with:
alert_id: "{{alert_id}}"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://astrazeneca-es.com:9200"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_alert_status_check
method: GET
Checks availability of an API endpoint. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca API Endpoint Status"
description: "Checks availability of an API endpoint. Used by AstraZeneca teams."
tags:
- pharmaceutical
- grafana
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: get-api_endpoint_status
description: "Checks availability of an API endpoint. Used by AstraZeneca teams."
inputParameters:
- name: endpoint_url
in: body
type: string
description: "The endpoint_url to look up."
call: "grafana.get-endpoint_url"
with:
endpoint_url: "{{endpoint_url}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://astrazeneca-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_api_endpoint_statu
method: GET
Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers.
naftiko: "0.5"
info:
label: "Clinical Trial Data Pipeline"
description: "Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers."
tags:
- clinical
- snowflake
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: clinical
port: 8080
tools:
- name: astrazeneca_clinical_trial_data_pipeline
description: "Orchestrate clinical trial data pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Clinical Trial Data Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves compliance check status. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Compliance Check Status"
description: "Retrieves compliance check status. Used by AstraZeneca teams."
tags:
- pharmaceutical
- okta
capability:
exposes:
- type: mcp
namespace: okta
port: 8080
tools:
- name: get-compliance_check_status
description: "Retrieves compliance check status. Used by AstraZeneca teams."
inputParameters:
- name: check_id
in: body
type: string
description: "The check_id to look up."
call: "okta.get-check_id"
with:
check_id: "{{check_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://astrazeneca.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_compliance_check_s
method: GET
Queries cost and spending data. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Cost Report Query"
description: "Queries cost and spending data. Used by AstraZeneca teams."
tags:
- pharmaceutical
- workday
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: get-cost_report_query
description: "Queries cost and spending data. Used by AstraZeneca teams."
inputParameters:
- name: cost_center
in: body
type: string
description: "The cost_center to look up."
call: "workday.get-cost_center"
with:
cost_center: "{{cost_center}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_cost_report_query
method: GET
Executes a read-only analytics query. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Database Query Runner"
description: "Executes a read-only analytics query. Used by AstraZeneca teams."
tags:
- pharmaceutical
- powerbi
capability:
exposes:
- type: mcp
namespace: powerbi
port: 8080
tools:
- name: get-database_query_runner
description: "Executes a read-only analytics query. Used by AstraZeneca teams."
inputParameters:
- name: sql_query
in: body
type: string
description: "The sql_query to look up."
call: "powerbi.get-sql_query"
with:
sql_query: "{{sql_query}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_database_query_run
method: GET
Checks status of a recent deployment. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Deployment Status Check"
description: "Checks status of a recent deployment. Used by AstraZeneca teams."
tags:
- pharmaceutical
- github
capability:
exposes:
- type: mcp
namespace: github
port: 8080
tools:
- name: get-deployment_status_check
description: "Checks status of a recent deployment. Used by AstraZeneca teams."
inputParameters:
- name: deployment_id
in: body
type: string
description: "The deployment_id to look up."
call: "github.get-deployment_id"
with:
deployment_id: "{{deployment_id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_deployment_status_
method: GET
Retrieves a document from knowledge management. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Document Retrieval"
description: "Retrieves a document from knowledge management. Used by AstraZeneca teams."
tags:
- pharmaceutical
- confluence
capability:
exposes:
- type: mcp
namespace: confluence
port: 8080
tools:
- name: get-document_retrieval
description: "Retrieves a document from knowledge management. Used by AstraZeneca teams."
inputParameters:
- name: document_id
in: body
type: string
description: "The document_id to look up."
call: "confluence.get-document_id"
with:
document_id: "{{document_id}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_document_retrieval
method: GET
Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance.
naftiko: "0.5"
info:
label: "Drug Safety Signal Detection Pipeline"
description: "Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance."
tags:
- safety
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: astrazeneca_drug_safety_signal_detection
description: "Orchestrate drug safety signal detection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Drug Safety Signal Detection Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
naftiko: "0.5"
info:
label: "Employee Onboarding Automation Pipeline"
description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
tags:
- hr
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: astrazeneca_employee_onboarding_automati
description: "Orchestrate employee onboarding automation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-workday
type: call
call: "workday.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-workday.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Employee Onboarding Automation Pipeline step 3 complete."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Queries metric values from a monitoring dashboard. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Metric Dashboard Query"
description: "Queries metric values from a monitoring dashboard. Used by AstraZeneca teams."
tags:
- pharmaceutical
- jira
capability:
exposes:
- type: mcp
namespace: jira
port: 8080
tools:
- name: get-metric_dashboard_query
description: "Queries metric values from a monitoring dashboard. Used by AstraZeneca teams."
inputParameters:
- name: metric_name
in: body
type: string
description: "The metric_name to look up."
call: "jira.get-metric_name"
with:
metric_name: "{{metric_name}}"
consumes:
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_jira_metric_dashbo
method: GET
Schedules equipment calibration, tracks completion, validates results, and creates maintenance records.
naftiko: "0.5"
info:
label: "Lab Equipment Calibration Pipeline"
description: "Schedules equipment calibration, tracks completion, validates results, and creates maintenance records."
tags:
- quality
- servicenow
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: astrazeneca_lab_equipment_calibration_pi
description: "Orchestrate lab equipment calibration pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Lab Equipment Calibration Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Searches application logs for matching patterns. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Log Search Query"
description: "Searches application logs for matching patterns. Used by AstraZeneca teams."
tags:
- pharmaceutical
- servicenow
capability:
exposes:
- type: mcp
namespace: servicenow
port: 8080
tools:
- name: get-log_search_query
description: "Searches application logs for matching patterns. Used by AstraZeneca teams."
inputParameters:
- name: search_query
in: body
type: string
description: "The search_query to look up."
call: "servicenow.get-search_query"
with:
search_query: "{{search_query}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_log_search_query
method: GET
Queries metric values from a monitoring dashboard. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Metric Dashboard Query"
description: "Queries metric values from a monitoring dashboard. Used by AstraZeneca teams."
tags:
- pharmaceutical
- jira
capability:
exposes:
- type: mcp
namespace: jira
port: 8080
tools:
- name: get-metric_dashboard_query
description: "Queries metric values from a monitoring dashboard. Used by AstraZeneca teams."
inputParameters:
- name: metric_name
in: body
type: string
description: "The metric_name to look up."
call: "jira.get-metric_name"
with:
metric_name: "{{metric_name}}"
consumes:
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_metric_dashboard_q
method: GET
Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams.
naftiko: "0.5"
info:
label: "Patient Recruitment Optimization Pipeline"
description: "Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams."
tags:
- clinical
- snowflake
- salesforce
- powerbi
capability:
exposes:
- type: mcp
namespace: clinical
port: 8080
tools:
- name: astrazeneca_patient_recruitment_optimiza
description: "Orchestrate patient recruitment optimization pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-salesforce
type: call
call: "salesforce.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-powerbi
type: call
call: "powerbi.create-resource"
with:
channel: "{{notification_channel}}"
text: "Patient Recruitment Optimization Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
Checks the current status of a project. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Project Status Check"
description: "Checks the current status of a project. Used by AstraZeneca teams."
tags:
- pharmaceutical
- datadog
capability:
exposes:
- type: mcp
namespace: datadog
port: 8080
tools:
- name: get-project_status_check
description: "Checks the current status of a project. Used by AstraZeneca teams."
inputParameters:
- name: project_key
in: body
type: string
description: "The project_key to look up."
call: "datadog.get-project_key"
with:
project_key: "{{project_key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_project_status_che
method: GET
Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs.
naftiko: "0.5"
info:
label: "Regulatory Submission Tracker Pipeline"
description: "Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs."
tags:
- regulatory
- jira
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: regulatory
port: 8080
tools:
- name: astrazeneca_regulatory_submission_tracke
description: "Orchestrate regulatory submission tracker pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-jira
type: call
call: "jira.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-jira.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Regulatory Submission Tracker Pipeline step 3 complete."
consumes:
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves code repository information. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Repository Info Lookup"
description: "Retrieves code repository information. Used by AstraZeneca teams."
tags:
- pharmaceutical
- pagerduty
capability:
exposes:
- type: mcp
namespace: pagerduty
port: 8080
tools:
- name: get-repository_info_lookup
description: "Retrieves code repository information. Used by AstraZeneca teams."
inputParameters:
- name: repo_name
in: body
type: string
description: "The repo_name to look up."
call: "pagerduty.get-repo_name"
with:
repo_name: "{{repo_name}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_repository_info_lo
method: GET
Checks the health status of a monitored service. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Service Health Check"
description: "Checks the health status of a monitored service. Used by AstraZeneca teams."
tags:
- pharmaceutical
- salesforce
capability:
exposes:
- type: mcp
namespace: salesforce
port: 8080
tools:
- name: get-service_health_check
description: "Checks the health status of a monitored service. Used by AstraZeneca teams."
inputParameters:
- name: health_target
in: body
type: string
description: "The health_target to look up."
call: "salesforce.get-health_target"
with:
health_target: "{{health_target}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_salesforce_service
method: GET
Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
naftiko: "0.5"
info:
label: "Security Incident Response Pipeline"
description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
tags:
- security
- splunk
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: astrazeneca_security_incident_response_p
description: "Orchestrate security incident response pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-splunk
type: call
call: "splunk.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-splunk.result}}"
- name: create-pagerduty
type: call
call: "pagerduty.create-resource"
with:
channel: "{{notification_channel}}"
text: "Security Incident Response Pipeline step 3 complete."
consumes:
- type: http
namespace: splunk
baseUri: "https://astrazeneca-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
Retrieves vulnerability scan results. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Security Scan Results"
description: "Retrieves vulnerability scan results. Used by AstraZeneca teams."
tags:
- pharmaceutical
- slack
capability:
exposes:
- type: mcp
namespace: slack
port: 8080
tools:
- name: get-security_scan_results
description: "Retrieves vulnerability scan results. Used by AstraZeneca teams."
inputParameters:
- name: scan_id
in: body
type: string
description: "The scan_id to look up."
call: "slack.get-scan_id"
with:
scan_id: "{{scan_id}}"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_security_scan_resu
method: GET
Checks the health status of a monitored service. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Service Health Check"
description: "Checks the health status of a monitored service. Used by AstraZeneca teams."
tags:
- pharmaceutical
- salesforce
capability:
exposes:
- type: mcp
namespace: salesforce
port: 8080
tools:
- name: get-service_health_check
description: "Checks the health status of a monitored service. Used by AstraZeneca teams."
inputParameters:
- name: health_target
in: body
type: string
description: "The health_target to look up."
call: "salesforce.get-health_target"
with:
health_target: "{{health_target}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_service_health_che
method: GET
Searches application logs for matching patterns. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Log Search Query"
description: "Searches application logs for matching patterns. Used by AstraZeneca teams."
tags:
- pharmaceutical
- servicenow
capability:
exposes:
- type: mcp
namespace: servicenow
port: 8080
tools:
- name: get-log_search_query
description: "Searches application logs for matching patterns. Used by AstraZeneca teams."
inputParameters:
- name: search_query
in: body
type: string
description: "The search_query to look up."
call: "servicenow.get-search_query"
with:
search_query: "{{search_query}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_servicenow_log_sea
method: GET
Retrieves the details of a support ticket. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca Ticket Details Lookup"
description: "Retrieves the details of a support ticket. Used by AstraZeneca teams."
tags:
- pharmaceutical
- splunk
capability:
exposes:
- type: mcp
namespace: splunk
port: 8080
tools:
- name: get-ticket_details_lookup
description: "Retrieves the details of a support ticket. Used by AstraZeneca teams."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The ticket_id to look up."
call: "splunk.get-ticket_id"
with:
ticket_id: "{{ticket_id}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://astrazeneca-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_ticket_details_loo
method: GET
Retrieves user account details from the directory. Used by AstraZeneca teams.
naftiko: "0.5"
info:
label: "AstraZeneca User Account Lookup"
description: "Retrieves user account details from the directory. Used by AstraZeneca teams."
tags:
- pharmaceutical
- snowflake
capability:
exposes:
- type: mcp
namespace: snowflake
port: 8080
tools:
- name: get-user_account_lookup
description: "Retrieves user account details from the directory. Used by AstraZeneca teams."
inputParameters:
- name: user_id
in: body
type: string
description: "The user_id to look up."
call: "snowflake.get-user_id"
with:
user_id: "{{user_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: astrazeneca_user_account_looku
method: GET
Checks the status of a deployment on Azure Kubernetes Service, returning replica count, available replicas, pod health, and image version for DevOps teams.
naftiko: "0.5"
info:
label: "Azure Kubernetes Deployment Status"
description: "Checks the status of a deployment on Azure Kubernetes Service, returning replica count, available replicas, pod health, and image version for DevOps teams."
tags:
- devops
- infrastructure
- azure-kubernetes-service
capability:
exposes:
- type: mcp
namespace: k8s-deployments
port: 8080
tools:
- name: get-deployment-status
description: "Check an AKS deployment status, log health metrics in Datadog, and notify the platform engineering team via Slack if replicas are degraded."
inputParameters:
- name: cluster_name
in: body
type: string
description: "The AKS cluster name."
- name: namespace
in: body
type: string
description: "The Kubernetes namespace."
- name: deployment_name
in: body
type: string
description: "The deployment name."
steps:
- name: fetch-deployment
type: call
call: "aks.get-deployment"
with:
cluster_name: "{{cluster_name}}"
namespace: "{{namespace}}"
deployment_name: "{{deployment_name}}"
- name: log-health
type: call
call: "datadog.post-event"
with:
title: "AKS Deployment Check: {{deployment_name}}"
text: "Cluster: {{cluster_name}}, Namespace: {{namespace}}. Replicas: {{fetch-deployment.status.availableReplicas}}/{{fetch-deployment.spec.replicas}}. Image: {{fetch-deployment.spec.template.spec.containers[0].image}}"
tags: "cluster:{{cluster_name}},namespace:{{namespace}}"
- name: notify-platform-eng
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "Deployment {{deployment_name}} on {{cluster_name}}/{{namespace}}: {{fetch-deployment.status.availableReplicas}}/{{fetch-deployment.spec.replicas}} replicas. Image: {{fetch-deployment.spec.template.spec.containers[0].image}}"
consumes:
- type: http
namespace: aks
baseUri: "https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/rg-astrazeneca-aks/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: deployments
path: "/apis/apps/v1/namespaces/{{namespace}}/deployments/{{deployment_name}}"
inputParameters:
- name: namespace
in: path
- name: deployment_name
in: path
operations:
- name: get-deployment
method: GET
Ingests biomarker assay results from a lab information system, validates against expected ranges, stores in the Snowflake biomarker warehouse, logs anomalies in Jira, and notifies the translational science team via Slack.
naftiko: "0.5"
info:
label: "Biomarker Data Ingestion Pipeline"
description: "Ingests biomarker assay results from a lab information system, validates against expected ranges, stores in the Snowflake biomarker warehouse, logs anomalies in Jira, and notifies the translational science team via Slack."
tags:
- research
- biomarkers
- translational-science
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: biomarker-ingestion
port: 8080
tools:
- name: ingest-biomarker-data
description: "Ingest and validate biomarker assay results, store in warehouse, and flag anomalies."
inputParameters:
- name: assay_run_id
in: body
type: string
description: "The lab assay run identifier."
- name: study_id
in: body
type: string
description: "The clinical study protocol number."
- name: biomarker_panel
in: body
type: string
description: "The biomarker panel name."
steps:
- name: get-assay-results
type: call
call: "lims.get-assay-run"
with:
run_id: "{{assay_run_id}}"
- name: store-results
type: call
call: "snowflake.insert-record"
with:
database: "BIOMARKERS"
schema: "ASSAY_DATA"
table: "RESULTS"
data:
assay_run_id: "{{assay_run_id}}"
study_id: "{{study_id}}"
panel: "{{biomarker_panel}}"
sample_count: "{{get-assay-results.sample_count}}"
pass_rate: "{{get-assay-results.pass_rate}}"
- name: flag-anomalies
type: call
call: "jira.create-issue"
with:
project_key: "BIOM"
summary: "Biomarker QC Review: {{biomarker_panel}} run {{assay_run_id}} ({{get-assay-results.pass_rate}}% pass rate)"
issue_type: "Task"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "translational-science"
text: "Biomarker data ingested: {{biomarker_panel}} for study {{study_id}}. Run {{assay_run_id}}: {{get-assay-results.sample_count}} samples, {{get-assay-results.pass_rate}}% pass rate. Review: {{flag-anomalies.key}}"
consumes:
- type: http
namespace: lims
baseUri: "https://lims.astrazeneca.com/api/v2"
authentication:
type: bearer
token: "$secrets.lims_token"
resources:
- name: assay-runs
path: "/assay-runs/{{run_id}}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-assay-run
method: GET
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a clinical document from Box by file ID, returning file name, size, shared link, last modified date, and parent folder path.
naftiko: "0.5"
info:
label: "Box Clinical Document Retrieval"
description: "Retrieves a clinical document from Box by file ID, returning file name, size, shared link, last modified date, and parent folder path."
tags:
- document-management
- clinical-trials
- box
capability:
exposes:
- type: mcp
namespace: clinical-docs-box
port: 8080
tools:
- name: get-box-file
description: "Look up a Box file by ID. Returns file name, size, shared link, modified date, and folder path."
inputParameters:
- name: file_id
in: body
type: string
description: "The Box file ID."
call: "box.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: string
mapping: "$.size"
- name: shared_link
type: string
mapping: "$.shared_link.url"
- name: modified_at
type: string
mapping: "$.modified_at"
- name: folder_path
type: string
mapping: "$.path_collection.entries"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.
naftiko: "0.5"
info:
label: "Capacity Planning Forecast Pipeline"
description: "Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports."
tags:
- infrastructure
- grafana
- snowflake
- powerbi
capability:
exposes:
- type: mcp
namespace: infrastructure
port: 8080
tools:
- name: capacity_planning_forecast_pipeline
description: "Orchestrate capacity planning forecast pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-grafana
type: call
call: "grafana.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-snowflake
type: call
call: "snowflake.process-resource"
with:
data: "{{get-grafana.result}}"
- name: create-powerbi
type: call
call: "powerbi.create-resource"
with:
channel: "{{notification_channel}}"
text: "Capacity Planning Forecast Pipeline step 3 complete."
consumes:
- type: http
namespace: grafana
baseUri: "https://astrazeneca-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-op
method: POST
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.
naftiko: "0.5"
info:
label: "Change Management Approval Pipeline"
description: "Validates change requests, routes for approval, schedules implementation, and notifies stakeholders."
tags:
- itsm
- servicenow
- jira
- slack
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: change_management_approval_pipeline
description: "Orchestrate change management approval pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Change Management Approval Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
When a data query is raised in Oracle Clinical, creates a Jira ticket for the clinical data manager, attaches the query details, and sends a Slack notification to the data management channel.
naftiko: "0.5"
info:
label: "Clinical Data Query Resolution"
description: "When a data query is raised in Oracle Clinical, creates a Jira ticket for the clinical data manager, attaches the query details, and sends a Slack notification to the data management channel."
tags:
- clinical-trials
- data-management
- oracle
- jira
- slack
capability:
exposes:
- type: mcp
namespace: clinical-data-queries
port: 8080
tools:
- name: escalate-data-query
description: "Escalate an Oracle Clinical data query to Jira for resolution tracking and notify the data management team via Slack."
inputParameters:
- name: query_id
in: body
type: string
description: "The Oracle Clinical data query identifier."
- name: study_id
in: body
type: string
description: "The study protocol number."
- name: site_number
in: body
type: string
description: "The investigator site number."
steps:
- name: get-query-details
type: call
call: "oracle-clinical.get-data-query"
with:
query_id: "{{query_id}}"
- name: create-jira-ticket
type: call
call: "jira.create-issue"
with:
project_key: "CDM"
summary: "Data Query {{query_id}} - Site {{site_number}} - {{get-query-details.field_name}}"
issue_type: "Task"
description: "Query raised on {{get-query-details.field_name}} for subject {{get-query-details.subject_id}} at site {{site_number}}. Details: {{get-query-details.query_text}}"
- name: notify-data-managers
type: call
call: "slack.post-message"
with:
channel: "clinical-data-mgmt"
text: "Data query escalated for study {{study_id}}, site {{site_number}}: {{get-query-details.query_text}}. Jira: {{create-jira-ticket.key}}"
consumes:
- type: http
namespace: oracle-clinical
baseUri: "https://astrazeneca-clinical.oracle.com/ocs/api/v2"
authentication:
type: bearer
token: "$secrets.oracle_clinical_token"
resources:
- name: data-queries
path: "/queries/{{query_id}}"
inputParameters:
- name: query_id
in: path
operations:
- name: get-data-query
method: GET
- type: http
namespace: jira
baseUri: "https://astrazeneca.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates an Individual Case Safety Report (ICSR) by pulling adverse event data from the safety database, formatting it as an E2B R3 XML, uploading to the health authority gateway, and logging completion in ServiceNow.
naftiko: "0.5"
info:
label: "Clinical Safety Report Generation"
description: "Generates an Individual Case Safety Report (ICSR) by pulling adverse event data from the safety database, formatting it as an E2B R3 XML, uploading to the health authority gateway, and logging completion in ServiceNow."
tags:
- pharmacovigilance
- drug-safety
- regulatory
- servicenow
capability:
exposes:
- type: mcp
namespace: pv-reporting
port: 8080
tools:
- name: generate-icsr
description: "Generate and submit an ICSR (E2B R3) to the health authority gateway with audit logging."
inputParameters:
- name: case_number
in: body
type: string
description: "The safety database case number."
- name: target_authority
in: body
type: string
description: "Target health authority (e.g., FDA, EMA)."
steps:
- name: get-case-data
type: call
call: "safety-db.get-case"
with:
case_number: "{{case_number}}"
- name: generate-e2b
type: call
call: "safety-db.export-e2b"
with:
case_number: "{{case_number}}"
format: "E2B_R3"
- name: submit-to-gateway
type: call
call: "ectd-gateway.submit-icsr"
with:
e2b_xml_url: "{{generate-e2b.download_url}}"
authority: "{{target_authority}}"
- name: log-submission
type: call
call: "servicenow.create-record"
with:
table: "u_icsr_submissions"
case_number: "{{case_number}}"
authority: "{{target_authority}}"
gateway_ack: "{{submit-to-gateway.acknowledgment_id}}"
status: "submitted"
consumes:
- type: http
namespace: safety-db
baseUri: "https://astrazeneca-safety.oracle.com/argus/api/v1"
authentication:
type: bearer
token: "$secrets.argus_token"
resources:
- name: cases
path: "/cases/{{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-case
method: GET
- name: exports
path: "/cases/{{case_number}}/export"
inputParameters:
- name: case_number
in: path
operations:
- name: export-e2b
method: POST
- type: http
namespace: ectd-gateway
baseUri: "https://gateway.astrazeneca.com/regulatory/api/v1"
authentication:
type: bearer
token: "$secrets.ectd_gateway_token"
resources:
- name: icsr-submissions
path: "/icsr"
operations:
- name: submit-icsr
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Orchestrates clinical site activation by verifying site readiness in Oracle Clinical, creating a SharePoint site binder, provisioning site access in Azure Active Directory, and notifying the clinical operations team.
naftiko: "0.5"
info:
label: "Clinical Site Activation Orchestrator"
description: "Orchestrates clinical site activation by verifying site readiness in Oracle Clinical, creating a SharePoint site binder, provisioning site access in Azure Active Directory, and notifying the clinical operations team."
tags:
- clinical-trials
- site-management
- oracle
- sharepoint
- azure-active-directory
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-site-activation
port: 8080
tools:
- name: activate-site
description: "Orchestrate site activation: verify readiness, create document binder, provision access, and notify operations."
inputParameters:
- name: site_id
in: body
type: string
description: "The clinical site identifier."
- name: study_id
in: body
type: string
description: "The study protocol number."
- name: principal_investigator
in: body
type: string
description: "Name of the principal investigator."
steps:
- name: check-readiness
type: call
call: "oracle-clinical.get-site-status"
with:
site_id: "{{site_id}}"
study_id: "{{study_id}}"
- name: create-site-binder
type: call
call: "sharepoint.create-folder"
with:
site_id: "clinical_site_binders"
folder_path: "{{study_id}}/Site_{{site_id}}_{{principal_investigator}}"
- name: provision-site-access
type: call
call: "azure-ad.create-group"
with:
display_name: "CLIN-{{study_id}}-SITE-{{site_id}}"
description: "Access group for site {{site_id}} on study {{study_id}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "clinical_operations"
text: "Site {{site_id}} activated for study {{study_id}} (PI: {{principal_investigator}}). Readiness: {{check-readiness.status}}. Binder: {{create-site-binder.url}}. AD Group: {{provision-site-access.group_id}}"
consumes:
- type: http
namespace: oracle-clinical
baseUri: "https://astrazeneca-clinical.oracle.com/ocs/api/v2"
authentication:
type: bearer
token: "$secrets.oracle_clinical_token"
resources:
- name: sites
path: "/studies/{{study_id}}/sites/{{site_id}}"
inputParameters:
- name: study_id
in: path
- name: site_id
in: path
operations:
- name: get-site-status
method: GET
- 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: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: groups
path: "/groups"
operations:
- name: create-group
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers.
naftiko: "0.5"
info:
label: "Clinical Trial Data Pipeline"
description: "Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers."
tags:
- clinical
- snowflake
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: clinical
port: 8080
tools:
- name: clinical_trial_data_pipeline
description: "Orchestrate clinical trial data pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Clinical Trial Data Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
On new clinical trial protocol creation in Oracle Clinical, provisions a SharePoint document library for trial master file storage, creates a Jira epic for study milestones, and notifies the study team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Clinical Trial Protocol Orchestrator"
description: "On new clinical trial protocol creation in Oracle Clinical, provisions a SharePoint document library for trial master file storage, creates a Jira epic for study milestones, and notifies the study team via Microsoft Teams."
tags:
- clinical-trials
- protocol-management
- oracle
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-trial-setup
port: 8080
tools:
- name: provision-trial
description: "Given an Oracle Clinical protocol ID, orchestrate trial document provisioning, milestone tracking setup, and team notification."
inputParameters:
- name: protocol_id
in: body
type: string
description: "The Oracle Clinical protocol identifier."
- name: study_title
in: body
type: string
description: "The human-readable study title."
- name: therapeutic_area
in: body
type: string
description: "The therapeutic area (e.g., oncology, cardiovascular)."
steps:
- name: get-protocol
type: call
call: "oracle-clinical.get-protocol"
with:
protocol_id: "{{protocol_id}}"
- name: create-tmf-library
type: call
call: "sharepoint.create-folder"
with:
site_id: "clinical_tmf_site"
folder_path: "TMF/{{study_title}}_{{protocol_id}}"
- name: create-study-epic
type: call
call: "jira.create-issue"
with:
project_key: "CLIN"
summary: "Study Milestones: {{study_title}}"
issue_type: "Epic"
description: "Tracking milestones for {{study_title}} in {{therapeutic_area}}."
- name: notify-study-team
type: call
call: "msteams.send-message"
with:
channel_id: "{{therapeutic_area}}_trials"
text: "New trial provisioned: {{study_title}} ({{protocol_id}}). TMF at {{create-tmf-library.url}}. Track milestones at {{create-study-epic.key}}."
consumes:
- type: http
namespace: oracle-clinical
baseUri: "https://astrazeneca-clinical.oracle.com/ocs/api/v2"
authentication:
type: bearer
token: "$secrets.oracle_clinical_token"
resources:
- name: protocols
path: "/protocols/{{protocol_id}}"
inputParameters:
- name: protocol_id
in: path
operations:
- name: get-protocol
method: GET
- 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://astrazeneca.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
Sets up patient randomization for a clinical trial by configuring the randomization schema in Oracle Clinical, creating stratification rules, provisioning an emergency unblinding endpoint, and documenting the setup in Confluence.
naftiko: "0.5"
info:
label: "Clinical Trial Randomization Setup"
description: "Sets up patient randomization for a clinical trial by configuring the randomization schema in Oracle Clinical, creating stratification rules, provisioning an emergency unblinding endpoint, and documenting the setup in Confluence."
tags:
- clinical-trials
- randomization
- oracle
- confluence
capability:
exposes:
- type: mcp
namespace: trial-randomization
port: 8080
tools:
- name: setup-randomization
description: "Configure clinical trial randomization schema with stratification rules and emergency unblinding, then document in Confluence."
inputParameters:
- name: study_id
in: body
type: string
description: "The study protocol number."
- name: randomization_ratio
in: body
type: string
description: "Treatment arm ratio (e.g., 1:1, 2:1)."
- name: stratification_factors
in: body
type: string
description: "Comma-separated stratification factors."
- name: block_size
in: body
type: string
description: "Randomization block size."
steps:
- name: create-schema
type: call
call: "oracle-clinical.create-randomization"
with:
study_id: "{{study_id}}"
ratio: "{{randomization_ratio}}"
strat_factors: "{{stratification_factors}}"
block_size: "{{block_size}}"
- name: provision-unblinding
type: call
call: "oracle-clinical.create-unblinding-endpoint"
with:
study_id: "{{study_id}}"
schema_id: "{{create-schema.schema_id}}"
- name: document-setup
type: call
call: "confluence.create-page"
with:
space_key: "CLIN"
title: "Randomization Setup - {{study_id}}"
body: "Study: {{study_id}}\nRatio: {{randomization_ratio}}\nStratification: {{stratification_factors}}\nBlock Size: {{block_size}}\nSchema ID: {{create-schema.schema_id}}\nUnblinding Endpoint: {{provision-unblinding.endpoint_url}}"
consumes:
- type: http
namespace: oracle-clinical
baseUri: "https://astrazeneca-clinical.oracle.com/ocs/api/v2"
authentication:
type: bearer
token: "$secrets.oracle_clinical_token"
resources:
- name: randomization
path: "/studies/{{study_id}}/randomization"
inputParameters:
- name: study_id
in: path
operations:
- name: create-randomization
method: POST
- name: unblinding
path: "/studies/{{study_id}}/unblinding"
inputParameters:
- name: study_id
in: path
operations:
- name: create-unblinding-endpoint
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.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
Queries IoT temperature sensor data for a drug shipment, checks for excursions against product thresholds, logs deviations in ServiceNow, and alerts the supply chain quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Monitoring"
description: "Queries IoT temperature sensor data for a drug shipment, checks for excursions against product thresholds, logs deviations in ServiceNow, and alerts the supply chain quality team via Microsoft Teams."
tags:
- supply-chain
- cold-chain
- quality
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-chain-monitoring
port: 8080
tools:
- name: check-temperature-excursion
description: "Check a drug shipment for cold chain temperature excursions and trigger deviation workflow if thresholds exceeded."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The shipment tracking identifier."
- name: product_sku
in: body
type: string
description: "The drug product SKU."
- name: temp_threshold_high
in: body
type: string
description: "Maximum acceptable temperature in Celsius."
- name: temp_threshold_low
in: body
type: string
description: "Minimum acceptable temperature in Celsius."
steps:
- name: get-sensor-data
type: call
call: "iot-platform.get-readings"
with:
device_group: "{{shipment_id}}"
metric: "temperature"
- name: log-excursion
type: call
call: "servicenow.create-record"
with:
table: "u_cold_chain_excursions"
shipment_id: "{{shipment_id}}"
product_sku: "{{product_sku}}"
max_temp_recorded: "{{get-sensor-data.max_value}}"
min_temp_recorded: "{{get-sensor-data.min_value}}"
threshold_high: "{{temp_threshold_high}}"
threshold_low: "{{temp_threshold_low}}"
- name: alert-quality
type: call
call: "msteams.send-message"
with:
channel_id: "supply_chain_quality"
text: "Cold chain alert for shipment {{shipment_id}} ({{product_sku}}). Temp range: {{get-sensor-data.min_value}}C - {{get-sensor-data.max_value}}C. Thresholds: {{temp_threshold_low}}C - {{temp_threshold_high}}C. Incident: {{log-excursion.sys_id}}"
consumes:
- type: http
namespace: iot-platform
baseUri: "https://astrazeneca-iot.azure-devices.net/api/v1"
authentication:
type: bearer
token: "$secrets.iot_platform_token"
resources:
- name: readings
path: "/device-groups/{{device_group}}/readings?metric={{metric}}"
inputParameters:
- name: device_group
in: path
- name: metric
in: query
operations:
- name: get-readings
method: GET
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
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
Collects audit events, validates against policies, generates compliance reports, and notifies auditors.
naftiko: "0.5"
info:
label: "Compliance Audit Trail Pipeline"
description: "Collects audit events, validates against policies, generates compliance reports, and notifies auditors."
tags:
- compliance
- elasticsearch
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: compliance_audit_trail_pipeline
description: "Orchestrate compliance audit trail pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-elasticsearch
type: call
call: "elasticsearch.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-elasticsearch.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Compliance Audit Trail Pipeline step 3 complete."
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://astrazeneca-es.com:9200"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: elasticsearch-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
When a new GxP role assignment is made in Workday, looks up required training in the LMS, assigns courses to the employee, creates a compliance tracking record in ServiceNow, and notifies the employee via Microsoft Teams.
naftiko: "0.5"
info:
label: "Compliance Training Assignment Orchestrator"
description: "When a new GxP role assignment is made in Workday, looks up required training in the LMS, assigns courses to the employee, creates a compliance tracking record in ServiceNow, and notifies the employee via Microsoft Teams."
tags:
- compliance
- training
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-training
port: 8080
tools:
- name: assign-gxp-training
description: "On GxP role change, assign required training, create compliance record, and notify the employee."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: new_role
in: body
type: string
description: "The new GxP role being assigned."
- name: effective_date
in: body
type: string
description: "Role effective date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: get-required-training
type: call
call: "lms.get-role-curriculum"
with:
role: "{{new_role}}"
- name: assign-courses
type: call
call: "lms.assign-curriculum"
with:
learner_email: "{{get-employee.work_email}}"
curriculum_id: "{{get-required-training.curriculum_id}}"
due_date: "{{effective_date}}"
- name: create-compliance-record
type: call
call: "servicenow.create-record"
with:
table: "u_gxp_training_compliance"
employee_name: "{{get-employee.full_name}}"
role: "{{new_role}}"
curriculum: "{{get-required-training.curriculum_name}}"
due_date: "{{effective_date}}"
- name: notify-employee
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Hi {{get-employee.first_name}}, you have been assigned GxP training for your new role ({{new_role}}). Please complete {{get-required-training.curriculum_name}} by {{effective_date}}. Tracking: {{create-compliance-record.sys_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca"
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: lms
baseUri: "https://astrazeneca-lms.csod.com/services/api/x/v1"
authentication:
type: bearer
token: "$secrets.lms_token"
resources:
- name: curricula
path: "/curricula/by-role/{{role}}"
inputParameters:
- name: role
in: path
operations:
- name: get-role-curriculum
method: GET
- name: assignments
path: "/assignments"
operations:
- name: assign-curriculum
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
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 Confluence for a knowledge base article by title or keyword, returning the page title, space, last modified date, and content excerpt for R&D knowledge sharing.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Article Retrieval"
description: "Searches Confluence for a knowledge base article by title or keyword, returning the page title, space, last modified date, and content excerpt for R&D knowledge sharing."
tags:
- knowledge-management
- research
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-articles
description: "Search AstraZeneca Confluence for knowledge base articles by keyword. Returns matching page titles, spaces, and excerpts."
inputParameters:
- name: search_query
in: body
type: string
description: "The search keyword or phrase."
call: "confluence.search-content"
with:
cql: "type=page AND text~\"{{search_query}}\""
outputParameters:
- name: results
type: string
mapping: "$.results"
- name: total_size
type: string
mapping: "$.totalSize"
consumes:
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/content/search?cql={{cql}}"
inputParameters:
- name: cql
in: query
operations:
- name: search-content
method: GET
Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.
naftiko: "0.5"
info:
label: "Cost Center Budget Tracking Pipeline"
description: "Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders."
tags:
- finance
- snowflake
- powerbi
- slack
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: cost_center_budget_tracking
description: "Orchestrate cost center budget tracking pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-powerbi
type: call
call: "powerbi.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Cost Center Budget Tracking Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.
naftiko: "0.5"
info:
label: "Customer 360 Data Sync Pipeline"
description: "Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM."
tags:
- data
- snowflake
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: data
port: 8080
tools:
- name: customer_360_data_sync_pipeline
description: "Orchestrate customer 360 data sync pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-salesforce
type: call
call: "salesforce.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Customer 360 Data Sync Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.
naftiko: "0.5"
info:
label: "Data Quality Monitoring Pipeline"
description: "Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards."
tags:
- data-quality
- snowflake
- jira
- grafana
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: data_quality_monitoring_pipeline
description: "Orchestrate data quality monitoring pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-grafana
type: call
call: "grafana.create-resource"
with:
channel: "{{notification_channel}}"
text: "Data Quality Monitoring Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: grafana
baseUri: "https://astrazeneca-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-op
method: POST
Queries the Databricks model registry for a machine learning model by name, returning latest version, stage, metrics, and deployment status for R&D AI/ML pipelines.
naftiko: "0.5"
info:
label: "Databricks ML Model Registry Lookup"
description: "Queries the Databricks model registry for a machine learning model by name, returning latest version, stage, metrics, and deployment status for R&D AI/ML pipelines."
tags:
- research
- machine-learning
- databricks
capability:
exposes:
- type: mcp
namespace: ml-model-registry
port: 8080
tools:
- name: get-model-info
description: "Look up a registered ML model in Databricks, log the model status in Snowflake for tracking, and notify the data science team via Slack."
inputParameters:
- name: model_name
in: body
type: string
description: "The registered model name in Databricks."
- name: project_code
in: body
type: string
description: "The R&D project code associated with this model."
steps:
- name: fetch-model
type: call
call: "databricks.get-model"
with:
model_name: "{{model_name}}"
- name: log-model-status
type: call
call: "snowflake.insert-record"
with:
database: "ML_REGISTRY"
schema: "MODEL_TRACKING"
table: "MODEL_STATUS_LOG"
data:
model_name: "{{model_name}}"
version: "{{fetch-model.latest_versions[0].version}}"
stage: "{{fetch-model.latest_versions[0].current_stage}}"
project_code: "{{project_code}}"
- name: notify-data-science
type: call
call: "slack.post-message"
with:
channel: "data-science"
text: "Model {{model_name}} (project {{project_code}}): v{{fetch-model.latest_versions[0].version}}, stage={{fetch-model.latest_versions[0].current_stage}}."
consumes:
- type: http
namespace: databricks
baseUri: "https://astrazeneca.cloud.databricks.com/api/2.0"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: models
path: "/mlflow/registered-models/get?name={{model_name}}"
inputParameters:
- name: model_name
in: query
operations:
- name: get-model
method: GET
Queries Datadog for the health status of a specific host or service, returning CPU, memory, uptime, and active alerts for IT operations monitoring.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Check"
description: "Queries Datadog for the health status of a specific host or service, returning CPU, memory, uptime, and active alerts for IT operations monitoring."
tags:
- it-operations
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-host-health
description: "Retrieve host health metrics from Datadog, create a ServiceNow incident if alerts are active, and notify the infrastructure team via Microsoft Teams."
inputParameters:
- name: host_name
in: body
type: string
description: "The hostname to check in Datadog."
- name: alert_threshold
in: body
type: string
description: "Number of active alerts that trigger incident creation."
steps:
- name: fetch-health
type: call
call: "datadog.get-host-info"
with:
host_name: "{{host_name}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Host alert: {{host_name}} - {{fetch-health.active_alerts}} active alerts"
category: "infrastructure"
assigned_group: "IT_Infrastructure"
description: "CPU: {{fetch-health.metrics.cpu}}%, Memory: {{fetch-health.metrics.memory}}%, Active alerts: {{fetch-health.active_alerts}}"
- name: notify-infra
type: call
call: "msteams.send-message"
with:
channel_id: "infrastructure_ops"
text: "Host {{host_name}} health check: CPU={{fetch-health.metrics.cpu}}%, Mem={{fetch-health.metrics.memory}}%. Alerts: {{fetch-health.active_alerts}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: hosts
path: "/hosts?filter={{host_name}}"
inputParameters:
- name: host_name
in: query
operations:
- name: get-host-info
method: GET
Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.
naftiko: "0.5"
info:
label: "Disaster Recovery Readiness Pipeline"
description: "Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership."
tags:
- disaster-recovery
- servicenow
- confluence
- pagerduty
capability:
exposes:
- type: mcp
namespace: disaster-recovery
port: 8080
tools:
- name: disaster_recovery_readiness_pipeline
description: "Orchestrate disaster recovery readiness pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-pagerduty
type: call
call: "pagerduty.create-resource"
with:
channel: "{{notification_channel}}"
text: "Disaster Recovery Readiness Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
Checks for potential drug-drug interactions by querying an internal drug interaction database, cross-references with the safety database for related adverse events, and alerts the pharmacovigilance team via Microsoft Teams if high-risk interactions are found.
naftiko: "0.5"
info:
label: "Drug Interaction Check Pipeline"
description: "Checks for potential drug-drug interactions by querying an internal drug interaction database, cross-references with the safety database for related adverse events, and alerts the pharmacovigilance team via Microsoft Teams if high-risk interactions are found."
tags:
- pharmacovigilance
- drug-safety
- drug-interactions
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: drug-interaction-check
port: 8080
tools:
- name: check-interactions
description: "Check drug-drug interactions, cross-reference with safety data, and alert PV team on high-risk findings."
inputParameters:
- name: drug_a
in: body
type: string
description: "First drug name or active ingredient."
- name: drug_b
in: body
type: string
description: "Second drug name or active ingredient."
steps:
- name: query-interactions
type: call
call: "ddi-db.check-interaction"
with:
drug1: "{{drug_a}}"
drug2: "{{drug_b}}"
- name: get-safety-cases
type: call
call: "safety-db.search-cases"
with:
drugs: "{{drug_a}},{{drug_b}}"
interaction_flag: "true"
- name: alert-pv-team
type: call
call: "msteams.send-message"
with:
channel_id: "pharmacovigilance"
text: "Drug interaction check: {{drug_a}} + {{drug_b}}. Severity: {{query-interactions.severity}}. Mechanism: {{query-interactions.mechanism}}. Related safety cases: {{get-safety-cases.case_count}}."
consumes:
- type: http
namespace: ddi-db
baseUri: "https://ddi.astrazeneca.com/api/v1"
authentication:
type: bearer
token: "$secrets.ddi_db_token"
resources:
- name: interactions
path: "/interactions/check"
operations:
- name: check-interaction
method: POST
- type: http
namespace: safety-db
baseUri: "https://astrazeneca-safety.oracle.com/argus/api/v1"
authentication:
type: bearer
token: "$secrets.argus_token"
resources:
- name: cases-search
path: "/cases/search"
operations:
- name: search-cases
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 label update is approved, retrieves the updated labeling document from Veeva Vault, submits the supplement to the regulatory gateway, updates the product master in SAP, and notifies the regulatory and commercial teams via Slack.
naftiko: "0.5"
info:
label: "Drug Label Update Orchestrator"
description: "When a label update is approved, retrieves the updated labeling document from Veeva Vault, submits the supplement to the regulatory gateway, updates the product master in SAP, and notifies the regulatory and commercial teams via Slack."
tags:
- regulatory
- labeling
- veeva
- sap
- slack
capability:
exposes:
- type: mcp
namespace: label-updates
port: 8080
tools:
- name: process-label-update
description: "Orchestrate a drug label update: retrieve approved label, submit regulatory supplement, update SAP product master, and notify teams."
inputParameters:
- name: document_id
in: body
type: string
description: "The Veeva Vault document ID for the approved label."
- name: product_code
in: body
type: string
description: "The SAP material number for the drug product."
- name: market
in: body
type: string
description: "The target market (e.g., US, EU, JP)."
steps:
- name: get-label-doc
type: call
call: "veeva.get-document"
with:
document_id: "{{document_id}}"
- name: submit-supplement
type: call
call: "ectd-gateway.submit-package"
with:
package_url: "{{get-label-doc.download_url}}"
authority: "{{market}}"
submission_type: "labeling-supplement"
- name: update-product-master
type: call
call: "sap.update-material"
with:
material_number: "{{product_code}}"
label_version: "{{get-label-doc.version}}"
label_effective_date: "{{get-label-doc.effective_date}}"
- name: notify-teams
type: call
call: "slack.post-message"
with:
channel: "regulatory-commercial"
text: "Label update processed for {{product_code}} in {{market}}. Document: {{document_id}} v{{get-label-doc.version}}. Gateway tracking: {{submit-supplement.tracking_id}}. SAP updated."
consumes:
- type: http
namespace: veeva
baseUri: "https://astrazeneca.veevavault.com/api/v24.1"
authentication:
type: bearer
token: "$secrets.veeva_session_id"
resources:
- name: documents
path: "/objects/documents/{{document_id}}"
inputParameters:
- name: document_id
in: path
operations:
- name: get-document
method: GET
- type: http
namespace: ectd-gateway
baseUri: "https://gateway.astrazeneca.com/regulatory/api/v1"
authentication:
type: bearer
token: "$secrets.ectd_gateway_token"
resources:
- name: submissions
path: "/submissions"
operations:
- name: submit-package
method: POST
- type: http
namespace: sap
baseUri: "https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: update-material
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On batch testing completion, retrieves QC results from SAP QM, generates a certificate of analysis in Veeva Vault, updates inventory status in SAP, and notifies the supply chain team via Slack.
naftiko: "0.5"
info:
label: "Drug Product Batch Release Orchestrator"
description: "On batch testing completion, retrieves QC results from SAP QM, generates a certificate of analysis in Veeva Vault, updates inventory status in SAP, and notifies the supply chain team via Slack."
tags:
- manufacturing
- quality
- batch-release
- sap
- veeva
- slack
capability:
exposes:
- type: mcp
namespace: batch-release
port: 8080
tools:
- name: release-batch
description: "Orchestrate batch release: pull QC results, generate CoA, update inventory, and notify supply chain."
inputParameters:
- name: batch_number
in: body
type: string
description: "The manufacturing batch number."
- name: material_number
in: body
type: string
description: "The SAP material number for the drug product."
- name: plant_code
in: body
type: string
description: "The SAP manufacturing plant code."
steps:
- name: get-qc-results
type: call
call: "sap-qm.get-inspection-results"
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: create-coa
type: call
call: "veeva.create-document"
with:
name: "CoA_{{batch_number}}_{{material_number}}"
type: "Certificate of Analysis"
lifecycle: "General Lifecycle"
properties:
batch_number: "{{batch_number}}"
test_results: "{{get-qc-results.summary}}"
release_date: "{{get-qc-results.completion_date}}"
- name: update-inventory
type: call
call: "sap.update-batch-status"
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
plant: "{{plant_code}}"
status: "released"
- name: notify-supply-chain
type: call
call: "slack.post-message"
with:
channel: "supply-chain-ops"
text: "Batch {{batch_number}} ({{material_number}}) released at plant {{plant_code}}. CoA: {{create-coa.document_id}}. QC status: {{get-qc-results.overall_status}}."
consumes:
- type: http
namespace: sap-qm
baseUri: "https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inspection-results
path: "/InspectionResultsSet(Batch='{{batch}}',Material='{{material}}',Plant='{{plant}}')"
inputParameters:
- name: batch
in: path
- name: material
in: path
- name: plant
in: path
operations:
- name: get-inspection-results
method: GET
- type: http
namespace: veeva
baseUri: "https://astrazeneca.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: sap
baseUri: "https://astrazeneca-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: "/Batch(Batch='{{batch}}',Material='{{material}}',Plant='{{plant}}')"
inputParameters:
- name: batch
in: path
- name: material
in: path
- name: plant
in: path
operations:
- name: update-batch-status
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance.
naftiko: "0.5"
info:
label: "Drug Safety Signal Detection Pipeline"
description: "Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance."
tags:
- safety
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: drug_safety_signal_detection_pipeline
description: "Orchestrate drug safety signal detection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Drug Safety Signal Detection Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Queries SAP S/4HANA for a drug product shipment by delivery number, returning origin warehouse, destination site, shipment status, and estimated arrival.
naftiko: "0.5"
info:
label: "Drug Supply Chain Shipment Tracker"
description: "Queries SAP S/4HANA for a drug product shipment by delivery number, returning origin warehouse, destination site, shipment status, and estimated arrival."
tags:
- supply-chain
- logistics
- sap
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: supply-chain-tracking
port: 8080
tools:
- name: get-shipment-status
description: "Look up a drug product shipment by SAP delivery number, log the tracking event in Snowflake, and notify the logistics team via Microsoft Teams."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP outbound delivery number."
- name: requester_email
in: body
type: string
description: "Email of the person requesting the shipment status."
steps:
- name: fetch-delivery
type: call
call: "sap.get-delivery"
with:
delivery_number: "{{delivery_number}}"
- name: log-tracking
type: call
call: "snowflake.insert-record"
with:
database: "SUPPLY_CHAIN"
schema: "LOGISTICS"
table: "SHIPMENT_TRACKING"
data:
delivery_number: "{{delivery_number}}"
status: "{{fetch-delivery.OverallGoodsMovementStatus}}"
destination: "{{fetch-delivery.ShipToParty.Name}}"
- name: notify-logistics
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{requester_email}}"
text: "Shipment {{delivery_number}} status: {{fetch-delivery.OverallGoodsMovementStatus}}. Destination: {{fetch-delivery.ShipToParty.Name}}. ETA: {{fetch-delivery.PlannedGoodsIssueDate}}."
consumes:
- type: http
namespace: sap
baseUri: "https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_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: "200"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Processes a Data Subject Access Request by searching for personal data in Workday, Salesforce, and ServiceNow, compiling results into a SharePoint package, and tracking the request in ServiceNow.
naftiko: "0.5"
info:
label: "DSAR Privacy Request Orchestrator"
description: "Processes a Data Subject Access Request by searching for personal data in Workday, Salesforce, and ServiceNow, compiling results into a SharePoint package, and tracking the request in ServiceNow."
tags:
- privacy
- compliance
- gdpr
- workday
- salesforce
- servicenow
- sharepoint
capability:
exposes:
- type: mcp
namespace: privacy-dsar
port: 8080
tools:
- name: process-dsar
description: "Process a DSAR: search personal data across systems, compile results, and track completion."
inputParameters:
- name: request_id
in: body
type: string
description: "The DSAR request identifier."
- name: data_subject_email
in: body
type: string
description: "The email address of the data subject."
- name: data_subject_name
in: body
type: string
description: "The full name of the data subject."
steps:
- name: search-workday
type: call
call: "workday.search-workers"
with:
email: "{{data_subject_email}}"
- name: search-salesforce
type: call
call: "salesforce.search-contacts"
with:
email: "{{data_subject_email}}"
- name: search-servicenow
type: call
call: "servicenow.search-records"
with:
table: "sys_user"
email: "{{data_subject_email}}"
- name: compile-package
type: call
call: "sharepoint.create-folder"
with:
site_id: "privacy_dsar_site"
folder_path: "DSAR/{{request_id}}_{{data_subject_name}}"
- name: update-tracking
type: call
call: "servicenow.create-record"
with:
table: "u_dsar_requests"
request_id: "{{request_id}}"
subject_name: "{{data_subject_name}}"
systems_searched: "Workday, Salesforce, ServiceNow"
package_url: "{{compile-package.url}}"
status: "data_compiled"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers-search
path: "/workers?email={{email}}"
inputParameters:
- name: email
in: query
operations:
- name: search-workers
method: GET
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts-search
path: "/parameterizedSearch/?q={{email}}&sobject=Contact"
inputParameters:
- name: email
in: query
operations:
- name: search-contacts
method: GET
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-search
path: "/table/{{table}}?sysparm_query=email={{email}}"
inputParameters:
- name: table
in: path
- name: email
in: query
operations:
- name: search-records
method: GET
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
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
Searches the Elasticsearch cluster for clinical documents by keyword, returning document titles, types, study IDs, and relevance scores for clinical information retrieval.
naftiko: "0.5"
info:
label: "Elasticsearch Clinical Document Search"
description: "Searches the Elasticsearch cluster for clinical documents by keyword, returning document titles, types, study IDs, and relevance scores for clinical information retrieval."
tags:
- search
- clinical-trials
- elasticsearch
capability:
exposes:
- type: mcp
namespace: clinical-search
port: 8080
tools:
- name: search-clinical-docs
description: "Search clinical documents in Elasticsearch, log the search for compliance audit in ServiceNow, and share results via Microsoft Teams."
inputParameters:
- name: query
in: body
type: string
description: "The search query string."
- name: index
in: body
type: string
description: "The Elasticsearch index name (e.g., clinical-protocols, csr-documents)."
- name: requester_email
in: body
type: string
description: "Email of the person performing the search."
steps:
- name: execute-search
type: call
call: "elasticsearch.search"
with:
index: "{{index}}"
query: "{{query}}"
- name: log-search-audit
type: call
call: "servicenow.create-record"
with:
table: "u_document_search_audit"
requester: "{{requester_email}}"
index: "{{index}}"
query: "{{query}}"
results_count: "{{execute-search.hits.total.value}}"
- name: share-results
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{requester_email}}"
text: "Clinical document search complete: {{execute-search.hits.total.value}} results found for '{{query}}' in {{index}}. Audit ref: {{log-search-audit.sys_id}}"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://elasticsearch.astrazeneca.com"
authentication:
type: basic
username: "$secrets.es_user"
password: "$secrets.es_password"
resources:
- name: search
path: "/{{index}}/_search"
inputParameters:
- name: index
in: path
operations:
- name: search
method: POST
Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
naftiko: "0.5"
info:
label: "Employee Onboarding Automation Pipeline"
description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
tags:
- hr
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: employee_onboarding_automation
description: "Orchestrate employee onboarding automation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-workday
type: call
call: "workday.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-workday.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Employee Onboarding Automation Pipeline step 3 complete."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for employee documents, assigns compliance training, and sends a Microsoft Teams welcome message.
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 employee documents, assigns compliance training, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
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: "The department or business unit 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_site"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to AstraZeneca, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca"
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://astrazeneca.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: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Triggers a genomics data processing pipeline on AWS: uploads raw sequencing data to S3, launches a SageMaker processing job for variant calling, stores results in Snowflake, and notifies the bioinformatics team via Slack.
naftiko: "0.5"
info:
label: "Genomics Data Processing Pipeline"
description: "Triggers a genomics data processing pipeline on AWS: uploads raw sequencing data to S3, launches a SageMaker processing job for variant calling, stores results in Snowflake, and notifies the bioinformatics team via Slack."
tags:
- research
- genomics
- amazon-s3
- amazon-sagemaker
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: genomics-pipeline
port: 8080
tools:
- name: process-sequencing-data
description: "Orchestrate genomics data processing: upload to S3, run variant calling on SageMaker, store results, and notify team."
inputParameters:
- name: sample_id
in: body
type: string
description: "The sequencing sample identifier."
- name: study_id
in: body
type: string
description: "The genomics study identifier."
- name: fastq_path
in: body
type: string
description: "Local path to the FASTQ file for upload."
steps:
- name: upload-to-s3
type: call
call: "s3.put-object"
with:
bucket: "az-genomics-raw"
key: "{{study_id}}/{{sample_id}}/raw.fastq.gz"
source: "{{fastq_path}}"
- name: launch-processing
type: call
call: "sagemaker.create-processing-job"
with:
job_name: "variant-calling-{{sample_id}}"
input_s3_uri: "s3://az-genomics-raw/{{study_id}}/{{sample_id}}/raw.fastq.gz"
output_s3_uri: "s3://az-genomics-results/{{study_id}}/{{sample_id}}/"
processing_image: "genomics-variant-caller:latest"
- name: store-metadata
type: call
call: "snowflake.insert-record"
with:
database: "GENOMICS"
schema: "PIPELINE_RUNS"
table: "PROCESSING_JOBS"
data:
sample_id: "{{sample_id}}"
study_id: "{{study_id}}"
job_name: "{{launch-processing.job_name}}"
status: "{{launch-processing.status}}"
- name: notify-bioinfo
type: call
call: "slack.post-message"
with:
channel: "bioinformatics"
text: "Genomics pipeline launched: sample {{sample_id}} (study {{study_id}}). SageMaker job: {{launch-processing.job_name}}. Status: {{launch-processing.status}}"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_session_token"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
- type: http
namespace: sagemaker
baseUri: "https://api.sagemaker.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_session_token"
resources:
- name: processing-jobs
path: "/processing-jobs"
operations:
- name: create-processing-job
method: POST
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves metadata for a GitHub repository by owner and repo name, returning description, default branch, open issues count, and last push date for R&D engineering teams.
naftiko: "0.5"
info:
label: "GitHub Repository Status"
description: "Retrieves metadata for a GitHub repository by owner and repo name, returning description, default branch, open issues count, and last push date for R&D engineering teams."
tags:
- engineering
- development
- github
capability:
exposes:
- type: mcp
namespace: dev-repos
port: 8080
tools:
- name: get-repo-info
description: "Look up a GitHub repository. Returns description, default branch, open issues, and last push timestamp."
inputParameters:
- name: owner
in: body
type: string
description: "The GitHub organization or user."
- name: repo
in: body
type: string
description: "The repository name."
call: "github.get-repo"
with:
owner: "{{owner}}"
repo: "{{repo}}"
outputParameters:
- name: description
type: string
mapping: "$.description"
- name: default_branch
type: string
mapping: "$.default_branch"
- name: open_issues
type: string
mapping: "$.open_issues_count"
- name: last_push
type: string
mapping: "$.pushed_at"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{owner}}/{{repo}}"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: get-repo
method: GET
Retrieves campaign performance metrics from Google Analytics for a specified property and date range, returning sessions, conversions, and bounce rate for marketing analytics.
naftiko: "0.5"
info:
label: "Google Analytics Campaign Performance"
description: "Retrieves campaign performance metrics from Google Analytics for a specified property and date range, returning sessions, conversions, and bounce rate for marketing analytics."
tags:
- marketing
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: marketing-analytics
port: 8080
tools:
- name: get-campaign-metrics
description: "Query Google Analytics for campaign performance metrics. Returns sessions, conversions, bounce rate, and average session duration."
inputParameters:
- name: property_id
in: body
type: string
description: "The Google Analytics property ID."
- name: campaign_name
in: body
type: string
description: "The campaign name to filter by."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
call: "ga.run-report"
with:
property_id: "{{property_id}}"
dimensions: "sessionCampaignName"
metrics: "sessions,conversions,bounceRate"
date_range_start: "{{start_date}}"
date_range_end: "{{end_date}}"
filter: "{{campaign_name}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversions
type: string
mapping: "$.rows[0].metricValues[1].value"
- name: bounce_rate
type: string
mapping: "$.rows[0].metricValues[2].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Queries Grafana for active alerts on a specific dashboard, returning alert names, states, and evaluation timestamps for infrastructure and application monitoring.
naftiko: "0.5"
info:
label: "Grafana Dashboard Alert Summary"
description: "Queries Grafana for active alerts on a specific dashboard, returning alert names, states, and evaluation timestamps for infrastructure and application monitoring."
tags:
- it-operations
- monitoring
- grafana
capability:
exposes:
- type: mcp
namespace: dashboard-alerts
port: 8080
tools:
- name: get-dashboard-alerts
description: "Retrieve active alerts for a Grafana dashboard, create a ServiceNow incident for critical alerts, and notify the SRE team via Microsoft Teams."
inputParameters:
- name: dashboard_uid
in: body
type: string
description: "The Grafana dashboard UID."
- name: dashboard_name
in: body
type: string
description: "The human-readable dashboard name for notifications."
steps:
- name: fetch-alerts
type: call
call: "grafana.get-alerts"
with:
dashboard_uid: "{{dashboard_uid}}"
- name: create-alert-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Grafana alerts: {{dashboard_name}} - {{fetch-alerts.totalCount}} active"
category: "monitoring"
assigned_group: "SRE_Team"
description: "Dashboard {{dashboard_name}} ({{dashboard_uid}}) has {{fetch-alerts.totalCount}} active alerts."
- name: notify-sre
type: call
call: "msteams.send-message"
with:
channel_id: "sre_alerts"
text: "Grafana dashboard {{dashboard_name}}: {{fetch-alerts.totalCount}} active alerts. Incident: {{create-alert-incident.number}}."
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.astrazeneca.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: alerts
path: "/alerts?dashboardId={{dashboard_uid}}"
inputParameters:
- name: dashboard_uid
in: query
operations:
- name: get-alerts
method: GET
On detection of a GxP manufacturing deviation, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads supporting evidence to SharePoint, and alerts the quality assurance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GxP Deviation Workflow"
description: "On detection of a GxP manufacturing deviation, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads supporting evidence to SharePoint, and alerts the quality assurance team via Microsoft Teams."
tags:
- quality
- gxp
- manufacturing
- sap
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-deviations
port: 8080
tools:
- name: raise-deviation
description: "Orchestrate a GxP deviation workflow: create quality event, open CAPA, store evidence, and notify QA team."
inputParameters:
- name: batch_number
in: body
type: string
description: "The manufacturing batch number."
- name: deviation_description
in: body
type: string
description: "Description of the observed deviation."
- name: plant_code
in: body
type: string
description: "The SAP plant code where deviation occurred."
- name: severity
in: body
type: string
description: "Deviation severity (critical, major, minor)."
steps:
- name: create-quality-notification
type: call
call: "sap-qm.create-notification"
with:
notification_type: "Q2"
plant: "{{plant_code}}"
material_batch: "{{batch_number}}"
description: "{{deviation_description}}"
- name: open-capa
type: call
call: "servicenow.create-record"
with:
table: "u_capa_investigations"
short_description: "CAPA for batch {{batch_number}} - {{severity}} deviation"
description: "{{deviation_description}}"
sap_qm_ref: "{{create-quality-notification.notification_number}}"
- name: store-evidence
type: call
call: "sharepoint.create-folder"
with:
site_id: "quality_management_site"
folder_path: "Deviations/{{batch_number}}_{{create-quality-notification.notification_number}}"
- name: alert-qa-team
type: call
call: "msteams.send-message"
with:
channel_id: "quality_assurance"
text: "GxP Deviation ({{severity}}): Batch {{batch_number}} at plant {{plant_code}}. SAP QM: {{create-quality-notification.notification_number}}. CAPA: {{open-capa.sys_id}}. Evidence folder: {{store-evidence.url}}"
consumes:
- type: http
namespace: sap-qm
baseUri: "https://astrazeneca-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: "/QualityNotification"
operations:
- name: create-notification
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
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
Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.
naftiko: "0.5"
info:
label: "Infrastructure Drift Detection Pipeline"
description: "Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops."
tags:
- devops
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: infrastructure_drift_detection
description: "Orchestrate infrastructure drift detection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-github
type: call
call: "github.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-github.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Infrastructure Drift Detection Pipeline step 3 complete."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: github-op
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Processes clinical investigator payments by pulling visit data from Oracle Clinical, calculating payment amounts, creating payment requests in SAP, and notifying the finance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Investigator Payment Processing"
description: "Processes clinical investigator payments by pulling visit data from Oracle Clinical, calculating payment amounts, creating payment requests in SAP, and notifying the finance team via Microsoft Teams."
tags:
- clinical-trials
- finance
- investigator-payments
- oracle
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: investigator-payments
port: 8080
tools:
- name: process-investigator-payment
description: "Calculate and process investigator site payment based on completed visits and milestones."
inputParameters:
- name: study_id
in: body
type: string
description: "The study protocol number."
- name: site_id
in: body
type: string
description: "The clinical site identifier."
- name: payment_period
in: body
type: string
description: "The payment period (e.g., 2026-Q1)."
steps:
- name: get-visit-data
type: call
call: "oracle-clinical.get-site-visits"
with:
study_id: "{{study_id}}"
site_id: "{{site_id}}"
period: "{{payment_period}}"
- name: create-payment-request
type: call
call: "sap.create-invoice"
with:
vendor_id: "{{get-visit-data.site_vendor_id}}"
amount: "{{get-visit-data.total_payable}}"
currency: "{{get-visit-data.currency}}"
reference: "CLIN-{{study_id}}-{{site_id}}-{{payment_period}}"
- name: notify-finance
type: call
call: "msteams.send-message"
with:
channel_id: "clinical_finance"
text: "Investigator payment processed: Study {{study_id}}, Site {{site_id}}, Period {{payment_period}}. Amount: {{get-visit-data.total_payable}} {{get-visit-data.currency}}. SAP Invoice: {{create-payment-request.invoice_number}}."
consumes:
- type: http
namespace: oracle-clinical
baseUri: "https://astrazeneca-clinical.oracle.com/ocs/api/v2"
authentication:
type: bearer
token: "$secrets.oracle_clinical_token"
resources:
- name: site-visits
path: "/studies/{{study_id}}/sites/{{site_id}}/visits?period={{period}}"
inputParameters:
- name: study_id
in: path
- name: site_id
in: path
- name: period
in: query
operations:
- name: get-site-visits
method: GET
- type: http
namespace: sap
baseUri: "https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice"
operations:
- name: create-invoice
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
Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Pipeline"
description: "Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB."
tags:
- operations
- servicenow
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: it_asset_lifecycle_pipeline
description: "Orchestrate it asset lifecycle pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-snowflake
type: call
call: "snowflake.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "IT Asset Lifecycle Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves sprint details from a Jira board, returning sprint name, committed story points, completed story points, and velocity for engineering project management.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Retrieves sprint details from a Jira board, returning sprint name, committed story points, completed story points, and velocity for engineering project management."
tags:
- engineering
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: eng-project-mgmt
port: 8080
tools:
- name: get-sprint-velocity
description: "Look up sprint velocity for a Jira board. Returns sprint name, committed points, completed points, and velocity percentage."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
- name: sprint_id
in: body
type: string
description: "The sprint ID."
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.sprint.name"
- name: start_date
type: string
mapping: "$.sprint.startDate"
- name: end_date
type: string
mapping: "$.sprint.endDate"
- name: state
type: string
mapping: "$.sprint.state"
consumes:
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.
naftiko: "0.5"
info:
label: "Knowledge Base Freshness Pipeline"
description: "Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports."
tags:
- knowledge
- confluence
- jira
- slack
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: knowledge_base_freshness_pipeline
description: "Orchestrate knowledge base freshness pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-confluence
type: call
call: "confluence.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-confluence.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Knowledge Base Freshness Pipeline step 3 complete."
consumes:
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Schedules equipment calibration, tracks completion, validates results, and creates maintenance records.
naftiko: "0.5"
info:
label: "Lab Equipment Calibration Pipeline"
description: "Schedules equipment calibration, tracks completion, validates results, and creates maintenance records."
tags:
- quality
- servicenow
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: lab_equipment_calibration_pipeline
description: "Orchestrate lab equipment calibration pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Lab Equipment Calibration Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves a manufacturing batch record from the MES system, including batch status, process parameters, in-process control results, and yield for pharmaceutical production monitoring.
naftiko: "0.5"
info:
label: "Manufacturing Execution Batch Record"
description: "Retrieves a manufacturing batch record from the MES system, including batch status, process parameters, in-process control results, and yield for pharmaceutical production monitoring."
tags:
- manufacturing
- production
- sap
capability:
exposes:
- type: mcp
namespace: manufacturing-execution
port: 8080
tools:
- name: get-batch-record
description: "Look up a manufacturing batch execution record from SAP MES, store yield data in Snowflake for trending, and alert the production team via Microsoft Teams if yield is below threshold."
inputParameters:
- name: batch_number
in: body
type: string
description: "The manufacturing batch number."
- name: plant_code
in: body
type: string
description: "The SAP plant code."
- name: yield_threshold
in: body
type: string
description: "Minimum acceptable yield percentage."
steps:
- name: fetch-batch
type: call
call: "sap-mes.get-batch"
with:
batch: "{{batch_number}}"
plant: "{{plant_code}}"
- name: store-yield-data
type: call
call: "snowflake.insert-record"
with:
database: "MANUFACTURING"
schema: "PRODUCTION"
table: "BATCH_YIELD_TRENDING"
data:
batch_number: "{{batch_number}}"
plant_code: "{{plant_code}}"
yield_pct: "{{fetch-batch.yield_percentage}}"
ipc_status: "{{fetch-batch.ipc_overall_status}}"
status: "{{fetch-batch.status}}"
- name: alert-production
type: call
call: "msteams.send-message"
with:
channel_id: "production_operations"
text: "Batch {{batch_number}} at plant {{plant_code}}: Status={{fetch-batch.status}}, Yield={{fetch-batch.yield_percentage}}% (threshold: {{yield_threshold}}%), IPC={{fetch-batch.ipc_overall_status}}."
consumes:
- type: http
namespace: sap-mes
baseUri: "https://astrazeneca-mes.sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_mes_token"
resources:
- name: batches
path: "/batches/{{batch}}?plant={{plant}}"
inputParameters:
- name: batch
in: path
- name: plant
in: query
operations:
- name: get-batch
method: GET
When a medical information request arrives via Salesforce Service Cloud, retrieves the HCP profile, searches Veeva Vault for approved response documents, creates a case in ServiceNow, and sends the response via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Medical Information Request Orchestrator"
description: "When a medical information request arrives via Salesforce Service Cloud, retrieves the HCP profile, searches Veeva Vault for approved response documents, creates a case in ServiceNow, and sends the response via Microsoft Outlook."
tags:
- medical-affairs
- medical-information
- salesforce
- veeva
- servicenow
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: medical-information
port: 8080
tools:
- name: process-med-info-request
description: "Process a medical information request end-to-end: retrieve HCP context, find approved response, log case, and send reply."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce Service Cloud case ID."
- name: product_name
in: body
type: string
description: "The drug product referenced in the inquiry."
- name: topic
in: body
type: string
description: "The medical topic of the inquiry."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: search-vault-docs
type: call
call: "veeva.search-documents"
with:
query: "product:{{product_name}} AND topic:{{topic}} AND status:Approved"
- name: log-mi-case
type: call
call: "servicenow.create-record"
with:
table: "u_medical_information"
short_description: "MI Request: {{product_name}} - {{topic}}"
hcp_name: "{{get-case.contact_name}}"
document_id: "{{search-vault-docs.documents[0].id}}"
- name: send-response
type: call
call: "outlook.send-mail"
with:
to: "{{get-case.contact_email}}"
subject: "AstraZeneca Medical Information: {{product_name}} - {{topic}}"
body: "Dear {{get-case.contact_name}}, please find the attached response document regarding {{product_name}}. Reference: {{log-mi-case.sys_id}}"
attachment_url: "{{search-vault-docs.documents[0].download_url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: veeva
baseUri: "https://astrazeneca.veevavault.com/api/v24.1"
authentication:
type: bearer
token: "$secrets.veeva_session_id"
resources:
- name: search
path: "/objects/documents/search"
operations:
- name: search-documents
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Checks the health and analytics of a MuleSoft API deployment, returning request volume, error rate, average latency, and policy violations for API governance.
naftiko: "0.5"
info:
label: "MuleSoft API Gateway Health"
description: "Checks the health and analytics of a MuleSoft API deployment, returning request volume, error rate, average latency, and policy violations for API governance."
tags:
- integration
- api-management
- mulesoft
capability:
exposes:
- type: mcp
namespace: api-governance
port: 8080
tools:
- name: get-api-health
description: "Retrieve MuleSoft API deployment health metrics. Returns request count, error rate, latency, and policy violation count."
inputParameters:
- name: api_id
in: body
type: string
description: "The MuleSoft API ID."
- name: environment
in: body
type: string
description: "The deployment environment (e.g., production, sandbox)."
call: "mulesoft.get-api-analytics"
with:
api_id: "{{api_id}}"
environment: "{{environment}}"
outputParameters:
- name: request_count
type: string
mapping: "$.analytics.requestCount"
- name: error_rate
type: string
mapping: "$.analytics.errorRate"
- name: avg_latency_ms
type: string
mapping: "$.analytics.avgLatency"
- name: policy_violations
type: string
mapping: "$.analytics.policyViolations"
consumes:
- type: http
namespace: mulesoft
baseUri: "https://anypoint.mulesoft.com/analytics/1.0"
authentication:
type: bearer
token: "$secrets.mulesoft_token"
resources:
- name: api-analytics
path: "/{{environment}}/apis/{{api_id}}/analytics"
inputParameters:
- name: api_id
in: path
- name: environment
in: path
operations:
- name: get-api-analytics
method: GET
Launches a clinical trial patient recruitment campaign by creating a Salesforce Marketing Cloud email journey, publishing trial information to the AstraZeneca website via the CMS, and tracking campaign performance in Google Analytics.
naftiko: "0.5"
info:
label: "Patient Recruitment Campaign Orchestrator"
description: "Launches a clinical trial patient recruitment campaign by creating a Salesforce Marketing Cloud email journey, publishing trial information to the AstraZeneca website via the CMS, and tracking campaign performance in Google Analytics."
tags:
- clinical-trials
- patient-recruitment
- salesforce-marketing-cloud
- google-analytics
capability:
exposes:
- type: mcp
namespace: patient-recruitment
port: 8080
tools:
- name: launch-recruitment-campaign
description: "Orchestrate patient recruitment: create email journey, publish trial listing, and configure analytics tracking."
inputParameters:
- name: study_id
in: body
type: string
description: "The clinical trial protocol number."
- name: study_title
in: body
type: string
description: "The public study title."
- name: therapeutic_area
in: body
type: string
description: "The therapeutic area."
- name: target_audience_list
in: body
type: string
description: "Salesforce Marketing Cloud data extension name for the target audience."
steps:
- name: create-email-journey
type: call
call: "sfmc.create-journey"
with:
name: "Recruitment - {{study_title}}"
data_extension: "{{target_audience_list}}"
template: "clinical_trial_recruitment"
study_id: "{{study_id}}"
- name: publish-trial-page
type: call
call: "cms.create-page"
with:
title: "{{study_title}} - Clinical Trial Recruitment"
category: "clinical-trials/{{therapeutic_area}}"
study_id: "{{study_id}}"
- name: configure-analytics
type: call
call: "google-analytics.create-custom-dimension"
with:
property_id: "$secrets.ga_property_id"
dimension_name: "study_{{study_id}}_recruitment"
consumes:
- type: http
namespace: sfmc
baseUri: "https://astrazeneca.rest.marketingcloudapis.com/interaction/v1"
authentication:
type: bearer
token: "$secrets.sfmc_token"
resources:
- name: journeys
path: "/interactions"
operations:
- name: create-journey
method: POST
- type: http
namespace: cms
baseUri: "https://cms.astrazeneca.com/api/v2"
authentication:
type: bearer
token: "$secrets.cms_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
- type: http
namespace: google-analytics
baseUri: "https://analyticsadmin.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: custom-dimensions
path: "/properties/{{property_id}}/customDimensions"
inputParameters:
- name: property_id
in: path
operations:
- name: create-custom-dimension
method: POST
Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams.
naftiko: "0.5"
info:
label: "Patient Recruitment Optimization Pipeline"
description: "Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams."
tags:
- clinical
- snowflake
- salesforce
- powerbi
capability:
exposes:
- type: mcp
namespace: clinical
port: 8080
tools:
- name: patient_recruitment_optimization_pipelin
description: "Orchestrate patient recruitment optimization pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-salesforce
type: call
call: "salesforce.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-powerbi
type: call
call: "powerbi.create-resource"
with:
channel: "{{notification_channel}}"
text: "Patient Recruitment Optimization Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.
naftiko: "0.5"
info:
label: "Performance Review Cycle Pipeline"
description: "Initiates review cycles, collects feedback, aggregates scores, and distributes to managers."
tags:
- hr
- workday
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: performance_review_cycle_pipeline
description: "Orchestrate performance review cycle pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-workday
type: call
call: "workday.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-workday.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Performance Review Cycle Pipeline step 3 complete."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Runs a disproportionality analysis query in the safety database, stores results in Snowflake for trending, creates a Jira ticket for signal evaluation, and notifies the safety science team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Pharmacovigilance Signal Detection Pipeline"
description: "Runs a disproportionality analysis query in the safety database, stores results in Snowflake for trending, creates a Jira ticket for signal evaluation, and notifies the safety science team via Microsoft Teams."
tags:
- pharmacovigilance
- signal-detection
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pv-signal-detection
port: 8080
tools:
- name: run-signal-analysis
description: "Execute a disproportionality analysis for a drug-event combination and orchestrate downstream signal evaluation workflow."
inputParameters:
- name: product_name
in: body
type: string
description: "The drug product name."
- name: meddra_pt
in: body
type: string
description: "The MedDRA preferred term for the adverse event."
- name: date_range_start
in: body
type: string
description: "Analysis start date in YYYY-MM-DD format."
- name: date_range_end
in: body
type: string
description: "Analysis end date in YYYY-MM-DD format."
steps:
- name: run-dispro-query
type: call
call: "safety-db.run-analysis"
with:
product: "{{product_name}}"
event_pt: "{{meddra_pt}}"
start_date: "{{date_range_start}}"
end_date: "{{date_range_end}}"
- name: store-results
type: call
call: "snowflake.insert-record"
with:
database: "PHARMACOVIGILANCE"
schema: "SIGNAL_DETECTION"
table: "DISPRO_RESULTS"
data:
product: "{{product_name}}"
event: "{{meddra_pt}}"
pro_score: "{{run-dispro-query.pro_score}}"
case_count: "{{run-dispro-query.case_count}}"
- name: create-evaluation-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PVSIG"
summary: "Signal Evaluation: {{product_name}} / {{meddra_pt}} (PRR={{run-dispro-query.pro_score}})"
issue_type: "Task"
priority: "High"
- name: notify-safety-team
type: call
call: "msteams.send-message"
with:
channel_id: "safety_science"
text: "New signal detected: {{product_name}} / {{meddra_pt}}. PRR={{run-dispro-query.pro_score}}, cases={{run-dispro-query.case_count}}. Evaluate: {{create-evaluation-ticket.key}}"
consumes:
- type: http
namespace: safety-db
baseUri: "https://astrazeneca-safety.oracle.com/argus/api/v1"
authentication:
type: bearer
token: "$secrets.argus_token"
resources:
- name: analyses
path: "/analyses/disproportionality"
operations:
- name: run-analysis
method: POST
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.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
Triggers a Power BI dataset refresh for a specified workspace and dataset, used by analytics teams to ensure dashboards reflect latest clinical or commercial data.
naftiko: "0.5"
info:
label: "Power BI Dashboard Refresh Trigger"
description: "Triggers a Power BI dataset refresh for a specified workspace and dataset, used by analytics teams to ensure dashboards reflect latest clinical or commercial data."
tags:
- analytics
- reporting
- power-bi
capability:
exposes:
- type: mcp
namespace: analytics-refresh
port: 8080
tools:
- name: refresh-dashboard
description: "Trigger a Power BI dataset refresh by workspace and dataset ID. Returns refresh request status."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
call: "powerbi.trigger-refresh"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
When a lab experiment completes, extracts results from the electronic lab notebook, transforms the data via Azure Data Factory, loads it into Snowflake, and notifies the research lead via Slack.
naftiko: "0.5"
info:
label: "R&D Experiment Results to Data Lake"
description: "When a lab experiment completes, extracts results from the electronic lab notebook, transforms the data via Azure Data Factory, loads it into Snowflake, and notifies the research lead via Slack."
tags:
- research
- data-pipeline
- azure-data-factory
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: rd-data-pipeline
port: 8080
tools:
- name: ingest-experiment-results
description: "Extract experiment results from the ELN, transform and load into Snowflake, and notify the research team."
inputParameters:
- name: experiment_id
in: body
type: string
description: "The electronic lab notebook experiment identifier."
- name: project_code
in: body
type: string
description: "The R&D project code."
- name: researcher_email
in: body
type: string
description: "Email of the lead researcher to notify."
steps:
- name: get-experiment
type: call
call: "eln.get-experiment"
with:
experiment_id: "{{experiment_id}}"
- name: trigger-etl
type: call
call: "adf.trigger-pipeline"
with:
pipeline_name: "eln_to_snowflake"
parameters:
experiment_id: "{{experiment_id}}"
project_code: "{{project_code}}"
source_url: "{{get-experiment.data_export_url}}"
- name: notify-researcher
type: call
call: "slack.post-message"
with:
channel: "rd-data-pipelines"
text: "Experiment {{experiment_id}} (project {{project_code}}) results loaded to Snowflake. Pipeline run: {{trigger-etl.run_id}}. Researcher: {{researcher_email}}"
consumes:
- type: http
namespace: eln
baseUri: "https://astrazeneca-eln.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
- type: http
namespace: adf
baseUri: "https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/rg-astrazeneca-data/providers/Microsoft.DataFactory/factories/adf-astrazeneca"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: trigger-pipeline
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors regulatory intelligence feeds for new guidance documents from FDA, EMA, and other health authorities, stores findings in Snowflake, creates review tasks in Jira, and notifies the regulatory intelligence team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Intelligence Monitor"
description: "Monitors regulatory intelligence feeds for new guidance documents from FDA, EMA, and other health authorities, stores findings in Snowflake, creates review tasks in Jira, and notifies the regulatory intelligence team via Microsoft Teams."
tags:
- regulatory
- intelligence
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reg-intelligence
port: 8080
tools:
- name: process-reg-update
description: "Process a new regulatory intelligence update: store in warehouse, create review task, and notify the team."
inputParameters:
- name: authority
in: body
type: string
description: "The health authority (e.g., FDA, EMA, MHRA)."
- name: document_title
in: body
type: string
description: "Title of the new guidance or regulation."
- name: document_url
in: body
type: string
description: "URL to the published document."
- name: therapeutic_area
in: body
type: string
description: "Relevant therapeutic area."
steps:
- name: store-intelligence
type: call
call: "snowflake.insert-record"
with:
database: "REGULATORY"
schema: "INTELLIGENCE"
table: "GUIDANCE_UPDATES"
data:
authority: "{{authority}}"
title: "{{document_title}}"
url: "{{document_url}}"
therapeutic_area: "{{therapeutic_area}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "REGINTEL"
summary: "Review: {{authority}} - {{document_title}}"
issue_type: "Task"
description: "New guidance from {{authority}}: {{document_title}}. Link: {{document_url}}. Therapeutic area: {{therapeutic_area}}."
- name: notify-reg-intel
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_intelligence"
text: "New regulatory update from {{authority}}: {{document_title}}. TA: {{therapeutic_area}}. Review task: {{create-review-task.key}}. Document: {{document_url}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: jira
baseUri: "https://astrazeneca.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
When a regulatory submission is finalized in Veeva Vault, uploads the eCTD package to the health authority gateway, logs the submission in ServiceNow, and notifies the regulatory affairs team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Submission Pipeline"
description: "When a regulatory submission is finalized in Veeva Vault, uploads the eCTD package to the health authority gateway, logs the submission in ServiceNow, and notifies the regulatory affairs team via Microsoft Teams."
tags:
- regulatory
- submissions
- veeva
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-submissions
port: 8080
tools:
- name: submit-ectd-package
description: "Given a Veeva Vault document ID, orchestrate eCTD submission to the health authority gateway with audit trail and team notification."
inputParameters:
- name: vault_document_id
in: body
type: string
description: "The Veeva Vault document ID for the finalized eCTD package."
- name: health_authority
in: body
type: string
description: "Target health authority (e.g., FDA, EMA, PMDA)."
- name: submission_type
in: body
type: string
description: "The type of submission (e.g., NDA, BLA, MAA, supplement)."
steps:
- name: get-document
type: call
call: "veeva.get-document"
with:
document_id: "{{vault_document_id}}"
- name: upload-to-gateway
type: call
call: "ectd-gateway.submit-package"
with:
package_url: "{{get-document.download_url}}"
authority: "{{health_authority}}"
submission_type: "{{submission_type}}"
- name: log-submission
type: call
call: "servicenow.create-record"
with:
table: "u_regulatory_submissions"
short_description: "{{submission_type}} submitted to {{health_authority}}"
document_id: "{{vault_document_id}}"
gateway_tracking_id: "{{upload-to-gateway.tracking_id}}"
- name: notify-reg-team
type: call
call: "msteams.send-message"
with:
channel_id: "regulatory_affairs"
text: "Submission complete: {{submission_type}} to {{health_authority}}. Gateway tracking: {{upload-to-gateway.tracking_id}}. ServiceNow: {{log-submission.sys_id}}."
consumes:
- type: http
namespace: veeva
baseUri: "https://astrazeneca.veevavault.com/api/v24.1"
authentication:
type: bearer
token: "$secrets.veeva_session_id"
resources:
- name: documents
path: "/objects/documents/{{document_id}}"
inputParameters:
- name: document_id
in: path
operations:
- name: get-document
method: GET
- type: http
namespace: ectd-gateway
baseUri: "https://gateway.astrazeneca.com/regulatory/api/v1"
authentication:
type: bearer
token: "$secrets.ectd_gateway_token"
resources:
- name: submissions
path: "/submissions"
operations:
- name: submit-package
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
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
Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs.
naftiko: "0.5"
info:
label: "Regulatory Submission Tracker Pipeline"
description: "Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs."
tags:
- regulatory
- jira
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: regulatory
port: 8080
tools:
- name: regulatory_submission_tracker_pipeline
description: "Orchestrate regulatory submission tracker pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-jira
type: call
call: "jira.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-jira.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Regulatory Submission Tracker Pipeline step 3 complete."
consumes:
- type: http
namespace: jira
baseUri: "https://astrazeneca.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves a healthcare professional account from Salesforce by account ID, returning name, specialty, institution, territory, and engagement tier.
naftiko: "0.5"
info:
label: "Salesforce HCP Account Lookup"
description: "Retrieves a healthcare professional account from Salesforce by account ID, returning name, specialty, institution, territory, and engagement tier."
tags:
- commercial
- hcp-engagement
- salesforce
capability:
exposes:
- type: mcp
namespace: commercial-hcp
port: 8080
tools:
- name: get-hcp-account
description: "Look up a healthcare professional account in Salesforce. Returns name, specialty, affiliated institution, territory, and tier."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the HCP."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: hcp_name
type: string
mapping: "$.Name"
- name: specialty
type: string
mapping: "$.Specialty__c"
- name: institution
type: string
mapping: "$.Institution__c"
- name: territory
type: string
mapping: "$.Territory__c"
- name: engagement_tier
type: string
mapping: "$.Engagement_Tier__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://astrazeneca.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
Retrieves a sourcing event from SAP Ariba by event ID, returning event title, status, supplier count, and award date for procurement visibility.
naftiko: "0.5"
info:
label: "SAP Ariba Sourcing Event Status"
description: "Retrieves a sourcing event from SAP Ariba by event ID, returning event title, status, supplier count, and award date for procurement visibility."
tags:
- procurement
- sourcing
- sap-ariba
capability:
exposes:
- type: mcp
namespace: procurement-sourcing
port: 8080
tools:
- name: get-sourcing-event
description: "Look up a SAP Ariba sourcing event. Returns title, status, number of participating suppliers, and award date."
inputParameters:
- name: event_id
in: body
type: string
description: "The SAP Ariba sourcing event ID."
call: "ariba.get-event"
with:
event_id: "{{event_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: status
type: string
mapping: "$.status"
- name: supplier_count
type: string
mapping: "$.participantCount"
- name: award_date
type: string
mapping: "$.awardDate"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/sourcing-projects/v1/prod"
authentication:
type: bearer
token: "$secrets.ariba_token"
inputParameters:
- name: apiKey
in: header
value: "$secrets.ariba_api_key"
resources:
- name: events
path: "/events/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-event
method: GET
When a travel expense report is submitted in SAP Concur, validates against policy thresholds, retrieves approver from Workday, routes for approval, and notifies the submitter via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "When a travel expense report is submitted in SAP Concur, validates against policy thresholds, retrieves approver from Workday, routes for approval, and notifies the submitter via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: route-expense-approval
description: "Validate and route a SAP Concur expense report for manager approval with policy check and notification."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: submitter_worker_id
in: body
type: string
description: "The Workday worker ID of the submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-report"
with:
report_id: "{{report_id}}"
- name: get-submitter
type: call
call: "workday.get-worker"
with:
worker_id: "{{submitter_worker_id}}"
- name: submit-for-approval
type: call
call: "concur.submit-report"
with:
report_id: "{{report_id}}"
approver_email: "{{get-submitter.manager_email}}"
- name: notify-submitter
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-submitter.work_email}}"
text: "Your expense report {{report_id}} ({{get-expense-report.total_amount}} {{get-expense-report.currency}}) has been routed to {{get-submitter.manager_name}} for approval."
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- name: submit-report
method: PATCH
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca"
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
Looks up a SAP S/4HANA purchase order for raw materials or API ingredients by PO number, returning header status, vendor, total value, and delivery schedule.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order for raw materials or API ingredients by PO number, returning header status, vendor, total value, and delivery schedule."
tags:
- procurement
- supply-chain
- sap
- sap-s4hana
capability:
exposes:
- type: mcp
namespace: pharma-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, currency, and delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (10-digit)."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://astrazeneca-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: "200"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
naftiko: "0.5"
info:
label: "Security Incident Response Pipeline"
description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
tags:
- security
- splunk
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: security_incident_response_pipeline
description: "Orchestrate security incident response pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-splunk
type: call
call: "splunk.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-splunk.result}}"
- name: create-pagerduty
type: call
call: "pagerduty.create-resource"
with:
channel: "{{notification_channel}}"
text: "Security Incident Response Pipeline step 3 complete."
consumes:
- type: http
namespace: splunk
baseUri: "https://astrazeneca-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: pagerduty-op
method: POST
Retrieves a ServiceNow incident by number, returning short description, priority, assigned group, state, and resolution notes for IT support triage.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning short description, priority, assigned group, state, and resolution notes for IT support triage."
tags:
- it-operations
- incident-management
- servicenow
capability:
exposes:
- type: mcp
namespace: it-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number. Returns short description, priority, assignment group, state, and resolution notes."
inputParameters:
- name: incident_number
in: body
type: string
description: "The 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: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: state
type: string
mapping: "$.result.state"
- name: resolution_notes
type: string
mapping: "$.result.close_notes"
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.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
Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.
naftiko: "0.5"
info:
label: "SLA Compliance Monitoring Pipeline"
description: "Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management."
tags:
- operations
- datadog
- servicenow
- powerbi
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: sla_compliance_monitoring_pipeline
description: "Orchestrate sla compliance monitoring pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-datadog
type: call
call: "datadog.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-datadog.result}}"
- name: create-powerbi
type: call
call: "powerbi.create-resource"
with:
channel: "{{notification_channel}}"
text: "SLA Compliance Monitoring Pipeline step 3 complete."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
Executes a SQL query against the Snowflake clinical analytics warehouse and returns results for use in reporting and data science workflows.
naftiko: "0.5"
info:
label: "Snowflake Clinical Analytics Query"
description: "Executes a SQL query against the Snowflake clinical analytics warehouse and returns results for use in reporting and data science workflows."
tags:
- analytics
- data-warehouse
- snowflake
- clinical-trials
capability:
exposes:
- type: mcp
namespace: clinical-analytics
port: 8080
tools:
- name: run-analytics-query
description: "Execute a SQL query against the Snowflake clinical data warehouse, log the query execution in ServiceNow for audit, and post results summary to the analytics Slack channel."
inputParameters:
- name: sql_statement
in: body
type: string
description: "The SQL statement to execute."
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse to use (e.g., CLINICAL_WH)."
- name: database
in: body
type: string
description: "The target Snowflake database."
- name: requester
in: body
type: string
description: "Name of the analyst running the query."
steps:
- name: execute-query
type: call
call: "snowflake.execute-statement"
with:
statement: "{{sql_statement}}"
warehouse: "{{warehouse}}"
database: "{{database}}"
- name: log-query
type: call
call: "servicenow.create-record"
with:
table: "u_data_query_audit"
database: "{{database}}"
warehouse: "{{warehouse}}"
requester: "{{requester}}"
row_count: "{{execute-query.resultSetMetaData.numRows}}"
- name: post-summary
type: call
call: "slack.post-message"
with:
channel: "clinical-analytics"
text: "Query executed by {{requester}} on {{database}}: {{execute-query.resultSetMetaData.numRows}} rows returned. Audit: {{log-query.sys_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.
naftiko: "0.5"
info:
label: "Software License Optimization Pipeline"
description: "Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT."
tags:
- operations
- servicenow
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: software_license_optimization
description: "Orchestrate software license optimization pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-snowflake
type: call
call: "snowflake.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Software License Optimization Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: snowflake
baseUri: "https://astrazeneca.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Executes a Splunk search query for security events, returning event count, top source IPs, and severity distribution for the cybersecurity operations team.
naftiko: "0.5"
info:
label: "Splunk Security Event Query"
description: "Executes a Splunk search query for security events, returning event count, top source IPs, and severity distribution for the cybersecurity operations team."
tags:
- security
- monitoring
- splunk
capability:
exposes:
- type: mcp
namespace: security-monitoring
port: 8080
tools:
- name: search-security-events
description: "Execute a Splunk search for security events, log the search in ServiceNow for SOC tracking, and alert the cybersecurity team via Slack."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk SPL search query."
- name: time_range
in: body
type: string
description: "Time range (e.g., -24h, -7d)."
- name: analyst_name
in: body
type: string
description: "Name of the SOC analyst running the search."
steps:
- name: execute-search
type: call
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{time_range}}"
- name: log-search
type: call
call: "servicenow.create-record"
with:
table: "u_soc_search_log"
analyst: "{{analyst_name}}"
search_id: "{{execute-search.sid}}"
query: "{{search_query}}"
time_range: "{{time_range}}"
- name: alert-soc
type: call
call: "slack.post-message"
with:
channel: "cybersecurity-ops"
text: "Security search initiated by {{analyst_name}}. Splunk SID: {{execute-search.sid}}. Time range: {{time_range}}. Audit: {{log-search.sys_id}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.astrazeneca.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Retrieves metadata for a Tableau workbook used in clinical trial reporting, including workbook name, owner, views, last refresh time, and data source connections.
naftiko: "0.5"
info:
label: "Tableau Clinical Dashboard Workbook Info"
description: "Retrieves metadata for a Tableau workbook used in clinical trial reporting, including workbook name, owner, views, last refresh time, and data source connections."
tags:
- analytics
- clinical-trials
- tableau
capability:
exposes:
- type: mcp
namespace: clinical-dashboards
port: 8080
tools:
- name: get-workbook-info
description: "Look up a Tableau workbook by ID, log access in Snowflake for governance tracking, and notify the workbook owner via Slack if stale."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook LUID."
- name: requester_name
in: body
type: string
description: "Name of the person requesting workbook info."
steps:
- name: fetch-workbook
type: call
call: "tableau.get-workbook"
with:
workbook_id: "{{workbook_id}}"
- name: log-access
type: call
call: "snowflake.insert-record"
with:
database: "ANALYTICS_GOVERNANCE"
schema: "TABLEAU"
table: "WORKBOOK_ACCESS_LOG"
data:
workbook_id: "{{workbook_id}}"
workbook_name: "{{fetch-workbook.workbook.name}}"
requester: "{{requester_name}}"
owner: "{{fetch-workbook.workbook.owner.name}}"
- name: notify-owner
type: call
call: "slack.post-message"
with:
channel: "analytics-governance"
text: "Workbook {{fetch-workbook.workbook.name}} (owner: {{fetch-workbook.workbook.owner.name}}) accessed by {{requester_name}}. Last updated: {{fetch-workbook.workbook.updatedAt}}."
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.astrazeneca.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}"
inputParameters:
- name: workbook_id
in: path
operations:
- name: get-workbook
method: GET
Retrieves the latest Terraform plan output from an Azure DevOps pipeline run for a given infrastructure workspace, returning resource additions, changes, and destructions.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Plan Check"
description: "Retrieves the latest Terraform plan output from an Azure DevOps pipeline run for a given infrastructure workspace, returning resource additions, changes, and destructions."
tags:
- devops
- infrastructure
- terraform
- azure-devops
capability:
exposes:
- type: mcp
namespace: infra-terraform
port: 8080
tools:
- name: get-terraform-plan
description: "Retrieve the latest Terraform plan summary from Azure DevOps for a workspace. Returns planned additions, changes, and deletions."
inputParameters:
- name: project_name
in: body
type: string
description: "The Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "The Azure DevOps pipeline ID for Terraform."
call: "azdo.get-latest-run"
with:
project: "{{project_name}}"
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: run_id
type: string
mapping: "$.id"
- name: state
type: string
mapping: "$.state"
- name: result
type: string
mapping: "$.result"
- name: created_date
type: string
mapping: "$.createdDate"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/astrazeneca"
authentication:
type: basic
username: ""
password: "$secrets.azdo_pat"
resources:
- name: pipeline-runs
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1&$top=1"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: get-latest-run
method: GET
Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.
naftiko: "0.5"
info:
label: "Third-Party Integration Health Pipeline"
description: "Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team."
tags:
- integrations
- datadog
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: integrations
port: 8080
tools:
- name: third_party_integration_health_pipeline
description: "Orchestrate third-party integration health pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-datadog
type: call
call: "datadog.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-datadog.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Third-Party Integration Health Pipeline step 3 complete."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.
naftiko: "0.5"
info:
label: "Training Compliance Tracker Pipeline"
description: "Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status."
tags:
- compliance
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: training_compliance_tracker_pipeline
description: "Orchestrate training compliance tracker pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-workday
type: call
call: "workday.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-workday.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Training Compliance Tracker Pipeline step 3 complete."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves a regulatory document from Veeva Vault by document ID, returning document name, version, status, classification, and download link.
naftiko: "0.5"
info:
label: "Veeva Vault Document Retrieval"
description: "Retrieves a regulatory document from Veeva Vault by document ID, returning document name, version, status, classification, and download link."
tags:
- regulatory
- document-management
- veeva
capability:
exposes:
- type: mcp
namespace: regulatory-docs
port: 8080
tools:
- name: get-vault-document
description: "Look up a Veeva Vault document by ID. Returns document name, version, lifecycle state, document type, and download URL."
inputParameters:
- name: document_id
in: body
type: string
description: "The Veeva Vault document ID."
call: "veeva.get-document"
with:
document_id: "{{document_id}}"
outputParameters:
- name: name
type: string
mapping: "$.document.name__v"
- name: version
type: string
mapping: "$.document.major_version_number__v"
- name: status
type: string
mapping: "$.document.status__v"
- name: document_type
type: string
mapping: "$.document.type__v"
- name: download_url
type: string
mapping: "$.document.download_url"
consumes:
- type: http
namespace: veeva
baseUri: "https://astrazeneca.veevavault.com/api/v24.1"
authentication:
type: bearer
token: "$secrets.veeva_session_id"
resources:
- name: documents
path: "/objects/documents/{{document_id}}"
inputParameters:
- name: document_id
in: path
operations:
- name: get-document
method: GET
Triggers a vendor risk assessment by pulling vendor details from SAP Ariba, running a compliance check via a third-party risk service, logging findings in ServiceNow, and notifying the procurement team via Slack.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Orchestrator"
description: "Triggers a vendor risk assessment by pulling vendor details from SAP Ariba, running a compliance check via a third-party risk service, logging findings in ServiceNow, and notifying the procurement team via Slack."
tags:
- procurement
- vendor-management
- compliance
- sap-ariba
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Run a vendor risk assessment: pull vendor profile, check compliance, log findings, and notify procurement."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP Ariba supplier ID."
- name: assessment_type
in: body
type: string
description: "Assessment type (e.g., gxp-audit, financial-health, cyber-risk)."
steps:
- name: get-vendor-profile
type: call
call: "ariba.get-supplier"
with:
supplier_id: "{{vendor_id}}"
- name: run-compliance-check
type: call
call: "risk-service.check-compliance"
with:
company_name: "{{get-vendor-profile.company_name}}"
duns_number: "{{get-vendor-profile.duns}}"
assessment_type: "{{assessment_type}}"
- name: log-findings
type: call
call: "servicenow.create-record"
with:
table: "u_vendor_risk_assessments"
vendor_name: "{{get-vendor-profile.company_name}}"
risk_score: "{{run-compliance-check.risk_score}}"
risk_level: "{{run-compliance-check.risk_level}}"
findings: "{{run-compliance-check.findings_summary}}"
- name: notify-procurement
type: call
call: "slack.post-message"
with:
channel: "procurement-risk"
text: "Vendor risk assessment complete: {{get-vendor-profile.company_name}}. Type: {{assessment_type}}. Risk score: {{run-compliance-check.risk_score}} ({{run-compliance-check.risk_level}}). ServiceNow: {{log-findings.sys_id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1/prod"
authentication:
type: bearer
token: "$secrets.ariba_token"
inputParameters:
- name: apiKey
in: header
value: "$secrets.ariba_api_key"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: risk-service
baseUri: "https://risk-platform.astrazeneca.com/api/v1"
authentication:
type: bearer
token: "$secrets.risk_platform_token"
resources:
- name: compliance
path: "/compliance/check"
operations:
- name: check-compliance
method: POST
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Pipeline"
description: "Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement."
tags:
- procurement
- servicenow
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: vendor_risk_assessment_pipeline
description: "Orchestrate vendor risk assessment pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Vendor Risk Assessment Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://astrazeneca.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: confluence
baseUri: "https://astrazeneca.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves an AstraZeneca employee record from Workday by worker ID, returning name, department, job title, manager, and location.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves an AstraZeneca employee record from Workday by worker ID, returning name, department, job title, manager, and location."
tags:
- hr
- employee-management
- workday
capability:
exposes:
- type: mcp
namespace: hr-employee
port: 8080
tools:
- name: get-employee
description: "Look up an AstraZeneca employee in Workday by worker ID. Returns full name, department, title, manager name, and office location."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.full_name"
- name: department
type: string
mapping: "$.worker.department"
- name: title
type: string
mapping: "$.worker.job_title"
- name: manager
type: string
mapping: "$.worker.manager.full_name"
- name: location
type: string
mapping: "$.worker.location"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca"
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
Retrieves a Zendesk support ticket by ID, returning subject, status, priority, assignee, and latest comment for IT and commercial support teams.
naftiko: "0.5"
info:
label: "Zendesk Support Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID, returning subject, status, priority, assignee, and latest comment for IT and commercial support teams."
tags:
- support
- customer-service
- zendesk
capability:
exposes:
- type: mcp
namespace: support-tickets
port: 8080
tools:
- name: get-support-ticket
description: "Look up a Zendesk ticket by ID. Returns subject, status, priority, assignee name, and latest comment body."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.ticket.subject"
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
- name: assignee
type: string
mapping: "$.ticket.assignee.name"
consumes:
- type: http
namespace: zendesk
baseUri: "https://astrazeneca.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET