AbbVie Capabilities
Naftiko 0.5 capability definitions for AbbVie - 100 capabilities showing integration workflows and service orchestrations.
When a pharmacovigilance team member logs an adverse event, creates a ServiceNow safety case, stores documentation in Box, and alerts the drug safety team in Microsoft Teams with full case context.
naftiko: "0.5"
info:
label: "Adverse Event Reporting Pipeline"
description: "When a pharmacovigilance team member logs an adverse event, creates a ServiceNow safety case, stores documentation in Box, and alerts the drug safety team in Microsoft Teams with full case context."
tags:
- pharmacovigilance
- drug-safety
- adverse-event
- servicenow
- box
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: drug-safety
port: 8080
tools:
- name: report-adverse-event
description: "Given adverse event details, create a safety case in ServiceNow, upload supporting documents to Box, and alert the drug safety team."
inputParameters:
- name: patient_id
in: body
type: string
description: "Anonymized patient identifier."
- name: product_name
in: body
type: string
description: "AbbVie product associated with the event."
- name: event_description
in: body
type: string
description: "Description of the adverse event."
- name: severity
in: body
type: string
description: "Severity level: mild, moderate, severe, life-threatening."
- name: reporter_email
in: body
type: string
description: "Email of the reporting healthcare professional."
steps:
- name: create-safety-case
type: call
call: "servicenow.create-incident"
with:
short_description: "AE Report: {{product_name}} — {{severity}}"
category: "pharmacovigilance"
assigned_group: "Drug_Safety"
description: "Patient: {{patient_id}}. Product: {{product_name}}. Severity: {{severity}}. Event: {{event_description}}. Reporter: {{reporter_email}}."
- name: create-case-folder
type: call
call: "box.create-folder"
with:
parent_folder_id: "pharmacovigilance_root"
folder_name: "AE_{{create-safety-case.number}}_{{product_name}}"
- name: alert-safety-team
type: call
call: "msteams.send-message"
with:
channel: "drug-safety-alerts"
text: "New Adverse Event: {{product_name}} ({{severity}}). Case: {{create-safety-case.number}}. Patient: {{patient_id}}. Docs: {{create-case-folder.url}}. Reporter: {{reporter_email}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: folders
path: "/folders"
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: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Checks certificate expiration in Kong, generates new certs via Azure Key Vault, deploys to gateway, validates via Postman, and logs in ServiceNow.
naftiko: "0.5"
info:
label: "API Gateway Certificate Rotation"
description: "Checks certificate expiration in Kong, generates new certs via Azure Key Vault, deploys to gateway, validates via Postman, and logs in ServiceNow."
tags:
- devops
- kong
- azure
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: api_gateway_certificate_rotation
description: "Orchestrate api gateway certificate rotation workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: check-cert
type: call
call: "kong.get-certificate"
with:
cert_id: "{{resource_id}}"
- name: generate-cert
type: call
call: "keyvault.create-certificate"
with:
name: "{{resource_id}}"
- name: deploy-cert
type: call
call: "kong.update-certificate"
with:
cert_id: "{{resource_id}}"
cert_data: "{{generate-cert.value}}"
- name: log-rotation
type: call
call: "servicenow.create-record"
with:
table: "cert_rotations"
cert_id: "{{resource_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
Checks the sync status of an Argo CD application deployment. Used by DevOps teams to verify GitOps deployment health for AbbVie's containerized pharma applications.
naftiko: "0.5"
info:
label: "Argo CD Deployment Sync Status"
description: "Checks the sync status of an Argo CD application deployment. Used by DevOps teams to verify GitOps deployment health for AbbVie's containerized pharma applications."
tags:
- devops
- gitops
- argo
- deployment
- kubernetes
capability:
exposes:
- type: mcp
namespace: gitops
port: 8080
tools:
- name: get-sync-status
description: "Look up the sync status of an Argo CD application."
inputParameters:
- name: app_name
in: body
type: string
description: "Argo CD application name."
call: "argocd.get-application"
with:
app_name: "{{app_name}}"
consumes:
- type: http
namespace: argocd
baseUri: "https://argocd.abbvie.com/api/v1"
authentication:
type: bearer
token: "$secrets.argocd_token"
resources:
- name: applications
path: "/applications/{{app_name}}"
inputParameters:
- name: app_name
in: path
operations:
- name: get-application
method: GET
Launches vulnerability scan via Qualys, runs OWASP ZAP against web apps, creates prioritized remediation tickets in Jira, and summarizes in Confluence.
naftiko: "0.5"
info:
label: "Automated Penetration Test Orchestrator"
description: "Launches vulnerability scan via Qualys, runs OWASP ZAP against web apps, creates prioritized remediation tickets in Jira, and summarizes in Confluence."
tags:
- security
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: automated_pen_test_orchestrator
description: "Orchestrate automated penetration test orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: run-qualys
type: call
call: "qualys.launch-scan"
with:
target: "{{resource_id}}"
- name: run-zap
type: call
call: "zap.run-scan"
with:
target_url: "{{resource_id}}"
- name: create-tickets
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Pen test findings: {{resource_id}}"
- name: create-report
type: call
call: "confluence.create-page"
with:
space: "SEC"
title: "Pen test: {{resource_id}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: confluence
baseUri: "https://abbvie.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-operation
method: POST
Retrieves metadata and a pre-signed URL for an object in an S3 bucket. Used by data teams to access research datasets and clinical data exports.
naftiko: "0.5"
info:
label: "AWS S3 Object Retrieval"
description: "Retrieves metadata and a pre-signed URL for an object in an S3 bucket. Used by data teams to access research datasets and clinical data exports."
tags:
- cloud
- aws
- s3
- storage
capability:
exposes:
- type: mcp
namespace: cloud-storage
port: 8080
tools:
- name: get-object
description: "Get S3 object metadata and download URL by bucket and key."
inputParameters:
- name: bucket
in: body
type: string
description: "S3 bucket name."
- name: object_key
in: body
type: string
description: "Object key path."
call: "s3.get-object"
with:
bucket: "{{bucket}}"
object_key: "{{object_key}}"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}/{{object_key}}"
inputParameters:
- name: bucket
in: path
- name: object_key
in: path
operations:
- name: get-object
method: GET
Provisions a new user in Azure Active Directory, assigns them to the appropriate security group, and sends credentials via Microsoft Teams direct message.
naftiko: "0.5"
info:
label: "Azure AD User Provisioning"
description: "Provisions a new user in Azure Active Directory, assigns them to the appropriate security group, and sends credentials via Microsoft Teams direct message."
tags:
- identity
- security
- azure-active-directory
- microsoft-teams
- user-provisioning
capability:
exposes:
- type: mcp
namespace: identity-mgmt
port: 8080
tools:
- name: provision-user
description: "Create a new Azure AD user, assign to a security group, and send welcome credentials via Teams."
inputParameters:
- name: display_name
in: body
type: string
description: "Full name of the new user."
- name: user_principal_name
in: body
type: string
description: "UPN for the new user (email format)."
- name: department
in: body
type: string
description: "Department the user belongs to."
- name: security_group_id
in: body
type: string
description: "Azure AD security group ID to assign the user to."
steps:
- name: create-user
type: call
call: "azuread.create-user"
with:
displayName: "{{display_name}}"
userPrincipalName: "{{user_principal_name}}"
department: "{{department}}"
- name: add-to-group
type: call
call: "azuread.add-group-member"
with:
group_id: "{{security_group_id}}"
member_id: "{{create-user.id}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{user_principal_name}}"
text: "Welcome to AbbVie, {{display_name}}! Your account has been provisioned. Please set up MFA at https://aka.ms/MFASetup."
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- name: group-members
path: "/groups/{{group_id}}/members/$ref"
inputParameters:
- name: group_id
in: path
operations:
- name: add-group-member
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
Retrieves a secret value from Azure Key Vault by name and version. Used by DevOps pipelines to access configuration secrets securely.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retrieval"
description: "Retrieves a secret value from Azure Key Vault by name and version. Used by DevOps pipelines to access configuration secrets securely."
tags:
- security
- azure
- key-vault
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret from Azure Key Vault by name."
inputParameters:
- name: vault_name
in: body
type: string
description: "The Key Vault name."
- name: secret_name
in: body
type: string
description: "The secret name."
call: "keyvault.get-secret"
with:
vault_name: "{{vault_name}}"
secret_name: "{{secret_name}}"
consumes:
- type: http
namespace: keyvault
baseUri: "https://{{vault_name}}.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_kv_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Ingests biomarker results from LIMS, maps to clinical subjects in EDC, loads into Snowflake, and publishes to the biomarker Tableau dashboard.
naftiko: "0.5"
info:
label: "Biomarker Data Integration Pipeline"
description: "Ingests biomarker results from LIMS, maps to clinical subjects in EDC, loads into Snowflake, and publishes to the biomarker Tableau dashboard."
tags:
- clinical-trials
- lims
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: biomarker_data_integration_pipeline
description: "Orchestrate biomarker data integration pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-results
type: call
call: "lims.get-assay-results"
with:
assay_id: "{{resource_id}}"
- name: map-subjects
type: call
call: "edc.get-subject-mapping"
with:
assay_id: "{{resource_id}}"
- name: load-data
type: call
call: "snowflake.load-data"
with:
source_ref: "{{get-results.data_uri}}"
schema: "biomarkers"
- name: refresh-dash
type: call
call: "tableau.refresh-extract"
with:
workbook_id: "biomarker_analytics"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: tableau
baseUri: "https://abbvie-tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: tableau-operation
method: POST
Retrieves the status of a Bitbucket pipeline run. Used by development teams at AbbVie to check build and deployment progress.
naftiko: "0.5"
info:
label: "Bitbucket Pipeline Status"
description: "Retrieves the status of a Bitbucket pipeline run. Used by development teams at AbbVie to check build and deployment progress."
tags:
- devops
- bitbucket
- ci-cd
capability:
exposes:
- type: mcp
namespace: ci-cd
port: 8080
tools:
- name: get-pipeline
description: "Look up a Bitbucket pipeline run by repository and pipeline UUID."
inputParameters:
- name: repo_slug
in: body
type: string
description: "The repository slug."
- name: pipeline_uuid
in: body
type: string
description: "The pipeline UUID."
call: "bitbucket.get-pipeline"
with:
repo_slug: "{{repo_slug}}"
pipeline_uuid: "{{pipeline_uuid}}"
consumes:
- type: http
namespace: bitbucket
baseUri: "https://api.bitbucket.org/2.0/repositories/abbvie"
authentication:
type: bearer
token: "$secrets.bitbucket_token"
resources:
- name: pipelines
path: "/{{repo_slug}}/pipelines/{{pipeline_uuid}}"
inputParameters:
- name: repo_slug
in: path
- name: pipeline_uuid
in: path
operations:
- name: get-pipeline
method: GET
Searches for documents in Box by keyword. Used by regulatory, legal, and clinical operations teams to quickly find SOPs, protocols, and submission documents stored in AbbVie's enterprise content management.
naftiko: "0.5"
info:
label: "Box Document Search"
description: "Searches for documents in Box by keyword. Used by regulatory, legal, and clinical operations teams to quickly find SOPs, protocols, and submission documents stored in AbbVie's enterprise content management."
tags:
- document-management
- content
- box
- search
capability:
exposes:
- type: mcp
namespace: document-mgmt
port: 8080
tools:
- name: search-documents
description: "Search Box for documents matching a keyword query."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword or phrase."
- name: folder_id
in: body
type: string
description: "Optional Box folder ID to scope the search."
call: "box.search"
with:
query: "{{query}}"
ancestor_folder_ids: "{{folder_id}}"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: query
in: query
- name: ancestor_folder_ids
in: query
operations:
- name: search
method: GET
On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "CI/CD Failure Observability Chain"
description: "On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams."
tags:
- devops
- ci-cd
- observability
- github-actions
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-alerts
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a pipeline failure event, create a Datadog event, open a ServiceNow incident, and alert Teams with full context."
inputParameters:
- name: pipeline_id
in: body
type: string
- name: repo
in: body
type: string
- name: branch
in: body
type: string
- name: failed_job_name
in: body
type: string
- name: log_url
in: body
type: string
- name: commit_sha
in: body
type: string
steps:
- name: create-event
type: call
call: "datadog.create-event"
with:
title: "Pipeline failure: {{repo}} / {{branch}}"
text: "Job: {{failed_job_name}}. Commit: {{commit_sha}}. Log: {{log_url}}"
alert_type: "error"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[CI Failure] {{repo}} / {{branch}} — {{failed_job_name}}"
category: "ci_cd_failure"
assigned_group: "Engineering"
description: "Pipeline: {{pipeline_id}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nLog: {{log_url}}\nDatadog event: {{create-event.id}}"
- name: post-alert
type: call
call: "msteams.send-message"
with:
channel: "engineering-alerts"
text: "Pipeline Failure: {{repo}} | Branch: {{branch}} | Job: {{failed_job_name}} | Incident: {{create-incident.number}} | Log: {{log_url}}"
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: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Checks the status of an Apache NiFi data flow that processes clinical trial data, verifies the downstream Elasticsearch index health, and alerts the data engineering team via Microsoft Teams if issues are detected.
naftiko: "0.5"
info:
label: "Clinical Data Pipeline Monitoring"
description: "Checks the status of an Apache NiFi data flow that processes clinical trial data, verifies the downstream Elasticsearch index health, and alerts the data engineering team via Microsoft Teams if issues are detected."
tags:
- data-engineering
- clinical-data
- apache-nifi
- elasticsearch
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-clinical-pipeline
description: "Given a NiFi process group ID, check flow status and Elasticsearch index health, alerting the team on failures."
inputParameters:
- name: process_group_id
in: body
type: string
description: "The NiFi process group ID for the clinical data flow."
- name: index_name
in: body
type: string
description: "The Elasticsearch index name for clinical data."
steps:
- name: get-flow-status
type: call
call: "nifi.get-process-group"
with:
process_group_id: "{{process_group_id}}"
- name: check-index
type: call
call: "elasticsearch.get-index-health"
with:
index_name: "{{index_name}}"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel: "data-engineering"
text: "Clinical Pipeline Status — NiFi flow {{process_group_id}}: {{get-flow-status.status}}. Queued: {{get-flow-status.queued_count}}. ES index {{index_name}}: {{check-index.status}} ({{check-index.doc_count}} docs)."
consumes:
- type: http
namespace: nifi
baseUri: "https://nifi.abbvie.com/nifi-api"
authentication:
type: bearer
token: "$secrets.nifi_token"
resources:
- name: process-groups
path: "/process-groups/{{process_group_id}}/status"
inputParameters:
- name: process_group_id
in: path
operations:
- name: get-process-group
method: GET
- type: http
namespace: elasticsearch
baseUri: "https://es.abbvie.com:9200"
authentication:
type: basic
username: "$secrets.es_user"
password: "$secrets.es_password"
resources:
- name: indices
path: "/_cluster/health/{{index_name}}"
inputParameters:
- name: index_name
in: path
operations:
- name: get-index-health
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Reconciles clinical trial data between the EDC system and Snowflake warehouse, logs discrepancies in ServiceNow, and alerts the data management team in Slack.
naftiko: "0.5"
info:
label: "Clinical Data Reconciliation Pipeline"
description: "Reconciles clinical trial data between the EDC system and Snowflake warehouse, logs discrepancies in ServiceNow, and alerts the data management team in Slack."
tags:
- clinical-trials
- data-management
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: clinical_data_reconciliation_pipeline
description: "Orchestrate clinical data reconciliation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-edc-counts
type: call
call: "edc.get-subject-counts"
with:
trial_id: "{{resource_id}}"
- name: get-wh-counts
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT COUNT(*) FROM subjects WHERE trial_id = '{{resource_id}}'"
warehouse: "CLINICAL_WH"
- name: log-discrepancy
type: call
call: "servicenow.create-incident"
with:
short_description: "Data reconciliation: {{resource_id}}"
category: "data_quality"
- name: notify-team
type: call
call: "slack.send-message"
with:
channel: "clinical-data-ops"
text: "Reconciliation for {{resource_id}} complete. Ticket: {{log-discrepancy.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
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-operation
method: POST
On protocol amendment approval in Oracle CTMS, updates EDC metadata, revises SharePoint documents, files with IRB via Veeva, and notifies clinical ops.
naftiko: "0.5"
info:
label: "Clinical Protocol Amendment Workflow"
description: "On protocol amendment approval in Oracle CTMS, updates EDC metadata, revises SharePoint documents, files with IRB via Veeva, and notifies clinical ops."
tags:
- clinical-trials
- oracle
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: clinical_protocol_amendment_workflow
description: "Orchestrate clinical protocol amendment workflow workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-amendment
type: call
call: "oracle.get-amendment"
with:
amendment_id: "{{resource_id}}"
- name: update-edc
type: call
call: "edc.update-protocol"
with:
protocol_id: "{{get-amendment.protocol_id}}"
version: "{{get-amendment.version}}"
- name: update-docs
type: call
call: "sharepoint.update-document"
with:
site_id: "clinical"
path: "protocols/{{get-amendment.protocol_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "clinical-ops"
text: "Protocol amendment {{resource_id}} processed. Version: {{get-amendment.version}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Monitors clinical supply in SAP, identifies at-risk sites, generates transfer orders, creates ServiceNow logistics tickets, and alerts supply management via Teams.
naftiko: "0.5"
info:
label: "Clinical Supply Chain Rebalancing"
description: "Monitors clinical supply in SAP, identifies at-risk sites, generates transfer orders, creates ServiceNow logistics tickets, and alerts supply management via Teams."
tags:
- clinical-supply
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: clinical_supply_chain_rebalancing
description: "Orchestrate clinical supply chain rebalancing workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: check-inventory
type: call
call: "sap.get-inventory"
with:
material_id: "{{resource_id}}"
- name: identify-risks
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT * FROM supply_forecast WHERE material = '{{resource_id}}'"
warehouse: "SUPPLY_WH"
- name: create-transfer
type: call
call: "sap.create-transfer-order"
with:
material_id: "{{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "clinical-supply"
text: "Rebalancing initiated for {{resource_id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Exports clinical trial data from Oracle, transforms it via Apache NiFi, loads it into Elasticsearch for real-time querying, and notifies the biostatistics team in Microsoft Teams when the pipeline completes.
naftiko: "0.5"
info:
label: "Clinical Trial Data Export to Elasticsearch"
description: "Exports clinical trial data from Oracle, transforms it via Apache NiFi, loads it into Elasticsearch for real-time querying, and notifies the biostatistics team in Microsoft Teams when the pipeline completes."
tags:
- clinical-data
- data-pipeline
- oracle
- apache-nifi
- elasticsearch
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-data-ops
port: 8080
tools:
- name: export-trial-data
description: "Given a trial ID and data cutoff date, trigger the Oracle-to-Elasticsearch pipeline via NiFi and notify the biostatistics team."
inputParameters:
- name: trial_id
in: body
type: string
description: "Clinical trial identifier."
- name: cutoff_date
in: body
type: string
description: "Data cutoff date (YYYY-MM-DD)."
- name: target_index
in: body
type: string
description: "Elasticsearch index name for the exported data."
steps:
- name: trigger-nifi-flow
type: call
call: "nifi.start-process-group"
with:
process_group_id: "clinical-export-{{trial_id}}"
parameters: "{\"trial_id\": \"{{trial_id}}\", \"cutoff_date\": \"{{cutoff_date}}\", \"target_index\": \"{{target_index}}\"}"
- name: verify-index
type: call
call: "elasticsearch.get-index-health"
with:
index_name: "{{target_index}}"
- name: notify-biostat
type: call
call: "msteams.send-message"
with:
channel: "biostatistics"
text: "Clinical data export complete: Trial {{trial_id}} (cutoff: {{cutoff_date}}). Index {{target_index}}: {{verify-index.status}} with {{verify-index.doc_count}} documents."
consumes:
- type: http
namespace: nifi
baseUri: "https://nifi.abbvie.com/nifi-api"
authentication:
type: bearer
token: "$secrets.nifi_token"
resources:
- name: process-groups
path: "/process-groups/{{process_group_id}}"
inputParameters:
- name: process_group_id
in: path
operations:
- name: start-process-group
method: PUT
- type: http
namespace: elasticsearch
baseUri: "https://es.abbvie.com:9200"
authentication:
type: basic
username: "$secrets.es_user"
password: "$secrets.es_password"
resources:
- name: indices
path: "/_cluster/health/{{index_name}}"
inputParameters:
- name: index_name
in: path
operations:
- name: get-index-health
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
On approval of a new clinical trial site in Oracle, creates a ServiceNow activation ticket, provisions a SharePoint document library for site files, and notifies the clinical operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Clinical Trial Site Activation Orchestrator"
description: "On approval of a new clinical trial site in Oracle, creates a ServiceNow activation ticket, provisions a SharePoint document library for site files, and notifies the clinical operations team in Microsoft Teams."
tags:
- clinical-trials
- site-activation
- oracle
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: clinical-ops
port: 8080
tools:
- name: activate-trial-site
description: "Given an Oracle clinical trial ID and site code, orchestrate site activation across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: trial_id
in: body
type: string
description: "The Oracle clinical trial identifier."
- name: site_code
in: body
type: string
description: "The investigator site code."
- name: principal_investigator
in: body
type: string
description: "Name of the principal investigator at the site."
steps:
- name: get-trial
type: call
call: "oracle.get-trial"
with:
trial_id: "{{trial_id}}"
- name: open-activation-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Site activation: {{site_code}} for trial {{get-trial.trial_name}}"
category: "clinical_site_activation"
assigned_group: "Clinical_Ops"
description: "Activate site {{site_code}} for trial {{trial_id}} ({{get-trial.trial_name}}). PI: {{principal_investigator}}. Phase: {{get-trial.phase}}."
- name: provision-site-library
type: call
call: "sharepoint.create-folder"
with:
site_id: "clinical_trials_site"
folder_path: "Trials/{{trial_id}}/Sites/{{site_code}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "clinical-operations"
text: "Site {{site_code}} activated for trial {{get-trial.trial_name}} (PI: {{principal_investigator}}). Ticket: {{open-activation-ticket.number}}. Documents: {{provision-site-library.url}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://abbvie-cloud.oraclecloud.com/api/v1/clinical"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: trials
path: "/trials/{{trial_id}}"
inputParameters:
- name: trial_id
in: path
operations:
- name: get-trial
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.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: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Queries AWS Cost Explorer for anomalies, cross-references Azure costs, creates a Jira ticket, updates Grafana dashboard, and alerts the cloud team in Teams.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Detector"
description: "Queries AWS Cost Explorer for anomalies, cross-references Azure costs, creates a Jira ticket, updates Grafana dashboard, and alerts the cloud team in Teams."
tags:
- finops
- aws
- jira
- grafana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: cloud_cost_anomaly_detector
description: "Orchestrate cloud cost anomaly detector workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-aws-costs
type: call
call: "aws.get-cost-report"
with:
date_range: "{{resource_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "FINOPS"
summary: "Cost anomaly detected: {{resource_id}}"
- name: update-dashboard
type: call
call: "grafana.annotate"
with:
dashboard_uid: "finops"
text: "Anomaly: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "cloud-finops"
text: "Cost anomaly for {{resource_id}}. Ticket: {{create-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: grafana
baseUri: "https://abbvie-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Retrieves recent WAF events from Cloudflare for a given zone, filters by rule ID, and creates a security incident in ServiceNow if attack patterns are detected against AbbVie's public-facing applications.
naftiko: "0.5"
info:
label: "Cloudflare WAF Event Investigation"
description: "Retrieves recent WAF events from Cloudflare for a given zone, filters by rule ID, and creates a security incident in ServiceNow if attack patterns are detected against AbbVie's public-facing applications."
tags:
- security
- web-application-firewall
- cloudflare
- servicenow
- incident-response
capability:
exposes:
- type: mcp
namespace: web-security
port: 8080
tools:
- name: investigate-waf-events
description: "Given a Cloudflare zone ID and rule ID, retrieve WAF events and escalate to ServiceNow if thresholds are exceeded."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone ID."
- name: rule_id
in: body
type: string
description: "WAF rule ID to investigate."
- name: time_range
in: body
type: string
description: "Time range for event lookup (e.g., last_1_hour)."
steps:
- name: get-waf-events
type: call
call: "cloudflare.get-firewall-events"
with:
zone_id: "{{zone_id}}"
rule_id: "{{rule_id}}"
time_range: "{{time_range}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "WAF Alert: Rule {{rule_id}} triggered on zone {{zone_id}}"
category: "security_incident"
assigned_group: "Security_Operations"
urgency: "2"
description: "Cloudflare WAF rule {{rule_id}} triggered {{get-waf-events.event_count}} times in {{time_range}}. Top source IPs: {{get-waf-events.top_source_ips}}. Zone: {{zone_id}}."
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: firewall-events
path: "/zones/{{zone_id}}/firewall/events"
inputParameters:
- name: zone_id
in: path
- name: rule_id
in: query
- name: time_range
in: query
operations:
- name: get-firewall-events
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.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
Extracts prescription data from IQVIA, blends with Salesforce CRM data, loads into Snowflake, triggers Tableau refresh, and publishes dashboards.
naftiko: "0.5"
info:
label: "Commercial Analytics Refresh Pipeline"
description: "Extracts prescription data from IQVIA, blends with Salesforce CRM data, loads into Snowflake, triggers Tableau refresh, and publishes dashboards."
tags:
- commercial
- salesforce
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: commercial_analytics_refresh_pipeline
description: "Orchestrate commercial analytics refresh pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: extract-rx
type: call
call: "iqvia.get-rx-data"
with:
product_id: "{{resource_id}}"
- name: get-crm-data
type: call
call: "salesforce.get-territory-data"
with:
product_id: "{{resource_id}}"
- name: load-data
type: call
call: "snowflake.load-data"
with:
source_ref: "{{extract-rx.data_uri}}"
schema: "commercial"
- name: refresh-tableau
type: call
call: "tableau.refresh-extract"
with:
workbook_id: "commercial_insights"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-operation
method: POST
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: tableau
baseUri: "https://abbvie-tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: tableau-operation
method: POST
Queries overdue training from Cornerstone LMS, looks up managers in Workday, sends reminders via Outlook, escalates to HR in ServiceNow, and reports in Power BI.
naftiko: "0.5"
info:
label: "Compliance Training Enforcement Pipeline"
description: "Queries overdue training from Cornerstone LMS, looks up managers in Workday, sends reminders via Outlook, escalates to HR in ServiceNow, and reports in Power BI."
tags:
- compliance
- workday
- servicenow
- power-bi
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: compliance_training_enforcement_pipeline
description: "Orchestrate compliance training enforcement pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-overdue
type: call
call: "cornerstone.get-overdue-training"
with:
department: "{{resource_id}}"
- name: get-managers
type: call
call: "workday.get-managers"
with:
department: "{{resource_id}}"
- name: escalate
type: call
call: "servicenow.create-request"
with:
short_description: "Overdue training: {{resource_id}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "compliance_training"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
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-operation
method: POST
Retrieves a Confluence page by space key and title. Used across AbbVie teams to quickly access SOPs, process documentation, and regulatory guidelines.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Retrieves a Confluence page by space key and title. Used across AbbVie teams to quickly access SOPs, process documentation, and regulatory guidelines."
tags:
- knowledge-management
- documentation
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: get-confluence-page
description: "Look up a Confluence page by space key and title."
inputParameters:
- name: space_key
in: body
type: string
description: "Confluence space key."
- name: title
in: body
type: string
description: "Page title to search for."
call: "confluence.get-page"
with:
space_key: "{{space_key}}"
title: "{{title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
inputParameters:
- name: space_key
in: query
- name: title
in: query
operations:
- name: get-page
method: GET
Extracts contract metadata from Icertis CLM, validates terms in SharePoint, logs compliance in ServiceNow, updates Salesforce, and notifies legal via Teams.
naftiko: "0.5"
info:
label: "Contract Lifecycle Management Pipeline"
description: "Extracts contract metadata from Icertis CLM, validates terms in SharePoint, logs compliance in ServiceNow, updates Salesforce, and notifies legal via Teams."
tags:
- legal
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: contract_lifecycle_management_pipeline
description: "Orchestrate contract lifecycle management pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-contract
type: call
call: "icertis.get-contract"
with:
contract_id: "{{resource_id}}"
- name: validate-terms
type: call
call: "sharepoint.get-template"
with:
template_id: "legal_terms"
- name: log-compliance
type: call
call: "servicenow.create-record"
with:
table: "contract_compliance"
contract_id: "{{resource_id}}"
- name: notify-legal
type: call
call: "msteams.send-message"
with:
channel: "legal"
text: "Contract {{resource_id}} validated. Status: {{log-compliance.state}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Retrieves the status of a Coupa purchase requisition by requisition number. Used by procurement teams at AbbVie to track order progress.
naftiko: "0.5"
info:
label: "Coupa Purchase Requisition Status"
description: "Retrieves the status of a Coupa purchase requisition by requisition number. Used by procurement teams at AbbVie to track order progress."
tags:
- procurement
- coupa
- purchasing
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-requisition
description: "Look up a Coupa purchase requisition by number."
inputParameters:
- name: requisition_number
in: body
type: string
description: "The Coupa requisition number."
call: "coupa.get-requisition"
with:
requisition_number: "{{requisition_number}}"
consumes:
- type: http
namespace: coupa
baseUri: "https://abbvie.coupahost.com/api"
authentication:
type: bearer
token: "$secrets.coupa_api_key"
resources:
- name: requisitions
path: "/requisitions/{{requisition_number}}"
inputParameters:
- name: requisition_number
in: path
operations:
- name: get-requisition
method: GET
Searches for PII across Salesforce, Workday, and Snowflake, compiles results, logs in OneTrust, and sends the response via encrypted email.
naftiko: "0.5"
info:
label: "Data Privacy DSAR Processor"
description: "Searches for PII across Salesforce, Workday, and Snowflake, compiles results, logs in OneTrust, and sends the response via encrypted email."
tags:
- privacy
- salesforce
- workday
- snowflake
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: data_privacy_dsar_processor
description: "Orchestrate data privacy dsar processor workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: search-sf
type: call
call: "salesforce.search-pii"
with:
subject_id: "{{resource_id}}"
- name: search-wd
type: call
call: "workday.search-employee"
with:
subject_id: "{{resource_id}}"
- name: search-sf-data
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT * FROM pii_catalog WHERE subject = '{{resource_id}}'"
warehouse: "PRIVACY_WH"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "privacy"
text: "DSAR complete for {{resource_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-operation
method: POST
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-operation
method: POST
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Runs schema comparison between Oracle and PostgreSQL, executes row count validation, generates diff report in Confluence, and creates Jira tasks.
naftiko: "0.5"
info:
label: "Database Migration Validation Pipeline"
description: "Runs schema comparison between Oracle and PostgreSQL, executes row count validation, generates diff report in Confluence, and creates Jira tasks."
tags:
- data-engineering
- confluence
- jira
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: database_migration_validation_pipeline
description: "Orchestrate database migration validation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: compare-schemas
type: call
call: "oracle.get-schema"
with:
table_name: "{{resource_id}}"
- name: validate-counts
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT COUNT(*) FROM {{resource_id}}"
warehouse: "MIGRATION_WH"
- name: create-report
type: call
call: "confluence.create-page"
with:
space: "DBA"
title: "Migration report: {{resource_id}}"
- name: create-tasks
type: call
call: "jira.create-issue"
with:
project: "DBA"
summary: "Migration validation: {{resource_id}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
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-operation
method: POST
Retrieves the current status and details of a Datadog monitor by ID. Used by DevOps and SRE teams to quickly check infrastructure alert states for AbbVie's cloud environments.
naftiko: "0.5"
info:
label: "Datadog Alert Lookup"
description: "Retrieves the current status and details of a Datadog monitor by ID. Used by DevOps and SRE teams to quickly check infrastructure alert states for AbbVie's cloud environments."
tags:
- devops
- monitoring
- datadog
- infrastructure
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-monitor-status
description: "Look up a Datadog monitor by ID and return its current status, name, and last triggered timestamp."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
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: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
When an FDA label change is required, retrieves the current label from SharePoint, creates a review task in ServiceNow for regulatory affairs, notifies medical writing in Microsoft Teams, and logs the change in Confluence for audit trail.
naftiko: "0.5"
info:
label: "Drug Label Update Workflow"
description: "When an FDA label change is required, retrieves the current label from SharePoint, creates a review task in ServiceNow for regulatory affairs, notifies medical writing in Microsoft Teams, and logs the change in Confluence for audit trail."
tags:
- regulatory
- drug-labeling
- fda
- sharepoint
- servicenow
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: regulatory-labeling
port: 8080
tools:
- name: initiate-label-update
description: "Given a product code and change reason, start the drug label update workflow across regulatory, medical writing, and QA systems."
inputParameters:
- name: product_code
in: body
type: string
description: "AbbVie product code."
- name: ndc_code
in: body
type: string
description: "National Drug Code."
- name: change_reason
in: body
type: string
description: "Reason for the label update (e.g., safety update, new indication)."
- name: priority
in: body
type: string
description: "Priority level: routine, urgent, safety."
steps:
- name: get-current-label
type: call
call: "sharepoint.list-folder"
with:
site_id: "regulatory_labels"
folder_path: "Labels/{{product_code}}/Current"
- name: create-review-task
type: call
call: "servicenow.create-task"
with:
short_description: "Label update: {{product_code}} (NDC: {{ndc_code}}) — {{change_reason}}"
assigned_group: "Regulatory_Affairs"
category: "label_update"
description: "Product: {{product_code}}\nNDC: {{ndc_code}}\nReason: {{change_reason}}\nPriority: {{priority}}\nCurrent label: {{get-current-label.folder_url}}"
- name: notify-medical-writing
type: call
call: "msteams.send-message"
with:
channel: "medical-writing"
text: "Label Update Required: {{product_code}} ({{ndc_code}}). Reason: {{change_reason}}. Priority: {{priority}}. Task: {{create-review-task.number}}. Current label: {{get-current-label.folder_url}}"
- name: log-change
type: call
call: "confluence.create-page"
with:
space_key: "REGLABEL"
title: "Label Change: {{product_code}} — {{create-review-task.number}}"
body: "Product: {{product_code}}\nNDC: {{ndc_code}}\nReason: {{change_reason}}\nPriority: {{priority}}\nTask: {{create-review-task.number}}\nInitiated: {{create-review-task.created_at}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folder-contents
path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: list-folder
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
When a manufacturing deviation is reported in SAP, creates a quality investigation in Veeva, assigns corrective actions in Jira, and notifies QA via Teams.
naftiko: "0.5"
info:
label: "Drug Manufacturing Deviation Handler"
description: "When a manufacturing deviation is reported in SAP, creates a quality investigation in Veeva, assigns corrective actions in Jira, and notifies QA via Teams."
tags:
- manufacturing
- quality
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: drug_manufacturing_deviation_handler
description: "Orchestrate drug manufacturing deviation handler workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-deviation
type: call
call: "sap.get-deviation"
with:
deviation_id: "{{resource_id}}"
- name: create-investigation
type: call
call: "veeva.create-investigation"
with:
deviation_id: "{{resource_id}}"
description: "{{get-deviation.description}}"
- name: create-capa
type: call
call: "jira.create-issue"
with:
project: "QA"
summary: "CAPA for deviation {{resource_id}}"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel: "quality-assurance"
text: "Deviation {{resource_id}}: {{get-deviation.description}}. CAPA: {{create-capa.key}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
When an SAP supply chain alert fires for a critical raw material, creates a ServiceNow priority incident, notifies the supply chain team in Microsoft Teams, and logs an entry in Confluence for audit tracking.
naftiko: "0.5"
info:
label: "Drug Supply Chain Disruption Escalation"
description: "When an SAP supply chain alert fires for a critical raw material, creates a ServiceNow priority incident, notifies the supply chain team in Microsoft Teams, and logs an entry in Confluence for audit tracking."
tags:
- supply-chain
- manufacturing
- sap
- servicenow
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: escalate-disruption
description: "Given a material shortage alert from SAP, create a priority incident, notify the supply chain team, and log the disruption for GMP audit trail."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number for the affected raw material."
- name: plant_code
in: body
type: string
description: "SAP plant code where the shortage is detected."
- name: shortage_quantity
in: body
type: string
description: "Quantity shortfall in base unit of measure."
- name: affected_product
in: body
type: string
description: "The finished drug product affected by the shortage."
steps:
- name: get-material
type: call
call: "sap.get-material"
with:
material_number: "{{material_number}}"
- name: create-priority-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Supply disruption: {{get-material.material_name}} at plant {{plant_code}}"
category: "supply_chain_disruption"
assigned_group: "Supply_Chain_Ops"
urgency: "1"
description: "Material: {{material_number}} ({{get-material.material_name}}). Plant: {{plant_code}}. Shortage: {{shortage_quantity}} {{get-material.unit}}. Affected product: {{affected_product}}."
- name: notify-supply-team
type: call
call: "msteams.send-message"
with:
channel: "supply-chain-alerts"
text: "SUPPLY DISRUPTION: {{get-material.material_name}} at plant {{plant_code}}. Shortage: {{shortage_quantity}} {{get-material.unit}}. Affected: {{affected_product}}. Incident: {{create-priority-incident.number}}"
- name: log-audit-entry
type: call
call: "confluence.create-page"
with:
space_key: "SUPPLY"
title: "Disruption Log: {{material_number}} — {{plant_code}} — {{create-priority-incident.number}}"
body: "Material: {{material_number}} ({{get-material.material_name}})\nPlant: {{plant_code}}\nShortage: {{shortage_quantity}}\nProduct: {{affected_product}}\nIncident: {{create-priority-incident.number}}\nTimestamp: {{create-priority-incident.created_at}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Material('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves application performance metrics from Dynatrace including response time, error rate, and throughput for AbbVie's patient-facing and commercial web applications.
naftiko: "0.5"
info:
label: "Dynatrace Application Performance"
description: "Retrieves application performance metrics from Dynatrace including response time, error rate, and throughput for AbbVie's patient-facing and commercial web applications."
tags:
- devops
- apm
- dynatrace
- performance
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-performance
description: "Look up Dynatrace application performance metrics for a given application entity ID."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace application entity ID."
call: "dynatrace.get-entity"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://abbvie.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-entity
method: GET
Captures EHS incidents from Intelex, correlates with SAP site data, generates a CAPA investigation, and alerts site leadership via Teams.
naftiko: "0.5"
info:
label: "Environmental Health Safety Incident Pipeline"
description: "Captures EHS incidents from Intelex, correlates with SAP site data, generates a CAPA investigation, and alerts site leadership via Teams."
tags:
- ehs
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: ehs_incident_pipeline
description: "Orchestrate environmental health safety incident pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-incident
type: call
call: "intelex.get-incident"
with:
incident_id: "{{resource_id}}"
- name: get-site-data
type: call
call: "sap.get-plant"
with:
plant_id: "{{get-incident.plant_id}}"
- name: create-capa
type: call
call: "servicenow.create-request"
with:
short_description: "EHS CAPA: {{resource_id}}"
description: "{{get-incident.description}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "ehs-leadership"
text: "EHS incident {{resource_id}} at {{get-site-data.plant_name}}. CAPA: {{create-capa.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Retrieves application performance traces from Elastic APM by trace ID. Used to diagnose latency issues in AbbVie's microservices architecture.
naftiko: "0.5"
info:
label: "Elastic APM Trace Lookup"
description: "Retrieves application performance traces from Elastic APM by trace ID. Used to diagnose latency issues in AbbVie's microservices architecture."
tags:
- observability
- elastic
- apm
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-trace
description: "Look up an Elastic APM trace by trace ID."
inputParameters:
- name: trace_id
in: body
type: string
description: "The distributed trace ID."
call: "elastic-apm.get-trace"
with:
trace_id: "{{trace_id}}"
consumes:
- type: http
namespace: elastic-apm
baseUri: "https://abbvie-elastic.com/api/apm"
authentication:
type: bearer
token: "$secrets.elastic_api_key"
resources:
- name: traces
path: "/traces/{{trace_id}}"
inputParameters:
- name: trace_id
in: path
operations:
- name: get-trace
method: GET
On termination in Workday, disables Okta account, revokes Azure AD access, creates ServiceNow ticket for equipment return, and archives Box files.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestrator"
description: "On termination in Workday, disables Okta account, revokes Azure AD access, creates ServiceNow ticket for equipment return, and archives Box files."
tags:
- hr
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: employee_offboarding_orchestrator
description: "Orchestrate employee offboarding orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-employee
type: call
call: "workday.get-employee"
with:
employee_id: "{{resource_id}}"
- name: disable-okta
type: call
call: "okta.deactivate-user"
with:
user_id: "{{get-employee.email}}"
- name: create-ticket
type: call
call: "servicenow.create-request"
with:
short_description: "Equipment return: {{get-employee.full_name}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "hr-ops"
text: "Offboarding complete for {{get-employee.full_name}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-operation
method: POST
- type: http
namespace: okta
baseUri: "https://abbvie.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: okta-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Retrieves submitted expense reports from SAP Concur, validates against PeopleSoft cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.
naftiko: "0.5"
info:
label: "Expense Report Processing"
description: "Retrieves submitted expense reports from SAP Concur, validates against PeopleSoft cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected."
tags:
- finance
- expense
- sap-concur
- peoplesoft
- servicenow
- policy-compliance
capability:
exposes:
- type: mcp
namespace: finance-expense
port: 8080
tools:
- name: review-expense-report
description: "Given a Concur expense report ID and employee ID, fetch the report details, validate cost center against PeopleSoft, and flag policy violations to ServiceNow."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: employee_id
in: body
type: string
description: "The PeopleSoft employee ID of the expense submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: get-employee
type: call
call: "peoplesoft.get-employee"
with:
employee_id: "{{employee_id}}"
- name: open-review-task
type: call
call: "servicenow.create-task"
with:
short_description: "Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}."
assigned_group: "Finance_Audit"
category: "expense_review"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: peoplesoft
baseUri: "https://abbvie-hr.peoplesoft.com/api/v1"
authentication:
type: basic
username: "$secrets.peoplesoft_user"
password: "$secrets.peoplesoft_password"
resources:
- name: employees
path: "/employees/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Fetches the latest workflow run status from GitHub Actions for a given repository and branch. Used by engineering teams to check build health for AbbVie's internal tools and data pipelines.
naftiko: "0.5"
info:
label: "GitHub Actions CI Pipeline Status"
description: "Fetches the latest workflow run status from GitHub Actions for a given repository and branch. Used by engineering teams to check build health for AbbVie's internal tools and data pipelines."
tags:
- devops
- ci-cd
- github
- github-actions
capability:
exposes:
- type: mcp
namespace: ci-cd
port: 8080
tools:
- name: get-pipeline-status
description: "Look up the latest GitHub Actions workflow run for a repository and branch."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in owner/repo format."
- name: branch
in: body
type: string
description: "Branch name to check."
call: "github.get-workflow-runs"
with:
repo: "{{repo}}"
branch: "{{branch}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs"
inputParameters:
- name: repo
in: path
- name: branch
in: query
operations:
- name: get-workflow-runs
method: GET
Retrieves metadata about a GitHub repository including last commit, open PRs, and branch protection status. Used by platform engineering at AbbVie.
naftiko: "0.5"
info:
label: "GitHub Repository Info"
description: "Retrieves metadata about a GitHub repository including last commit, open PRs, and branch protection status. Used by platform engineering at AbbVie."
tags:
- devops
- github
- source-control
capability:
exposes:
- type: mcp
namespace: source-control
port: 8080
tools:
- name: get-repo
description: "Retrieve GitHub repository metadata by owner and repo name."
inputParameters:
- name: repo_name
in: body
type: string
description: "Repository name in owner/repo format."
call: "github.get-repo"
with:
repo_name: "{{repo_name}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo_name}}"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-repo
method: GET
Pulls Google Analytics campaign performance data for an AbbVie HCP marketing campaign and posts a summary to a Confluence page for the brand marketing team.
naftiko: "0.5"
info:
label: "Google Analytics Marketing Report"
description: "Pulls Google Analytics campaign performance data for an AbbVie HCP marketing campaign and posts a summary to a Confluence page for the brand marketing team."
tags:
- marketing
- analytics
- google-analytics
- confluence
- hcp-marketing
capability:
exposes:
- type: mcp
namespace: marketing-analytics
port: 8080
tools:
- name: generate-campaign-report
description: "Given a GA property ID and campaign name, pull performance metrics and create a Confluence report page."
inputParameters:
- name: property_id
in: body
type: string
description: "Google Analytics 4 property ID."
- name: campaign_name
in: body
type: string
description: "Name of the HCP marketing campaign."
- name: date_range
in: body
type: string
description: "Date range for the report (e.g., last_30_days)."
steps:
- name: get-campaign-data
type: call
call: "ga.run-report"
with:
property_id: "{{property_id}}"
campaign_name: "{{campaign_name}}"
date_range: "{{date_range}}"
- name: create-report-page
type: call
call: "confluence.create-page"
with:
space_key: "MKT"
title: "Campaign Report: {{campaign_name}} — {{date_range}}"
body: "Campaign: {{campaign_name}}\nSessions: {{get-campaign-data.sessions}}\nConversions: {{get-campaign-data.conversions}}\nBounce Rate: {{get-campaign-data.bounce_rate}}\nAvg Session Duration: {{get-campaign-data.avg_session_duration}}"
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
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Publishes a new Google Tag Manager container version for AbbVie's digital marketing properties, logs the deployment in Adobe Analytics, and notifies the digital team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Version Publish"
description: "Publishes a new Google Tag Manager container version for AbbVie's digital marketing properties, logs the deployment in Adobe Analytics, and notifies the digital team in Microsoft Teams."
tags:
- marketing
- tag-management
- google-tag-manager
- adobe-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: digital-marketing
port: 8080
tools:
- name: publish-container
description: "Given a GTM account, container, and workspace, publish the container version and log the deployment."
inputParameters:
- name: account_id
in: body
type: string
description: "GTM account ID."
- name: container_id
in: body
type: string
description: "GTM container ID."
- name: workspace_id
in: body
type: string
description: "GTM workspace ID."
- name: version_name
in: body
type: string
description: "Name for the published version."
steps:
- name: publish-version
type: call
call: "gtm.publish-workspace"
with:
account_id: "{{account_id}}"
container_id: "{{container_id}}"
workspace_id: "{{workspace_id}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "digital-marketing"
text: "GTM Container Published: {{version_name}} (Container: {{container_id}}). Version: {{publish-version.version_id}}. Published at: {{publish-version.published_at}}"
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_tagmanager_token"
resources:
- name: workspaces
path: "/accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}:quick_preview"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
- name: workspace_id
in: path
operations:
- name: publish-workspace
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Retrieves a snapshot of a Grafana dashboard by UID. Used by SRE teams to review infrastructure and application metrics for AbbVie's cloud environments.
naftiko: "0.5"
info:
label: "Grafana Dashboard Viewer"
description: "Retrieves a snapshot of a Grafana dashboard by UID. Used by SRE teams to review infrastructure and application metrics for AbbVie's cloud environments."
tags:
- monitoring
- grafana
- observability
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-dashboard
description: "Retrieve a Grafana dashboard by UID and return panel data."
inputParameters:
- name: dashboard_uid
in: body
type: string
description: "The Grafana dashboard UID."
call: "grafana.get-dashboard"
with:
dashboard_uid: "{{dashboard_uid}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://abbvie-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: dashboards
path: "/dashboards/uid/{{dashboard_uid}}"
inputParameters:
- name: dashboard_uid
in: path
operations:
- name: get-dashboard
method: GET
When a code change is merged to a GxP-validated system, creates a change control record in ServiceNow, runs SonarQube quality gate, uploads evidence to SharePoint, and notifies QA in Microsoft Teams.
naftiko: "0.5"
info:
label: "GxP Validation Change Control"
description: "When a code change is merged to a GxP-validated system, creates a change control record in ServiceNow, runs SonarQube quality gate, uploads evidence to SharePoint, and notifies QA in Microsoft Teams."
tags:
- quality
- gxp
- change-control
- servicenow
- sonarqube
- sharepoint
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: gxp-quality
port: 8080
tools:
- name: process-gxp-change
description: "Given a repository, commit SHA, and system name, execute GxP change control workflow including quality gate check and evidence archival."
inputParameters:
- name: repo
in: body
type: string
description: "Repository in owner/repo format."
- name: commit_sha
in: body
type: string
description: "The merge commit SHA."
- name: system_name
in: body
type: string
description: "Name of the GxP-validated system."
- name: change_description
in: body
type: string
description: "Description of the change being deployed."
steps:
- name: create-change-control
type: call
call: "servicenow.create-change"
with:
short_description: "GxP Change: {{system_name}} — {{commit_sha}}"
description: "Repository: {{repo}}. Commit: {{commit_sha}}. Change: {{change_description}}"
assigned_group: "QA_Validation"
category: "gxp_change_control"
- name: check-quality
type: call
call: "sonarqube.get-quality-gate"
with:
project_key: "{{repo}}"
- name: archive-evidence
type: call
call: "sharepoint.create-folder"
with:
site_id: "gxp_validation"
folder_path: "ChangeControl/{{system_name}}/{{create-change-control.number}}"
- name: notify-qa
type: call
call: "msteams.send-message"
with:
channel: "qa-validation"
text: "GxP Change Control: {{system_name}} — {{create-change-control.number}}. Quality Gate: {{check-quality.status}}. Evidence: {{archive-evidence.url}}. Change: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.abbvie.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status"
inputParameters:
- name: project_key
in: query
operations:
- name: get-quality-gate
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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Creates and schedules a MailChimp email campaign targeting healthcare professionals, tags the campaign in Salesforce for CRM tracking, and logs the launch in Confluence for compliance documentation.
naftiko: "0.5"
info:
label: "HCP Engagement Email Campaign"
description: "Creates and schedules a MailChimp email campaign targeting healthcare professionals, tags the campaign in Salesforce for CRM tracking, and logs the launch in Confluence for compliance documentation."
tags:
- marketing
- hcp-engagement
- mailchimp
- salesforce
- confluence
- compliance
capability:
exposes:
- type: mcp
namespace: hcp-marketing
port: 8080
tools:
- name: launch-hcp-campaign
description: "Given campaign details and a MailChimp audience, create the email campaign, tag the Salesforce campaign, and log in Confluence for regulatory documentation."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Name of the HCP email campaign."
- name: audience_id
in: body
type: string
description: "MailChimp audience (list) ID for HCPs."
- name: subject_line
in: body
type: string
description: "Email subject line."
- name: salesforce_campaign_id
in: body
type: string
description: "Salesforce campaign ID for CRM tracking."
- name: therapeutic_area
in: body
type: string
description: "Therapeutic area (e.g., immunology, oncology)."
steps:
- name: create-email-campaign
type: call
call: "mailchimp.create-campaign"
with:
list_id: "{{audience_id}}"
subject_line: "{{subject_line}}"
title: "{{campaign_name}}"
- name: update-salesforce-campaign
type: call
call: "salesforce.update-campaign"
with:
campaign_id: "{{salesforce_campaign_id}}"
status: "In Progress"
description: "MailChimp campaign {{create-email-campaign.id}} launched for {{therapeutic_area}} HCPs."
- name: log-compliance
type: call
call: "confluence.create-page"
with:
space_key: "MKTCOMPLIANCE"
title: "HCP Campaign Log: {{campaign_name}} — {{therapeutic_area}}"
body: "Campaign: {{campaign_name}}\nTherapeutic Area: {{therapeutic_area}}\nMailChimp ID: {{create-email-campaign.id}}\nSalesforce Campaign: {{salesforce_campaign_id}}\nSubject: {{subject_line}}\nAudience: {{audience_id}}"
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: update-campaign
method: PATCH
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Captures HCP meeting notes from Veeva CRM, syncs to Salesforce, updates compliance records, refreshes Tableau analytics, and sends summary to field team.
naftiko: "0.5"
info:
label: "HCP Engagement Tracking Pipeline"
description: "Captures HCP meeting notes from Veeva CRM, syncs to Salesforce, updates compliance records, refreshes Tableau analytics, and sends summary to field team."
tags:
- commercial
- salesforce
- tableau
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: hcp_engagement_tracking_pipeline
description: "Orchestrate hcp engagement tracking pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-meetings
type: call
call: "veeva.get-hcp-meetings"
with:
rep_id: "{{resource_id}}"
- name: sync-salesforce
type: call
call: "salesforce.update-engagement"
with:
rep_id: "{{resource_id}}"
meetings: "{{get-meetings.count}}"
- name: refresh-analytics
type: call
call: "tableau.refresh-extract"
with:
workbook_id: "hcp_engagement"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "field-force"
text: "HCP engagement synced for rep {{resource_id}}: {{get-meetings.count}} meetings"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-operation
method: POST
- type: http
namespace: tableau
baseUri: "https://abbvie-tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: tableau-operation
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-operation
method: POST
When a new lead is captured in HubSpot from AbbVie's patient or HCP website, syncs the contact to Salesforce and notifies the commercial team in Microsoft Teams.
naftiko: "0.5"
info:
label: "HubSpot Lead Capture to Salesforce"
description: "When a new lead is captured in HubSpot from AbbVie's patient or HCP website, syncs the contact to Salesforce and notifies the commercial team in Microsoft Teams."
tags:
- marketing
- lead-management
- hubspot
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-mgmt
port: 8080
tools:
- name: sync-lead
description: "Given a HubSpot contact ID, sync the lead to Salesforce and notify the commercial team."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "HubSpot contact ID."
- name: campaign_source
in: body
type: string
description: "Marketing campaign that generated the lead."
steps:
- name: get-hubspot-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: create-salesforce-lead
type: call
call: "salesforce.create-lead"
with:
first_name: "{{get-hubspot-contact.first_name}}"
last_name: "{{get-hubspot-contact.last_name}}"
email: "{{get-hubspot-contact.email}}"
company: "{{get-hubspot-contact.company}}"
lead_source: "{{campaign_source}}"
- name: notify-commercial
type: call
call: "msteams.send-message"
with:
channel: "commercial-leads"
text: "New lead synced: {{get-hubspot-contact.first_name}} {{get-hubspot-contact.last_name}} ({{get-hubspot-contact.company}}). Source: {{campaign_source}}. Salesforce ID: {{create-salesforce-lead.id}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Pulls user access from SailPoint, compares against Workday roles, flags anomalies, creates certification tasks in ServiceNow, and emails managers.
naftiko: "0.5"
info:
label: "IT Access Review Certification Workflow"
description: "Pulls user access from SailPoint, compares against Workday roles, flags anomalies, creates certification tasks in ServiceNow, and emails managers."
tags:
- security
- sailpoint
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: it_access_review_certification_workflow
description: "Orchestrate it access review certification workflow workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-access
type: call
call: "sailpoint.get-user-access"
with:
user_id: "{{resource_id}}"
- name: get-role
type: call
call: "workday.get-employee"
with:
employee_id: "{{resource_id}}"
- name: create-cert
type: call
call: "servicenow.create-request"
with:
short_description: "Access review: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "security-ops"
text: "Access review created for {{resource_id}}: {{create-cert.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: workday-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Queries ServiceNow CMDB for assets nearing EOL, retrieves warranty status, creates procurement requests, schedules decommission, and notifies IT ops.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Tracker"
description: "Queries ServiceNow CMDB for assets nearing EOL, retrieves warranty status, creates procurement requests, schedules decommission, and notifies IT ops."
tags:
- it-operations
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: it_asset_lifecycle_tracker
description: "Orchestrate it asset lifecycle tracker workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-eol-assets
type: call
call: "servicenow.get-cmdb-ci"
with:
filter: "eol_date<{{resource_id}}"
- name: check-warranty
type: call
call: "servicenow.get-warranty"
with:
asset_id: "{{get-eol-assets.asset_id}}"
- name: create-procurement
type: call
call: "jira.create-issue"
with:
project: "IT"
summary: "Replace asset: {{get-eol-assets.name}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "it-ops"
text: "EOL assets identified for {{resource_id}}. Procurement: {{create-procurement.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Retrieves the current status and details of a Jira issue by key. Used by engineering teams at AbbVie to check ticket progress and sprint assignments.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves the current status and details of a Jira issue by key. Used by engineering teams at AbbVie to check ticket progress and sprint assignments."
tags:
- devops
- jira
- project-management
capability:
exposes:
- type: mcp
namespace: project-mgmt
port: 8080
tools:
- name: get-issue
description: "Look up a Jira issue by key and return its status, assignee, and summary."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g. PROJ-123)."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abbvie.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Queries active user sessions in Keycloak for a given realm and user. Used by identity and access management teams to troubleshoot SSO issues for AbbVie's internal applications.
naftiko: "0.5"
info:
label: "Keycloak User Session Lookup"
description: "Queries active user sessions in Keycloak for a given realm and user. Used by identity and access management teams to troubleshoot SSO issues for AbbVie's internal applications."
tags:
- security
- identity
- keycloak
- sso
capability:
exposes:
- type: mcp
namespace: iam
port: 8080
tools:
- name: get-user-sessions
description: "Look up active Keycloak sessions for a user in a given realm."
inputParameters:
- name: realm
in: body
type: string
description: "Keycloak realm name."
- name: user_id
in: body
type: string
description: "Keycloak user ID."
call: "keycloak.get-sessions"
with:
realm: "{{realm}}"
user_id: "{{user_id}}"
consumes:
- type: http
namespace: keycloak
baseUri: "https://sso.abbvie.com/auth/admin/realms"
authentication:
type: bearer
token: "$secrets.keycloak_admin_token"
resources:
- name: sessions
path: "/{{realm}}/users/{{user_id}}/sessions"
inputParameters:
- name: realm
in: path
- name: user_id
in: path
operations:
- name: get-sessions
method: GET
Updates rate limiting configuration on a Kong API gateway route for AbbVie's partner-facing APIs, logs the change in ServiceNow, and notifies the integration team.
naftiko: "0.5"
info:
label: "Kong API Gateway Rate Limit Update"
description: "Updates rate limiting configuration on a Kong API gateway route for AbbVie's partner-facing APIs, logs the change in ServiceNow, and notifies the integration team."
tags:
- api-management
- kong
- servicenow
- microsoft-teams
- integration
capability:
exposes:
- type: mcp
namespace: api-ops
port: 8080
tools:
- name: update-rate-limit
description: "Given a Kong route ID and new rate limit, update the plugin configuration, log the change, and notify the team."
inputParameters:
- name: route_id
in: body
type: string
description: "Kong route ID."
- name: rate_limit
in: body
type: string
description: "New rate limit (requests per minute)."
- name: change_reason
in: body
type: string
description: "Reason for the rate limit change."
steps:
- name: update-plugin
type: call
call: "kong.update-rate-limit"
with:
route_id: "{{route_id}}"
rate_limit: "{{rate_limit}}"
- name: log-change
type: call
call: "servicenow.create-change"
with:
short_description: "Kong rate limit update: route {{route_id}} to {{rate_limit}} rpm"
description: "Route: {{route_id}}\nNew limit: {{rate_limit}} rpm\nReason: {{change_reason}}"
assigned_group: "Integration_Team"
category: "api_management"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "integration-ops"
text: "Kong rate limit updated: Route {{route_id}} now at {{rate_limit}} rpm. Reason: {{change_reason}}. Change: {{log-change.number}}"
consumes:
- type: http
namespace: kong
baseUri: "https://kong-admin.abbvie.com"
authentication:
type: bearer
token: "$secrets.kong_admin_token"
resources:
- name: rate-limit-plugins
path: "/routes/{{route_id}}/plugins/rate-limiting"
inputParameters:
- name: route_id
in: path
operations:
- name: update-rate-limit
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Monitors cluster utilization via Prometheus, evaluates scaling policies, applies HPA adjustments, logs changes in ServiceNow, and notifies platform team in Slack.
naftiko: "0.5"
info:
label: "Kubernetes Cluster Scaling Orchestrator"
description: "Monitors cluster utilization via Prometheus, evaluates scaling policies, applies HPA adjustments, logs changes in ServiceNow, and notifies platform team in Slack."
tags:
- devops
- prometheus
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: kubernetes_cluster_scaling_orchestrator
description: "Orchestrate kubernetes cluster scaling orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-metrics
type: call
call: "prometheus.query"
with:
query: "cluster_cpu_utilization{cluster='{{resource_id}}'}"
- name: apply-scaling
type: call
call: "k8s.patch-hpa"
with:
namespace: "{{resource_id}}"
replicas: "{{get-metrics.recommended}}"
- name: log-change
type: call
call: "servicenow.create-record"
with:
table: "scaling_events"
cluster: "{{resource_id}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "platform-eng"
text: "Cluster {{resource_id}} scaled. New replicas: {{get-metrics.recommended}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
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-operation
method: POST
Queries Azure Kubernetes Service for pod status in a given namespace. Used by platform engineering to monitor microservices health for AbbVie's digital health applications.
naftiko: "0.5"
info:
label: "Kubernetes Pod Health Check"
description: "Queries Azure Kubernetes Service for pod status in a given namespace. Used by platform engineering to monitor microservices health for AbbVie's digital health applications."
tags:
- devops
- kubernetes
- azure-kubernetes-service
- platform-engineering
capability:
exposes:
- type: mcp
namespace: k8s-ops
port: 8080
tools:
- name: get-pod-status
description: "List pods and their statuses in an AKS namespace."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace to query."
call: "aks.list-pods"
with:
namespace: "{{namespace}}"
consumes:
- type: http
namespace: aks
baseUri: "https://abbvie-aks.hcp.eastus.azmk8s.io"
authentication:
type: bearer
token: "$secrets.aks_token"
resources:
- name: pods
path: "/api/v1/namespaces/{{namespace}}/pods"
inputParameters:
- name: namespace
in: path
operations:
- name: list-pods
method: GET
Publishes an approved job posting to LinkedIn, logs the posting in Salesforce for talent acquisition tracking, and notifies the recruiting team in Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Publisher"
description: "Publishes an approved job posting to LinkedIn, logs the posting in Salesforce for talent acquisition tracking, and notifies the recruiting team in Microsoft Teams."
tags:
- hr
- talent-acquisition
- linkedin
- salesforce
- microsoft-teams
- recruiting
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: publish-job-posting
description: "Given job details, publish to LinkedIn, log in Salesforce, and notify the recruiting team."
inputParameters:
- name: job_title
in: body
type: string
description: "Title of the job posting."
- name: job_description
in: body
type: string
description: "Full job description text."
- name: location
in: body
type: string
description: "Job location."
- name: department
in: body
type: string
description: "Hiring department."
- name: requisition_id
in: body
type: string
description: "Internal requisition ID from PeopleSoft."
steps:
- name: post-to-linkedin
type: call
call: "linkedin.create-job-posting"
with:
title: "{{job_title}}"
description: "{{job_description}}"
location: "{{location}}"
- name: log-in-salesforce
type: call
call: "salesforce.create-record"
with:
object_type: "Job_Posting__c"
fields: "{\"Name\": \"{{job_title}}\", \"LinkedIn_Post_Id__c\": \"{{post-to-linkedin.id}}\", \"Requisition_Id__c\": \"{{requisition_id}}\", \"Department__c\": \"{{department}}\"}"
- name: notify-recruiters
type: call
call: "msteams.send-message"
with:
channel: "talent-acquisition"
text: "New job posted to LinkedIn: {{job_title}} ({{location}}). Req: {{requisition_id}}. LinkedIn ID: {{post-to-linkedin.id}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/simpleJobPostings"
operations:
- name: create-job-posting
method: POST
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects/{{object_type}}"
inputParameters:
- name: object_type
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: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Retrieves batch record data from Oracle E-Business Suite, validates against SAP BW quality metrics, and creates a QA review task in ServiceNow for GMP compliance sign-off.
naftiko: "0.5"
info:
label: "Manufacturing Batch Record Review"
description: "Retrieves batch record data from Oracle E-Business Suite, validates against SAP BW quality metrics, and creates a QA review task in ServiceNow for GMP compliance sign-off."
tags:
- manufacturing
- quality
- gmp
- oracle-ebs
- sap-bw
- servicenow
capability:
exposes:
- type: mcp
namespace: manufacturing-qa
port: 8080
tools:
- name: review-batch-record
description: "Given a batch number and product code, pull batch record from Oracle EBS, validate quality metrics from SAP BW, and create a QA review task."
inputParameters:
- name: batch_number
in: body
type: string
description: "Manufacturing batch number."
- name: product_code
in: body
type: string
description: "Product code for the manufactured drug."
- name: manufacturing_site
in: body
type: string
description: "Manufacturing site identifier."
steps:
- name: get-batch-record
type: call
call: "oracle-ebs.get-batch"
with:
batch_number: "{{batch_number}}"
- name: get-quality-metrics
type: call
call: "sap-bw.get-quality-report"
with:
batch_number: "{{batch_number}}"
product_code: "{{product_code}}"
- name: create-qa-task
type: call
call: "servicenow.create-task"
with:
short_description: "Batch review: {{batch_number}} — {{product_code}} at {{manufacturing_site}}"
description: "Batch: {{batch_number}}\nProduct: {{product_code}}\nSite: {{manufacturing_site}}\nYield: {{get-batch-record.yield_percent}}%\nStatus: {{get-batch-record.status}}\nQuality Score: {{get-quality-metrics.overall_score}}\nDeviations: {{get-quality-metrics.deviation_count}}"
assigned_group: "QA_Manufacturing"
category: "batch_review"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://abbvie-ebs.oraclecloud.com/api/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: batches
path: "/manufacturing/batches/{{batch_number}}"
inputParameters:
- name: batch_number
in: path
operations:
- name: get-batch
method: GET
- type: http
namespace: sap-bw
baseUri: "https://abbvie-bw.sap.com/sap/opu/odata/sap/QUALITY_METRICS_SRV"
authentication:
type: basic
username: "$secrets.sap_bw_user"
password: "$secrets.sap_bw_password"
resources:
- name: quality-reports
path: "/QualityReports(Batch='{{batch_number}}',Product='{{product_code}}')"
inputParameters:
- name: batch_number
in: path
- name: product_code
in: path
operations:
- name: get-quality-report
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Collects metrics from Google Analytics and Adobe Analytics, aggregates in Snowflake, refreshes Power BI, and sends a digest to marketing in Slack.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Aggregator"
description: "Collects metrics from Google Analytics and Adobe Analytics, aggregates in Snowflake, refreshes Power BI, and sends a digest to marketing in Slack."
tags:
- marketing
- google-analytics
- adobe-analytics
- snowflake
- power-bi
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: marketing_campaign_performance_aggregato
description: "Orchestrate marketing campaign performance aggregator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-ga-data
type: call
call: "ga.get-report"
with:
campaign_id: "{{resource_id}}"
- name: get-adobe-data
type: call
call: "adobe.get-report"
with:
campaign_id: "{{resource_id}}"
- name: aggregate
type: call
call: "snowflake.run-query"
with:
sql_query: "INSERT INTO campaign_metrics SELECT * FROM staging WHERE campaign = '{{resource_id}}'"
warehouse: "MARKETING_WH"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "marketing_campaigns"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "marketing-analytics"
text: "Campaign {{resource_id}} metrics updated"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
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-operation
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-operation
method: POST
Extracts master data changes from SAP MDG, validates via Informatica, synchronizes downstream, logs quality scores in Alation, and reports to stewards.
naftiko: "0.5"
info:
label: "Master Data Governance Pipeline"
description: "Extracts master data changes from SAP MDG, validates via Informatica, synchronizes downstream, logs quality scores in Alation, and reports to stewards."
tags:
- data-governance
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: master_data_governance_pipeline
description: "Orchestrate master data governance pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-changes
type: call
call: "sap.get-mdg-changes"
with:
domain: "{{resource_id}}"
- name: validate
type: call
call: "informatica.run-dq-rules"
with:
domain: "{{resource_id}}"
- name: sync-downstream
type: call
call: "snowflake.run-query"
with:
sql_query: "CALL sync_master_data('{{resource_id}}')"
warehouse: "MDG_WH"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "data-governance"
text: "MDG sync for {{resource_id}}: {{validate.quality_score}}% quality"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Searches PubMed for new publications, logs findings in Veeva Vault, creates a Jira review task, and sends a digest to the medical affairs Slack channel.
naftiko: "0.5"
info:
label: "Medical Affairs Literature Review Pipeline"
description: "Searches PubMed for new publications, logs findings in Veeva Vault, creates a Jira review task, and sends a digest to the medical affairs Slack channel."
tags:
- medical-affairs
- pubmed
- veeva
- jira
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: medical_affairs_literature_review_pipeli
description: "Orchestrate medical affairs literature review pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: search-pubmed
type: call
call: "pubmed.search"
with:
query: "{{resource_id}}"
- name: log-findings
type: call
call: "veeva.create-document"
with:
name: "Literature review: {{resource_id}}"
- name: create-review
type: call
call: "jira.create-issue"
with:
project: "MA"
summary: "Literature review: {{resource_id}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "medical-affairs"
text: "New publications for {{resource_id}}: {{search-pubmed.count}} articles. Review: {{create-review.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
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-operation
method: POST
Retrieves a Dynamics 365 account record by ID. Used by AbbVie's market access and key account management teams to check payer and provider account details.
naftiko: "0.5"
info:
label: "Microsoft Dynamics 365 Account Lookup"
description: "Retrieves a Dynamics 365 account record by ID. Used by AbbVie's market access and key account management teams to check payer and provider account details."
tags:
- crm
- market-access
- microsoft-dynamics-365
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-account
description: "Look up a Dynamics 365 account by ID."
inputParameters:
- name: account_id
in: body
type: string
description: "Dynamics 365 account GUID."
call: "dynamics.get-account"
with:
account_id: "{{account_id}}"
consumes:
- type: http
namespace: dynamics
baseUri: "https://abbvie.crm.dynamics.com/api/data/v9.2"
authentication:
type: bearer
token: "$secrets.dynamics_token"
resources:
- name: accounts
path: "/accounts({{account_id}})"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Retrieves MongoDB Atlas cluster status and metrics. Used by data engineering teams to monitor NoSQL databases supporting AbbVie's real-world evidence and patient registry platforms.
naftiko: "0.5"
info:
label: "MongoDB Atlas Cluster Status"
description: "Retrieves MongoDB Atlas cluster status and metrics. Used by data engineering teams to monitor NoSQL databases supporting AbbVie's real-world evidence and patient registry platforms."
tags:
- data-engineering
- database
- mongodb
- monitoring
capability:
exposes:
- type: mcp
namespace: database-ops
port: 8080
tools:
- name: get-cluster-status
description: "Look up MongoDB Atlas cluster status by project and cluster name."
inputParameters:
- name: project_id
in: body
type: string
description: "MongoDB Atlas project ID."
- name: cluster_name
in: body
type: string
description: "Atlas cluster name."
call: "mongodb.get-cluster"
with:
project_id: "{{project_id}}"
cluster_name: "{{cluster_name}}"
consumes:
- type: http
namespace: mongodb
baseUri: "https://cloud.mongodb.com/api/atlas/v2"
authentication:
type: basic
username: "$secrets.mongodb_atlas_public_key"
password: "$secrets.mongodb_atlas_private_key"
resources:
- name: clusters
path: "/groups/{{project_id}}/clusters/{{cluster_name}}"
inputParameters:
- name: project_id
in: path
- name: cluster_name
in: path
operations:
- name: get-cluster
method: GET
Checks the health and throughput metrics for a MuleSoft API gateway endpoint. Used by integration teams to monitor API connectivity for AbbVie's enterprise integrations.
naftiko: "0.5"
info:
label: "MuleSoft API Gateway Health"
description: "Checks the health and throughput metrics for a MuleSoft API gateway endpoint. Used by integration teams to monitor API connectivity for AbbVie's enterprise integrations."
tags:
- integration
- api-management
- mulesoft
- monitoring
capability:
exposes:
- type: mcp
namespace: api-management
port: 8080
tools:
- name: get-api-health
description: "Look up MuleSoft API health metrics for a given environment and API ID."
inputParameters:
- name: environment_id
in: body
type: string
description: "MuleSoft environment ID."
- name: api_id
in: body
type: string
description: "MuleSoft API ID."
call: "mulesoft.get-api-status"
with:
environment_id: "{{environment_id}}"
api_id: "{{api_id}}"
consumes:
- type: http
namespace: mulesoft
baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
authentication:
type: bearer
token: "$secrets.mulesoft_token"
resources:
- name: apis
path: "/organizations/{{environment_id}}/apis/{{api_id}}"
inputParameters:
- name: environment_id
in: path
- name: api_id
in: path
operations:
- name: get-api-status
method: GET
Checks backup status in Veritas NetBackup, validates Azure snapshots, confirms S3 replication, logs results in ServiceNow, and escalates failures via PagerDuty.
naftiko: "0.5"
info:
label: "Multi-Cloud Backup Verification"
description: "Checks backup status in Veritas NetBackup, validates Azure snapshots, confirms S3 replication, logs results in ServiceNow, and escalates failures via PagerDuty."
tags:
- infrastructure
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: multi_cloud_backup_verification
description: "Orchestrate multi-cloud backup verification workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: check-netbackup
type: call
call: "netbackup.get-job-status"
with:
policy_name: "{{resource_id}}"
- name: check-azure
type: call
call: "azure.get-snapshot-status"
with:
resource_group: "{{resource_id}}"
- name: log-results
type: call
call: "servicenow.create-record"
with:
table: "backup_verifications"
policy: "{{resource_id}}"
- name: escalate
type: call
call: "pagerduty.create-incident"
with:
title: "Backup verification: {{resource_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
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-operation
method: POST
On new hire creation in PeopleSoft, opens a ServiceNow onboarding ticket, provisions an Azure AD account, shares a SharePoint onboarding folder, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in PeopleSoft, opens a ServiceNow onboarding ticket, provisions an Azure AD account, shares a SharePoint onboarding folder, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- peoplesoft
- servicenow
- azure-active-directory
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a PeopleSoft employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Azure AD, SharePoint, and Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The PeopleSoft employee 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: "peoplesoft.get-employee"
with:
employee_id: "{{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-ad-account
type: call
call: "azuread.create-user"
with:
displayName: "{{get-employee.full_name}}"
userPrincipalName: "{{get-employee.work_email}}"
department: "{{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 AbbVie, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
consumes:
- type: http
namespace: peoplesoft
baseUri: "https://abbvie-hr.peoplesoft.com/api/v1"
authentication:
type: basic
username: "$secrets.peoplesoft_user"
password: "$secrets.peoplesoft_password"
resources:
- name: employees
path: "/employees/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.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: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
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
Queries New Relic for application error rate metrics over a specified time window. Used by engineering teams to monitor error trends for AbbVie's patient portal and commercial applications.
naftiko: "0.5"
info:
label: "New Relic Application Error Rate"
description: "Queries New Relic for application error rate metrics over a specified time window. Used by engineering teams to monitor error trends for AbbVie's patient portal and commercial applications."
tags:
- devops
- apm
- new-relic
- error-monitoring
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-error-rate
description: "Query New Relic for application error rate by app ID and time window."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic application ID."
- name: time_window
in: body
type: string
description: "Time window for the query (e.g., last_30_minutes)."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
time_window: "{{time_window}}"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
header: "Api-Key"
resources:
- name: applications
path: "/applications/{{app_id}}/metrics/data.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
Retrieves an Okta user profile by email or user ID. Used by IT security to verify identity and access status for AbbVie employees.
naftiko: "0.5"
info:
label: "Okta User Lookup"
description: "Retrieves an Okta user profile by email or user ID. Used by IT security to verify identity and access status for AbbVie employees."
tags:
- security
- okta
- identity
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user
description: "Look up an Okta user by email or ID."
inputParameters:
- name: user_identifier
in: body
type: string
description: "Email or Okta user ID."
call: "okta.get-user"
with:
user_identifier: "{{user_identifier}}"
consumes:
- type: http
namespace: okta
baseUri: "https://abbvie.okta.com/api/v1"
authentication:
type: apiKey
key: "$secrets.okta_api_token"
header: "Authorization"
resources:
- name: users
path: "/users/{{user_identifier}}"
inputParameters:
- name: user_identifier
in: path
operations:
- name: get-user
method: GET
Pulls cost and usage data from Oracle Cloud for a given compartment and date range, formats a summary, and posts it to a Confluence finance report page for budget tracking.
naftiko: "0.5"
info:
label: "Oracle Cloud Infrastructure Cost Report"
description: "Pulls cost and usage data from Oracle Cloud for a given compartment and date range, formats a summary, and posts it to a Confluence finance report page for budget tracking."
tags:
- finance
- cloud
- oracle-cloud
- confluence
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finance
port: 8080
tools:
- name: generate-cost-report
description: "Given an OCI compartment and date range, pull cost data and publish a Confluence report."
inputParameters:
- name: compartment_id
in: body
type: string
description: "Oracle Cloud compartment OCID."
- name: start_date
in: body
type: string
description: "Report start date (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "Report end date (YYYY-MM-DD)."
steps:
- name: get-cost-data
type: call
call: "oci.get-usage"
with:
compartment_id: "{{compartment_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "CLOUDFINANCE"
title: "OCI Cost Report: {{compartment_id}} ({{start_date}} to {{end_date}})"
body: "Compartment: {{compartment_id}}\nPeriod: {{start_date}} to {{end_date}}\nTotal Cost: {{get-cost-data.total_cost}} {{get-cost-data.currency}}\nCompute: {{get-cost-data.compute_cost}}\nStorage: {{get-cost-data.storage_cost}}\nNetwork: {{get-cost-data.network_cost}}"
consumes:
- type: http
namespace: oci
baseUri: "https://usagereports.us-ashburn-1.oci.oraclecloud.com/20200107"
authentication:
type: bearer
token: "$secrets.oci_token"
resources:
- name: usage
path: "/usage"
operations:
- name: get-usage
method: POST
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves details about a PagerDuty incident by ID including current status, assignees, and escalation level. Used by on-call engineers at AbbVie.
naftiko: "0.5"
info:
label: "PagerDuty Incident Lookup"
description: "Retrieves details about a PagerDuty incident by ID including current status, assignees, and escalation level. Used by on-call engineers at AbbVie."
tags:
- devops
- pagerduty
- incident-management
capability:
exposes:
- type: mcp
namespace: incident-mgmt
port: 8080
tools:
- name: get-incident
description: "Look up a PagerDuty incident by ID."
inputParameters:
- name: incident_id
in: body
type: string
description: "The PagerDuty incident ID."
call: "pagerduty.get-incident"
with:
incident_id: "{{incident_id}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
Queries Palo Alto Networks firewall for a specific security rule by name. Used by network security teams to audit firewall configurations protecting AbbVie's data center and cloud perimeters.
naftiko: "0.5"
info:
label: "Palo Alto Networks Firewall Rule Lookup"
description: "Queries Palo Alto Networks firewall for a specific security rule by name. Used by network security teams to audit firewall configurations protecting AbbVie's data center and cloud perimeters."
tags:
- security
- network
- palo-alto-networks
- firewall
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: get-firewall-rule
description: "Look up a Palo Alto Networks security rule by name."
inputParameters:
- name: rule_name
in: body
type: string
description: "Name of the firewall security rule."
call: "paloalto.get-security-rule"
with:
rule_name: "{{rule_name}}"
consumes:
- type: http
namespace: paloalto
baseUri: "https://firewall.abbvie.com/restapi/v10.2"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
header: "X-PAN-KEY"
resources:
- name: security-rules
path: "/Policies/SecurityRules"
inputParameters:
- name: rule_name
in: query
operations:
- name: get-security-rule
method: GET
When a patient applies for AbbVie's assistance program, verifies eligibility via Salesforce, creates a case in ServiceNow, stores consent documents in Box, and sends confirmation via Microsoft Teams to the patient services team.
naftiko: "0.5"
info:
label: "Patient Assistance Program Enrollment"
description: "When a patient applies for AbbVie's assistance program, verifies eligibility via Salesforce, creates a case in ServiceNow, stores consent documents in Box, and sends confirmation via Microsoft Teams to the patient services team."
tags:
- patient-services
- enrollment
- salesforce
- servicenow
- box
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: patient-services
port: 8080
tools:
- name: enroll-patient
description: "Given a patient application, verify eligibility, create a case, store documents, and notify the patient services team."
inputParameters:
- name: patient_id
in: body
type: string
description: "Anonymized patient identifier."
- name: program_code
in: body
type: string
description: "Assistance program code."
- name: product_name
in: body
type: string
description: "AbbVie product the patient needs assistance with."
- name: prescriber_npi
in: body
type: string
description: "Prescribing physician NPI number."
steps:
- name: check-eligibility
type: call
call: "salesforce.get-eligibility"
with:
patient_id: "{{patient_id}}"
program_code: "{{program_code}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "PAP Enrollment: {{patient_id}} — {{product_name}}"
category: "patient_assistance"
assigned_group: "Patient_Services"
description: "Patient: {{patient_id}}. Program: {{program_code}}. Product: {{product_name}}. Prescriber NPI: {{prescriber_npi}}. Eligibility: {{check-eligibility.status}}."
- name: store-consent
type: call
call: "box.create-folder"
with:
parent_folder_id: "patient_assistance_root"
folder_name: "PAP_{{patient_id}}_{{program_code}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "patient-services"
text: "PAP Enrollment: Patient {{patient_id}} for {{product_name}} ({{program_code}}). Eligibility: {{check-eligibility.status}}. Case: {{create-case.number}}. Docs: {{store-consent.url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: eligibility
path: "/sobjects/Eligibility__c/{{patient_id}}"
inputParameters:
- name: patient_id
in: path
operations:
- name: get-eligibility
method: GET
- type: http
namespace: servicenow
baseUri: "https://abbvie.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: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: folders
path: "/folders"
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: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
On new patient enrollment, verifies insurance, creates Salesforce Health Cloud record, provisions a ServiceNow case, and sends confirmation via Twilio.
naftiko: "0.5"
info:
label: "Patient Hub Enrollment Orchestrator"
description: "On new patient enrollment, verifies insurance, creates Salesforce Health Cloud record, provisions a ServiceNow case, and sends confirmation via Twilio."
tags:
- patient-services
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: patient_hub_enrollment_orchestrator
description: "Orchestrate patient hub enrollment orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: verify-insurance
type: call
call: "availity.check-eligibility"
with:
patient_id: "{{resource_id}}"
- name: create-record
type: call
call: "salesforce.create-patient"
with:
patient_id: "{{resource_id}}"
eligibility: "{{verify-insurance.status}}"
- name: create-case
type: call
call: "servicenow.create-request"
with:
short_description: "Patient enrollment: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "patient-services"
text: "Patient {{resource_id}} enrolled. Case: {{create-case.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Detects safety signals in ARGUS, queries adverse event records in Snowflake, creates a Jira ticket for the safety team, and notifies pharmacovigilance leadership in Teams.
naftiko: "0.5"
info:
label: "Pharmacovigilance Signal Detection Pipeline"
description: "Detects safety signals in ARGUS, queries adverse event records in Snowflake, creates a Jira ticket for the safety team, and notifies pharmacovigilance leadership in Teams."
tags:
- pharmacovigilance
- safety
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: pharmacovigilance_signal_detection_pipel
description: "Orchestrate pharmacovigilance signal detection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-signal-data
type: call
call: "argus.get-signal"
with:
signal_id: "{{resource_id}}"
- name: run-ae-analysis
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT * FROM adverse_events WHERE signal_id = '{{resource_id}}'"
warehouse: "PHARMA_WH"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "PV"
summary: "Safety signal: {{get-signal-data.signal_type}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel: "pharmacovigilance"
text: "Signal {{resource_id}}: {{get-signal-data.signal_type}}. Ticket: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Assigns a Pluralsight learning path to an employee for GxP training compliance, logs the assignment in PeopleSoft, and notifies the employee and their manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Pluralsight Learning Assignment"
description: "Assigns a Pluralsight learning path to an employee for GxP training compliance, logs the assignment in PeopleSoft, and notifies the employee and their manager via Microsoft Teams."
tags:
- hr
- training
- learning
- pluralsight
- peoplesoft
- microsoft-teams
- gxp
capability:
exposes:
- type: mcp
namespace: learning-mgmt
port: 8080
tools:
- name: assign-learning-path
description: "Given an employee ID and learning path, create the Pluralsight assignment, log in PeopleSoft, and notify via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "PeopleSoft employee ID."
- name: learning_path_id
in: body
type: string
description: "Pluralsight learning path ID."
- name: due_date
in: body
type: string
description: "Assignment due date (YYYY-MM-DD)."
- name: compliance_type
in: body
type: string
description: "Compliance category (e.g., GxP, SOX, HIPAA)."
steps:
- name: get-employee
type: call
call: "peoplesoft.get-employee"
with:
employee_id: "{{employee_id}}"
- name: create-assignment
type: call
call: "pluralsight.assign-path"
with:
user_email: "{{get-employee.work_email}}"
path_id: "{{learning_path_id}}"
due_date: "{{due_date}}"
- name: notify-employee
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "New training assignment: {{create-assignment.path_name}} ({{compliance_type}}). Due: {{due_date}}. Start here: {{create-assignment.url}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.manager_email}}"
text: "Training assigned to {{get-employee.full_name}}: {{create-assignment.path_name}} ({{compliance_type}}). Due: {{due_date}}."
consumes:
- type: http
namespace: peoplesoft
baseUri: "https://abbvie-hr.peoplesoft.com/api/v1"
authentication:
type: basic
username: "$secrets.peoplesoft_user"
password: "$secrets.peoplesoft_password"
resources:
- name: employees
path: "/employees/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: pluralsight
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: assignments
path: "/assignments"
operations:
- name: assign-path
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 dataset refresh in Power BI for a specified workspace and dataset. Used by analytics teams to ensure pharma sales dashboards reflect the latest data from Teradata.
naftiko: "0.5"
info:
label: "Power BI Report Refresh Trigger"
description: "Triggers a dataset refresh in Power BI for a specified workspace and dataset. Used by analytics teams to ensure pharma sales dashboards reflect the latest data from Teradata."
tags:
- analytics
- business-intelligence
- power-bi
- data-refresh
capability:
exposes:
- type: mcp
namespace: bi-analytics
port: 8080
tools:
- name: refresh-dataset
description: "Trigger a Power BI dataset refresh for a given workspace and dataset ID."
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.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Queries active Prometheus alerts for a given alertname pattern. Used by SRE teams to check alert states for AbbVie's microservices running on Azure Kubernetes Service.
naftiko: "0.5"
info:
label: "Prometheus Alert Query"
description: "Queries active Prometheus alerts for a given alertname pattern. Used by SRE teams to check alert states for AbbVie's microservices running on Azure Kubernetes Service."
tags:
- devops
- monitoring
- prometheus
- sre
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-active-alerts
description: "Query Prometheus for active alerts matching a given alertname pattern."
inputParameters:
- name: alertname
in: body
type: string
description: "Alert name or pattern to query."
call: "prometheus.get-alerts"
with:
alertname: "{{alertname}}"
consumes:
- type: http
namespace: prometheus
baseUri: "https://prometheus.abbvie.com/api/v1"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: alerts
path: "/alerts"
inputParameters:
- name: alertname
in: query
operations:
- name: get-alerts
method: GET
Retrieves the status and findings summary of a Qualys vulnerability scan by scan reference. Used by information security teams at AbbVie.
naftiko: "0.5"
info:
label: "Qualys Vulnerability Scan Status"
description: "Retrieves the status and findings summary of a Qualys vulnerability scan by scan reference. Used by information security teams at AbbVie."
tags:
- security
- qualys
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: get-scan-status
description: "Look up a Qualys vulnerability scan by reference ID."
inputParameters:
- name: scan_ref
in: body
type: string
description: "The Qualys scan reference."
call: "qualys.get-scan"
with:
scan_ref: "{{scan_ref}}"
consumes:
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/2.0"
authentication:
type: basic
username: "$secrets.qualys_user"
password: "$secrets.qualys_password"
resources:
- name: scans
path: "/fo/scan/{{scan_ref}}"
inputParameters:
- name: scan_ref
in: path
operations:
- name: get-scan
method: GET
Extracts claims data from Teradata, links to clinical outcomes in Snowflake, runs models via Databricks, and notifies the HEOR team in Teams.
naftiko: "0.5"
info:
label: "Real World Evidence Data Pipeline"
description: "Extracts claims data from Teradata, links to clinical outcomes in Snowflake, runs models via Databricks, and notifies the HEOR team in Teams."
tags:
- heor
- teradata
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: real_world_evidence_data_pipeline
description: "Orchestrate real world evidence data pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: extract-claims
type: call
call: "teradata.run-query"
with:
sql_query: "SELECT * FROM claims WHERE study = '{{resource_id}}'"
- name: link-outcomes
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT * FROM outcomes WHERE study = '{{resource_id}}'"
warehouse: "HEOR_WH"
- name: run-model
type: call
call: "databricks.run-job"
with:
job_id: "rwe_{{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "heor"
text: "RWE pipeline complete for {{resource_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Queries Redis cluster info to check memory usage, connected clients, and replication status. Used by platform teams to monitor caching layers for AbbVie's high-throughput applications.
naftiko: "0.5"
info:
label: "Redis Cache Health Check"
description: "Queries Redis cluster info to check memory usage, connected clients, and replication status. Used by platform teams to monitor caching layers for AbbVie's high-throughput applications."
tags:
- devops
- caching
- redis
- infrastructure
capability:
exposes:
- type: mcp
namespace: cache-ops
port: 8080
tools:
- name: get-cache-health
description: "Retrieve Redis cluster health metrics including memory, clients, and replication status."
inputParameters:
- name: cluster_endpoint
in: body
type: string
description: "Redis cluster endpoint identifier."
call: "redis.get-info"
with:
cluster_endpoint: "{{cluster_endpoint}}"
consumes:
- type: http
namespace: redis
baseUri: "https://redis-mgmt.abbvie.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_mgmt_token"
resources:
- name: cluster-info
path: "/clusters/{{cluster_endpoint}}/info"
inputParameters:
- name: cluster_endpoint
in: path
operations:
- name: get-info
method: GET
Monitors document readiness in Veeva Vault, validates against checklists in SharePoint, submits to the eCTD gateway, and logs status in ServiceNow.
naftiko: "0.5"
info:
label: "Regulatory Document Submission Tracker"
description: "Monitors document readiness in Veeva Vault, validates against checklists in SharePoint, submits to the eCTD gateway, and logs status in ServiceNow."
tags:
- regulatory
- veeva
- sharepoint
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: regulatory_document_submission_tracker
description: "Orchestrate regulatory document submission tracker workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-docs
type: call
call: "veeva.get-submission-docs"
with:
submission_id: "{{resource_id}}"
- name: validate
type: call
call: "sharepoint.get-checklist"
with:
site_id: "regulatory"
path: "checklists/{{resource_id}}"
- name: submit
type: call
call: "ectd.submit-package"
with:
submission_id: "{{resource_id}}"
- name: log-status
type: call
call: "servicenow.create-record"
with:
table: "regulatory_submissions"
submission_id: "{{resource_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
Assembles a regulatory submission package by pulling the latest approved documents from SharePoint, generating a submission manifest in Confluence, and notifying the regulatory affairs team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Submission Document Assembly"
description: "Assembles a regulatory submission package by pulling the latest approved documents from SharePoint, generating a submission manifest in Confluence, and notifying the regulatory affairs team in Microsoft Teams."
tags:
- regulatory
- submission
- sharepoint
- confluence
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: regulatory-affairs
port: 8080
tools:
- name: assemble-submission
description: "Given a submission ID and product code, pull approved documents from SharePoint, create a Confluence manifest page, and notify the regulatory team."
inputParameters:
- name: submission_id
in: body
type: string
description: "The regulatory submission identifier."
- name: product_code
in: body
type: string
description: "The AbbVie product code for the submission."
- name: target_agency
in: body
type: string
description: "Target regulatory agency (e.g., FDA, EMA, PMDA)."
steps:
- name: get-documents
type: call
call: "sharepoint.list-folder"
with:
site_id: "regulatory_submissions"
folder_path: "Submissions/{{product_code}}/{{submission_id}}"
- name: create-manifest
type: call
call: "confluence.create-page"
with:
space_key: "REG"
title: "Submission Manifest: {{submission_id}} — {{product_code}} ({{target_agency}})"
body: "Submission: {{submission_id}}\nProduct: {{product_code}}\nAgency: {{target_agency}}\nDocuments: {{get-documents.file_count}} files\nAssembled: {{get-documents.folder_url}}"
- name: notify-reg-team
type: call
call: "msteams.send-message"
with:
channel: "regulatory-affairs"
text: "Submission package assembled: {{submission_id}} for {{product_code}} ({{target_agency}}). {{get-documents.file_count}} documents ready. Manifest: {{create-manifest.url}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folder-contents
path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: list-folder
method: GET
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Triggers GitHub Actions workflow, monitors build, deploys to staging via ArgoCD, runs smoke tests, and promotes to production after Slack approval.
naftiko: "0.5"
info:
label: "Release Management Deployment Pipeline"
description: "Triggers GitHub Actions workflow, monitors build, deploys to staging via ArgoCD, runs smoke tests, and promotes to production after Slack approval."
tags:
- devops
- github
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: release_management_deployment_pipeline
description: "Orchestrate release management deployment pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: trigger-build
type: call
call: "github.trigger-workflow"
with:
repo: "{{resource_id}}"
workflow: "release.yml"
- name: deploy-staging
type: call
call: "argocd.sync-app"
with:
app_name: "{{resource_id}}-staging"
- name: run-tests
type: call
call: "postman.run-collection"
with:
collection_id: "{{resource_id}}_smoke"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "releases"
text: "Release {{resource_id}} deployed to staging. Tests: {{run-tests.status}}"
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-operation
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-operation
method: POST
Extracts research data from Oracle, loads into Snowflake, runs quality checks, catalogs in Alation, and notifies data science in Slack.
naftiko: "0.5"
info:
label: "Research Data Lake Ingestion Pipeline"
description: "Extracts research data from Oracle, loads into Snowflake, runs quality checks, catalogs in Alation, and notifies data science in Slack."
tags:
- data-engineering
- oracle
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: research_data_lake_ingestion_pipeline
description: "Orchestrate research data lake ingestion pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: extract-data
type: call
call: "oracle.extract-table"
with:
table_name: "{{resource_id}}"
- name: load-data
type: call
call: "snowflake.load-data"
with:
source_ref: "{{extract-data.file_uri}}"
- name: run-dq
type: call
call: "greatexpectations.validate"
with:
suite: "{{resource_id}}"
- name: notify
type: call
call: "slack.send-message"
with:
channel: "data-science"
text: "Ingestion complete: {{resource_id}}. DQ: {{run-dq.success_percent}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
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-operation
method: POST
Retrieves a Salesforce opportunity by ID including stage, amount, close date, and account name. Used by commercial teams to check deal status for AbbVie therapeutic areas.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Lookup"
description: "Retrieves a Salesforce opportunity by ID including stage, amount, close date, and account name. Used by commercial teams to check deal status for AbbVie therapeutic areas."
tags:
- sales
- crm
- salesforce
- commercial
capability:
exposes:
- type: mcp
namespace: sales-crm
port: 8080
tools:
- name: get-opportunity
description: "Look up a Salesforce opportunity by ID and return its stage, amount, close date, and account."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://abbvie.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
Retrieves invoice from SAP, matches against PO and goods receipt, flags discrepancies, routes for approval in ServiceNow, and posts journal entry.
naftiko: "0.5"
info:
label: "SAP Invoice Three-Way Match"
description: "Retrieves invoice from SAP, matches against PO and goods receipt, flags discrepancies, routes for approval in ServiceNow, and posts journal entry."
tags:
- finance
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: sap_invoice_three_way_match
description: "Orchestrate sap invoice three-way match workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_id: "{{resource_id}}"
- name: get-po
type: call
call: "sap.get-purchase-order"
with:
po_number: "{{get-invoice.po_number}}"
- name: create-approval
type: call
call: "servicenow.create-request"
with:
short_description: "Invoice approval: {{resource_id}}"
amount: "{{get-invoice.amount}}"
- name: post-entry
type: call
call: "sap.post-journal-entry"
with:
invoice_id: "{{resource_id}}"
status: "{{create-approval.state}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date. Used by procurement teams to check PO health for pharmaceutical raw materials and packaging.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date. Used by procurement teams to check PO health for pharmaceutical raw materials and packaging."
tags:
- procurement
- erp
- sap
- purchase-order
- supply-chain
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP 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://abbvie-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Extracts GL data from SAP S/4HANA, validates against business rules, loads into Snowflake, triggers Power BI refresh, and logs sync status in ServiceNow.
naftiko: "0.5"
info:
label: "SAP to Snowflake Financial Sync"
description: "Extracts GL data from SAP S/4HANA, validates against business rules, loads into Snowflake, triggers Power BI refresh, and logs sync status in ServiceNow."
tags:
- finance
- sap
- snowflake
- power-bi
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: sap_to_snowflake_financial_sync
description: "Orchestrate sap to snowflake financial sync workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: extract-gl
type: call
call: "sap.extract-gl-data"
with:
period: "{{resource_id}}"
- name: load-snowflake
type: call
call: "snowflake.load-data"
with:
source_ref: "{{extract-gl.file_uri}}"
schema: "finance"
- name: refresh-bi
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "financial_reporting"
- name: log-sync
type: call
call: "servicenow.create-record"
with:
table: "data_syncs"
period: "{{resource_id}}"
status: "complete"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
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-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
On SIEM alert in Splunk, enriches with CrowdStrike threat intel, creates a PagerDuty incident, blocks IP in firewall, and documents in ServiceNow.
naftiko: "0.5"
info:
label: "Security Incident Response Pipeline"
description: "On SIEM alert in Splunk, enriches with CrowdStrike threat intel, creates a PagerDuty incident, blocks IP in firewall, and documents in ServiceNow."
tags:
- security
- splunk
- pagerduty
- servicenow
capability:
exposes:
- type: mcp
namespace: abbvie
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-alert
type: call
call: "splunk.get-alert"
with:
alert_id: "{{resource_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Security alert: {{get-alert.rule_name}}"
- name: document
type: call
call: "servicenow.create-incident"
with:
short_description: "Security: {{get-alert.rule_name}}"
description: "Alert {{resource_id}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://abbvie-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk-operation
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-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description. Used across AbbVie IT teams for quick incident triage.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description. Used across AbbVie IT teams for quick incident triage."
tags:
- it-service
- incident-management
- servicenow
capability:
exposes:
- type: mcp
namespace: it-service
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number."
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}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Sends a message to a specified Slack channel. Used by automation workflows to notify teams about pipeline events and alerts.
naftiko: "0.5"
info:
label: "Slack Channel Message Sender"
description: "Sends a message to a specified Slack channel. Used by automation workflows to notify teams about pipeline events and alerts."
tags:
- collaboration
- slack
- messaging
capability:
exposes:
- type: mcp
namespace: messaging
port: 8080
tools:
- name: send-message
description: "Send a message to a Slack channel."
inputParameters:
- name: channel
in: body
type: string
description: "The Slack channel name or ID."
- name: text
in: body
type: string
description: "The message text."
call: "slack.send-message"
with:
channel: "{{channel}}"
text: "{{text}}"
consumes:
- 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: send-message
method: POST
Executes a read-only SQL query against AbbVie's Snowflake data warehouse and returns results. Used by analytics teams for ad-hoc reporting on clinical and commercial data.
naftiko: "0.5"
info:
label: "Snowflake Query Runner"
description: "Executes a read-only SQL query against AbbVie's Snowflake data warehouse and returns results. Used by analytics teams for ad-hoc reporting on clinical and commercial data."
tags:
- data
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: run-query
description: "Execute a SQL query against Snowflake and return the result set."
inputParameters:
- name: sql_query
in: body
type: string
description: "The SQL query to execute."
- name: warehouse
in: body
type: string
description: "Snowflake warehouse name."
call: "snowflake.run-query"
with:
sql_query: "{{sql_query}}"
warehouse: "{{warehouse}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Pulls engagement metrics from LinkedIn, Facebook, and Instagram for an AbbVie brand campaign, aggregates the data, and publishes a summary report to Confluence for the digital marketing team.
naftiko: "0.5"
info:
label: "Social Media Brand Monitoring"
description: "Pulls engagement metrics from LinkedIn, Facebook, and Instagram for an AbbVie brand campaign, aggregates the data, and publishes a summary report to Confluence for the digital marketing team."
tags:
- marketing
- social-media
- linkedin
- facebook
- instagram
- confluence
- brand-monitoring
capability:
exposes:
- type: mcp
namespace: social-media
port: 8080
tools:
- name: generate-social-report
description: "Given a campaign identifier, pull engagement data from LinkedIn, Facebook, and Instagram, then publish a consolidated report."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Internal campaign identifier."
- name: campaign_name
in: body
type: string
description: "Campaign display name."
- name: date_range
in: body
type: string
description: "Reporting date range."
steps:
- name: get-linkedin-metrics
type: call
call: "linkedin.get-campaign-analytics"
with:
campaign_id: "{{campaign_id}}"
- name: get-facebook-metrics
type: call
call: "facebook.get-campaign-insights"
with:
campaign_id: "{{campaign_id}}"
- name: get-instagram-metrics
type: call
call: "instagram.get-media-insights"
with:
campaign_id: "{{campaign_id}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "DIGITAL"
title: "Social Media Report: {{campaign_name}} — {{date_range}}"
body: "Campaign: {{campaign_name}}\n\nLinkedIn — Impressions: {{get-linkedin-metrics.impressions}}, Clicks: {{get-linkedin-metrics.clicks}}, Engagement Rate: {{get-linkedin-metrics.engagement_rate}}\n\nFacebook — Reach: {{get-facebook-metrics.reach}}, Clicks: {{get-facebook-metrics.clicks}}, Reactions: {{get-facebook-metrics.reactions}}\n\nInstagram — Impressions: {{get-instagram-metrics.impressions}}, Likes: {{get-instagram-metrics.likes}}, Comments: {{get-instagram-metrics.comments}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/adAnalyticsV2"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media-insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-media-insights
method: GET
- type: http
namespace: confluence
baseUri: "https://abbvie.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Checks the quality gate status for a SonarQube project. Used by AbbVie engineering teams to validate code quality before merging changes to GxP-validated systems.
naftiko: "0.5"
info:
label: "SonarQube Code Quality Gate Check"
description: "Checks the quality gate status for a SonarQube project. Used by AbbVie engineering teams to validate code quality before merging changes to GxP-validated systems."
tags:
- devops
- code-quality
- sonarqube
- gxp
capability:
exposes:
- type: mcp
namespace: code-quality
port: 8080
tools:
- name: check-quality-gate
description: "Look up the quality gate status for a SonarQube project key."
inputParameters:
- name: project_key
in: body
type: string
description: "The SonarQube project key."
call: "sonarqube.get-quality-gate"
with:
project_key: "{{project_key}}"
consumes:
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.abbvie.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality-gates
path: "/qualitygates/project_status"
inputParameters:
- name: project_key
in: query
operations:
- name: get-quality-gate
method: GET
Searches Splunk indexes for log entries matching a given query. Used by IT operations to investigate application errors across AbbVie's cloud infrastructure.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk indexes for log entries matching a given query. Used by IT operations to investigate application errors across AbbVie's cloud infrastructure."
tags:
- devops
- logging
- splunk
capability:
exposes:
- type: mcp
namespace: logging
port: 8080
tools:
- name: search-logs
description: "Search Splunk logs by query string and time range."
inputParameters:
- name: query
in: body
type: string
description: "SPL search query."
- name: time_range
in: body
type: string
description: "Relative time range such as -1h."
call: "splunk.search-logs"
with:
query: "{{query}}"
time_range: "{{time_range}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://abbvie-splunk.com/services/search/jobs"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/export"
operations:
- name: search-logs
method: POST
Retrieves metadata and preview URL for a Tableau workbook view. Used by business users to quickly access pharma analytics dashboards without logging into Tableau Server.
naftiko: "0.5"
info:
label: "Tableau Dashboard Viewer"
description: "Retrieves metadata and preview URL for a Tableau workbook view. Used by business users to quickly access pharma analytics dashboards without logging into Tableau Server."
tags:
- analytics
- business-intelligence
- tableau
- visualization
capability:
exposes:
- type: mcp
namespace: bi-analytics
port: 8080
tools:
- name: get-tableau-view
description: "Look up a Tableau view by workbook and view name, returning the embed URL and last refresh time."
inputParameters:
- name: site_id
in: body
type: string
description: "Tableau site ID."
- name: view_id
in: body
type: string
description: "Tableau view ID."
call: "tableau.get-view"
with:
site_id: "{{site_id}}"
view_id: "{{view_id}}"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.abbvie.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: views
path: "/sites/{{site_id}}/views/{{view_id}}"
inputParameters:
- name: site_id
in: path
- name: view_id
in: path
operations:
- name: get-view
method: GET
Executes a predefined analytics query against AbbVie's Teradata data warehouse and returns summary results. Used by data analysts for pharma sales and market access reporting.
naftiko: "0.5"
info:
label: "Teradata Data Warehouse Query"
description: "Executes a predefined analytics query against AbbVie's Teradata data warehouse and returns summary results. Used by data analysts for pharma sales and market access reporting."
tags:
- data-analytics
- data-warehouse
- teradata
- reporting
capability:
exposes:
- type: mcp
namespace: data-warehouse
port: 8080
tools:
- name: run-analytics-query
description: "Execute a named query against Teradata and return results."
inputParameters:
- name: query_name
in: body
type: string
description: "Name of the predefined analytics query."
- name: parameters
in: body
type: string
description: "JSON string of query parameters."
call: "teradata.execute-query"
with:
query_name: "{{query_name}}"
parameters: "{{parameters}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.abbvie.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries/{{query_name}}/execute"
inputParameters:
- name: query_name
in: path
operations:
- name: execute-query
method: POST
Receives ServiceNow request, generates Terraform plans, runs security scans, applies infrastructure, registers in CMDB, and notifies requestor.
naftiko: "0.5"
info:
label: "Terraform Environment Provisioning Orchestrator"
description: "Receives ServiceNow request, generates Terraform plans, runs security scans, applies infrastructure, registers in CMDB, and notifies requestor."
tags:
- devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: terraform_environment_provisioning_orche
description: "Orchestrate terraform environment provisioning orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-request
type: call
call: "servicenow.get-request"
with:
request_id: "{{resource_id}}"
- name: plan-infra
type: call
call: "terraform.create-plan"
with:
workspace: "{{get-request.workspace}}"
- name: apply-infra
type: call
call: "terraform.apply-plan"
with:
plan_id: "{{plan-infra.plan_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "platform-eng"
text: "Environment provisioned for {{resource_id}}: {{apply-infra.outputs}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Runs a Terraform plan via Azure DevOps pipeline, checks for infrastructure drift, and creates a ServiceNow change request if drift is detected in AbbVie's Azure environments.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Drift Detection"
description: "Runs a Terraform plan via Azure DevOps pipeline, checks for infrastructure drift, and creates a ServiceNow change request if drift is detected in AbbVie's Azure environments."
tags:
- devops
- infrastructure
- terraform
- azure-devops
- servicenow
- cloud
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: detect-drift
description: "Trigger a Terraform plan in Azure DevOps and create a ServiceNow change request if drift is found."
inputParameters:
- name: project
in: body
type: string
description: "Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "Azure DevOps pipeline ID for the Terraform plan."
- name: environment
in: body
type: string
description: "Target environment (dev, staging, prod)."
steps:
- name: trigger-plan
type: call
call: "azuredevops.run-pipeline"
with:
project: "{{project}}"
pipeline_id: "{{pipeline_id}}"
parameters: "{\"environment\": \"{{environment}}\"}"
- name: create-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "Terraform drift detected: {{project}} / {{environment}}"
description: "Pipeline run {{trigger-plan.run_id}} detected infrastructure drift in {{environment}}. Review Terraform plan output and apply corrections."
assigned_group: "Cloud_Engineering"
category: "infrastructure"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/abbvie"
authentication:
type: bearer
token: "$secrets.azuredevops_token"
resources:
- name: pipelines
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Retrieves expiring contracts from SAP Ariba, pulls performance metrics from Snowflake, creates approval workflows in ServiceNow, and notifies procurement in Teams.
naftiko: "0.5"
info:
label: "Vendor Contract Renewal Orchestrator"
description: "Retrieves expiring contracts from SAP Ariba, pulls performance metrics from Snowflake, creates approval workflows in ServiceNow, and notifies procurement in Teams."
tags:
- procurement
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: vendor_contract_renewal_orchestrator
description: "Orchestrate vendor contract renewal orchestrator workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-contract
type: call
call: "sap.get-contract"
with:
contract_id: "{{resource_id}}"
- name: get-performance
type: call
call: "snowflake.run-query"
with:
sql_query: "SELECT * FROM vendor_performance WHERE contract_id = '{{resource_id}}'"
warehouse: "PROC_WH"
- name: create-approval
type: call
call: "servicenow.create-request"
with:
short_description: "Contract renewal: {{resource_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel: "procurement"
text: "Contract {{resource_id}} renewal. Approval: {{create-approval.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://abbvie-sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: sap-operation
method: POST
- type: http
namespace: snowflake
baseUri: "https://abbvie.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-operation
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: msteams-operation
method: POST
Checks the status of a Veritas NetBackup job for GxP-validated system backups. Used by infrastructure teams to verify backup compliance for FDA-regulated environments.
naftiko: "0.5"
info:
label: "Veritas NetBackup Job Status"
description: "Checks the status of a Veritas NetBackup job for GxP-validated system backups. Used by infrastructure teams to verify backup compliance for FDA-regulated environments."
tags:
- infrastructure
- backup
- veritas-netbackup
- compliance
- gxp
capability:
exposes:
- type: mcp
namespace: backup-ops
port: 8080
tools:
- name: get-backup-status
description: "Look up a NetBackup job by ID and return its status, start time, and data transferred."
inputParameters:
- name: job_id
in: body
type: string
description: "Veritas NetBackup job ID."
call: "netbackup.get-job"
with:
job_id: "{{job_id}}"
consumes:
- type: http
namespace: netbackup
baseUri: "https://netbackup.abbvie.com/netbackup/admin/v3"
authentication:
type: bearer
token: "$secrets.netbackup_token"
resources:
- name: jobs
path: "/jobs/{{job_id}}"
inputParameters:
- name: job_id
in: path
operations:
- name: get-job
method: GET
Creates a snapshot of a VMware virtual machine before a GxP system maintenance window, logs the snapshot in ServiceNow as a change task, and notifies the infrastructure team.
naftiko: "0.5"
info:
label: "VMware VM Snapshot Management"
description: "Creates a snapshot of a VMware virtual machine before a GxP system maintenance window, logs the snapshot in ServiceNow as a change task, and notifies the infrastructure team."
tags:
- infrastructure
- virtualization
- vmware
- servicenow
- microsoft-teams
- gxp
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: create-vm-snapshot
description: "Given a VM name and change ticket, create a VMware snapshot, update the ServiceNow change task, and notify the infra team."
inputParameters:
- name: vm_name
in: body
type: string
description: "VMware virtual machine name."
- name: change_number
in: body
type: string
description: "ServiceNow change request number."
- name: snapshot_description
in: body
type: string
description: "Description for the snapshot."
steps:
- name: create-snapshot
type: call
call: "vmware.create-snapshot"
with:
vm_name: "{{vm_name}}"
description: "{{snapshot_description}}"
- name: update-change
type: call
call: "servicenow.update-change"
with:
change_number: "{{change_number}}"
work_notes: "VM snapshot created for {{vm_name}}. Snapshot ID: {{create-snapshot.snapshot_id}}. Timestamp: {{create-snapshot.created_at}}"
- name: notify-infra
type: call
call: "msteams.send-message"
with:
channel: "infrastructure-ops"
text: "VM Snapshot: {{vm_name}} — Snapshot {{create-snapshot.snapshot_id}} created for change {{change_number}}. Ready for maintenance."
consumes:
- type: http
namespace: vmware
baseUri: "https://vcenter.abbvie.com/rest/vcenter"
authentication:
type: bearer
token: "$secrets.vmware_session_token"
resources:
- name: snapshots
path: "/vm/{{vm_name}}/snapshots"
inputParameters:
- name: vm_name
in: path
operations:
- name: create-snapshot
method: POST
- type: http
namespace: servicenow
baseUri: "https://abbvie.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request/{{change_number}}"
inputParameters:
- name: change_number
in: path
operations:
- name: update-change
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel}}/channels/general/messages"
inputParameters:
- name: channel
in: path
operations:
- name: send-message
method: POST
Pulls open vulnerabilities from Qualys, correlates with ServiceNow CMDB assets, creates remediation tasks in Jira, and tracks SLA in Grafana.
naftiko: "0.5"
info:
label: "Vulnerability Remediation Tracker"
description: "Pulls open vulnerabilities from Qualys, correlates with ServiceNow CMDB assets, creates remediation tasks in Jira, and tracks SLA in Grafana."
tags:
- security
- qualys
- servicenow
- jira
- grafana
capability:
exposes:
- type: mcp
namespace: abbvie
port: 8080
tools:
- name: vulnerability_remediation_tracker
description: "Orchestrate vulnerability remediation tracker workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-vulns
type: call
call: "qualys.get-vulnerabilities"
with:
scan_id: "{{resource_id}}"
- name: get-assets
type: call
call: "servicenow.get-cmdb-ci"
with:
ip_address: "{{get-vulns.affected_ip}}"
- name: create-remediation
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Remediate: {{get-vulns.cve_id}} on {{get-assets.name}}"
- name: update-dashboard
type: call
call: "grafana.annotate"
with:
dashboard_uid: "vuln-tracking"
text: "New remediation: {{create-remediation.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: jira
baseUri: "https://abbvie.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-operation
method: POST
- type: http
namespace: grafana
baseUri: "https://abbvie-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-operation
method: POST
Retrieves employee profile information from Workday by employee ID. Used by HR teams at AbbVie to verify employment details and org structure.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves employee profile information from Workday by employee ID. Used by HR teams at AbbVie to verify employment details and org structure."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Look up a Workday employee by ID and return profile details."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday.get-employee"
with:
employee_id: "{{employee_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
Retrieves a Zendesk support ticket by ID including status, priority, assignee, and subject. Used by AbbVie patient services and IT help desk teams.
naftiko: "0.5"
info:
label: "Zendesk Support Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID including status, priority, assignee, and subject. Used by AbbVie patient services and IT help desk teams."
tags:
- support
- customer-service
- zendesk
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: get-ticket
description: "Look up a Zendesk ticket by ID and return its status, priority, assignee, and subject."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://abbvie.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