Mastercard Capabilities

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

Sort
Expand

Detects payroll discrepancies between ADP and Workday, flags issues in ServiceNow, and notifies HR via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ADP Payroll Discrepancy Handler"
  description: "Detects payroll discrepancies between ADP and Workday, flags issues in ServiceNow, and notifies HR via Microsoft Teams."
  tags:
    - hr
    - adp
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: payroll-discrepancy
      port: 8080
      tools:
        - name: handle-payroll-discrepancy
          description: "Detect and escalate payroll discrepancies."
          inputParameters:
            - name: pay_period
              in: body
              type: string
              description: "Pay period identifier."
          steps:
            - name: get-adp-data
              type: call
              call: "adp-api.get-payroll"
              with:
                pay_period: "{{pay_period}}"
            - name: get-workday-data
              type: call
              call: "workday-api.get-payroll"
              with:
                pay_period: "{{pay_period}}"
            - name: create-incident
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Payroll discrepancy: {{pay_period}}"
                description: "ADP total: {{get-adp-data.total}}. Workday total: {{get-workday-data.total}}."
                category: "payroll"
  consumes:
    - type: http
      namespace: adp-api
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll-outputs"
          operations:
            - name: get-payroll
              method: GET
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payroll
          path: "/mastercard/payroll"
          operations:
            - name: get-payroll
              method: GET
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Given a set of regulatory compliance documents stored in SharePoint, uses the Anthropic API to extract key obligations and deadlines and posts the summary to the compliance leadership Teams channel.

naftiko: "0.5"
info:
  label: "AI-Assisted Regulatory Document Summarizer"
  description: "Given a set of regulatory compliance documents stored in SharePoint, uses the Anthropic API to extract key obligations and deadlines and posts the summary to the compliance leadership Teams channel."
  tags:
    - ai
    - compliance
    - anthropic
    - sharepoint
    - microsoft-teams
    - legal
capability:
  exposes:
    - type: mcp
      namespace: compliance-ai
      port: 8080
      tools:
        - name: summarize-regulatory-documents
          description: "Given a SharePoint site and document library path containing regulatory filings or compliance documents, retrieve the documents via Microsoft Graph, send them to the Anthropic Claude API for obligation extraction, and post the structured summary to the compliance Teams channel. Use when preparing for regulatory audits, deadline reviews, or new regulation assessments."
          inputParameters:
            - name: sharepoint_site_id
              in: body
              type: string
              description: "The Microsoft Graph site ID for the SharePoint compliance document library."
            - name: drive_item_path
              in: body
              type: string
              description: "The SharePoint document library folder path containing the regulatory documents."
            - name: compliance_channel_id
              in: body
              type: string
              description: "Teams channel ID for the compliance leadership team."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.get-drive-items"
              with:
                site_id: "{{sharepoint_site_id}}"
                path: "{{drive_item_path}}"
            - name: generate-summary
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "You are a financial services compliance expert. Summarize the key regulatory obligations, deadlines, and required actions from these documents: {{get-documents.items}}"
            - name: post-summary
              type: call
              call: "msteams-compliance.post-channel-message"
              with:
                channel_id: "{{compliance_channel_id}}"
                text: "Regulatory Document Summary: {{generate-summary.content}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{site_id}/drive/root:{path}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-drive-items
              method: GET
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams-compliance
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Processes project intake requests from Airtable, creates Jira epics, and notifies project managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Airtable Project Intake to Jira Pipeline"
  description: "Processes project intake requests from Airtable, creates Jira epics, and notifies project managers via Microsoft Teams."
  tags:
    - project-management
    - airtable
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: project-intake
      port: 8080
      tools:
        - name: process-project-intake
          description: "Convert Airtable project requests into Jira epics."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "Airtable record identifier."
          steps:
            - name: get-request
              type: call
              call: "airtable-api.get-record"
              with:
                record_id: "{{record_id}}"
            - name: create-epic
              type: call
              call: "jira-api.create-issue"
              with:
                project: "PMO"
                summary: "{{get-request.project_name}}"
                description: "Requester: {{get-request.requester}}. Priority: {{get-request.priority}}. Budget: {{get-request.budget}}."
                issuetype: "Epic"
            - name: notify-pm
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "project-management"
                channel_id: "intake"
                message: "New project: {{get-request.project_name}}. Epic: {{create-epic.key}}."
  consumes:
    - type: http
      namespace: airtable-api
      baseUri: "https://api.airtable.com/v0"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/appXXXXXX/Project%20Intake/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Monitors AKS pod metrics in Datadog, scales deployments, and notifies the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "AKS Pod Scaling and Notification Pipeline"
  description: "Monitors AKS pod metrics in Datadog, scales deployments, and notifies the platform team via Microsoft Teams."
  tags:
    - infrastructure
    - azure-kubernetes-service
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aks-scaling
      port: 8080
      tools:
        - name: scale-aks-pods
          description: "Scale AKS pods based on metrics and notify the team."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "Kubernetes namespace."
            - name: deployment
              in: body
              type: string
              description: "Deployment name."
          steps:
            - name: check-metrics
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "kubernetes.cpu.usage{kube_namespace:{{namespace}},kube_deployment:{{deployment}}}"
            - name: scale-deployment
              type: call
              call: "aks-api.scale-deployment"
              with:
                namespace: "{{namespace}}"
                deployment: "{{deployment}}"
            - name: notify-team
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "platform-engineering"
                channel_id: "scaling"
                message: "AKS scaling: {{deployment}} in {{namespace}}. CPU: {{check-metrics.value}}%."
  consumes:
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: aks-api
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: deployments
          path: "/resourceGroups/mc-prod/providers/Microsoft.ContainerService/managedClusters/mc-prod-aks"
          operations:
            - name: scale-deployment
              method: PATCH
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Executes a query against Amazon Redshift to retrieve payment transaction data for analytics and reporting.

naftiko: "0.5"
info:
  label: "Amazon Redshift Query Execution"
  description: "Executes a query against Amazon Redshift to retrieve payment transaction data for analytics and reporting."
  tags:
    - data-warehouse
    - amazon-redshift
capability:
  exposes:
    - type: mcp
      namespace: redshift
      port: 8080
      tools:
        - name: execute-query
          description: "Run a SQL query against the Redshift payment data warehouse."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "SQL query to execute."
          call: "redshift-api.execute-statement"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: redshift-api
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_sig_v4"
        placement: header
      resources:
        - name: statements
          path: "/"
          operations:
            - name: execute-statement
              method: POST

Monitors SageMaker inference endpoint health, detects drift in Datadog, and creates retraining tickets in Jira.

naftiko: "0.5"
info:
  label: "Amazon SageMaker Model Endpoint Monitor"
  description: "Monitors SageMaker inference endpoint health, detects drift in Datadog, and creates retraining tickets in Jira."
  tags:
    - ml-ops
    - amazon-sagemaker
    - datadog
    - jira
capability:
  exposes:
    - type: mcp
      namespace: sagemaker-monitor
      port: 8080
      tools:
        - name: monitor-sagemaker-endpoint
          description: "Monitor a SageMaker model endpoint for drift and degradation."
          inputParameters:
            - name: endpoint_name
              in: body
              type: string
              description: "SageMaker endpoint name."
          steps:
            - name: check-health
              type: call
              call: "sagemaker-api.describe-endpoint"
              with:
                endpoint_name: "{{endpoint_name}}"
            - name: check-drift
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "sagemaker.endpoint.model_latency{endpoint:{{endpoint_name}}}"
            - name: create-ticket
              type: call
              call: "jira-api.create-issue"
              with:
                project: "MLOPS"
                summary: "Model drift: {{endpoint_name}}"
                description: "Status: {{check-health.status}}. Latency: {{check-drift.value}}ms."
  consumes:
    - type: http
      namespace: sagemaker-api
      baseUri: "https://api.sagemaker.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_sig_v4"
        placement: header
      resources:
        - name: endpoints
          path: "/"
          operations:
            - name: describe-endpoint
              method: POST
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Identifies deprecated APIs in MuleSoft, notifies affected merchants via Salesforce, and tracks migration in Jira.

naftiko: "0.5"
info:
  label: "API Deprecation Notification Pipeline"
  description: "Identifies deprecated APIs in MuleSoft, notifies affected merchants via Salesforce, and tracks migration in Jira."
  tags:
    - api-management
    - mulesoft
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: api-deprecation
      port: 8080
      tools:
        - name: notify-api-deprecation
          description: "Notify merchants of upcoming API deprecations and track migrations."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "MuleSoft API identifier to deprecate."
          steps:
            - name: get-api-consumers
              type: call
              call: "mulesoft-api.get-consumers"
              with:
                api_id: "{{api_id}}"
            - name: notify-merchants
              type: call
              call: "salesforce-api.create-campaign"
              with:
                name: "API Deprecation: {{api_id}}"
                affected: "{{get-api-consumers.count}}"
            - name: create-migration-task
              type: call
              call: "jira-api.create-issue"
              with:
                project: "API"
                summary: "API deprecation: {{api_id}}"
                description: "Affected consumers: {{get-api-consumers.count}}. Campaign: {{notify-merchants.id}}."
  consumes:
    - type: http
      namespace: mulesoft-api
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: consumers
          path: "/organizations/mastercard/apis/{{api_id}}/contracts"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: get-consumers
              method: GET
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves configuration and invocation metrics for an AWS Lambda function used in payment processing microservices.

naftiko: "0.5"
info:
  label: "AWS Lambda Function Status Check"
  description: "Retrieves configuration and invocation metrics for an AWS Lambda function used in payment processing microservices."
  tags:
    - serverless
    - aws-lambda
capability:
  exposes:
    - type: mcp
      namespace: lambda
      port: 8080
      tools:
        - name: get-function-status
          description: "Fetch the configuration and last invocation status of a Lambda function."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "Lambda function name."
          call: "lambda-api.get-function"
          with:
            function_name: "{{function_name}}"
  consumes:
    - type: http
      namespace: lambda-api
      baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_sig_v4"
        placement: header
      resources:
        - name: functions
          path: "/functions/{{function_name}}"
          inputParameters:
            - name: function_name
              in: path
          operations:
            - name: get-function
              method: GET

Fetches API call metrics and error rates from Azure API Management for payment gateway monitoring.

naftiko: "0.5"
info:
  label: "Azure API Gateway Metrics Lookup"
  description: "Fetches API call metrics and error rates from Azure API Management for payment gateway monitoring."
  tags:
    - api-management
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: azure-apim
      port: 8080
      tools:
        - name: get-api-metrics
          description: "Retrieve API metrics from Azure API Management."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "Azure APIM API identifier."
          call: "apim-api.get-metrics"
          with:
            api_id: "{{api_id}}"
  consumes:
    - type: http
      namespace: apim-api
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: metrics
          path: "/resourceGroups/mc-prod/providers/Microsoft.ApiManagement/service/mc-apim/apis/{{api_id}}/diagnostics"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: get-metrics
              method: GET

When an Azure spending anomaly is detected in a subscription, creates a ServiceNow change request and alerts the FinOps team via Teams.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Responder"
  description: "When an Azure spending anomaly is detected in a subscription, creates a ServiceNow change request and alerts the FinOps team via Teams."
  tags:
    - cloud
    - finops
    - azure
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cloud-cost-anomaly
          description: "Given an Azure subscription ID, anomalous spend amount, and responsible service, open a ServiceNow change request and alert the FinOps Teams channel. Invoke when Azure Cost Management flags an unexpected spend increase in payment processing or data platform subscriptions."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID where the cost anomaly was detected."
            - name: anomaly_amount
              in: body
              type: number
              description: "Anomalous spend amount in USD above the expected baseline."
            - name: service_name
              in: body
              type: string
              description: "Azure service or resource group causing the anomaly."
          steps:
            - name: create-change
              type: call
              call: "servicenow-cost.create-change"
              with:
                short_description: "Azure cost anomaly: {{service_name}} — ${{anomaly_amount}} above baseline"
                category: "cloud_cost"
            - name: alert-finops
              type: call
              call: "msteams-finops.post-channel-message"
              with:
                channel_id: "finops-alerts"
                text: "Cost Anomaly: Azure {{service_name}} in {{subscription_id}} is ${{anomaly_amount}} over budget. ServiceNow: {{create-change.number}}"
  consumes:
    - type: http
      namespace: servicenow-cost
      baseUri: "https://mastercard.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-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Monitors Azure Data Factory pipeline runs, detects failures in Datadog, and creates incident tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Azure Data Factory Pipeline Monitor"
  description: "Monitors Azure Data Factory pipeline runs, detects failures in Datadog, and creates incident tickets in ServiceNow."
  tags:
    - data-engineering
    - azure-data-factory
    - datadog
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: adf-monitor
      port: 8080
      tools:
        - name: monitor-adf-pipeline
          description: "Monitor ADF pipeline runs and alert on failures."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "ADF pipeline name."
          steps:
            - name: check-run
              type: call
              call: "adf-api.get-pipeline-run"
              with:
                pipeline_name: "{{pipeline_name}}"
            - name: check-metrics
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "azure.datafactory.pipeline.failed_runs{pipeline:{{pipeline_name}}}"
            - name: create-incident
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "ADF pipeline failure: {{pipeline_name}}"
                description: "Status: {{check-run.status}}. Failures: {{check-metrics.value}}."
  consumes:
    - type: http
      namespace: adf-api
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: pipelines
          path: "/resourceGroups/mc-prod/providers/Microsoft.DataFactory/factories/mc-adf/pipelineruns"
          operations:
            - name: get-pipeline-run
              method: GET
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Checks the execution status of an Azure Databricks job to verify that payment analytics pipelines completed successfully.

naftiko: "0.5"
info:
  label: "Azure Databricks Job Status Check"
  description: "Checks the execution status of an Azure Databricks job to verify that payment analytics pipelines completed successfully."
  tags:
    - data-engineering
    - azure-databricks
capability:
  exposes:
    - type: mcp
      namespace: databricks
      port: 8080
      tools:
        - name: get-job-status
          description: "Fetch the status of a Databricks job run."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "Databricks job run identifier."
          call: "databricks-api.get-run"
          with:
            run_id: "{{run_id}}"
  consumes:
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: runs
          path: "/jobs/runs/get?run_id={{run_id}}"
          inputParameters:
            - name: run_id
              in: query
          operations:
            - name: get-run
              method: GET

Validates release gates in Azure DevOps, checks quality metrics in Datadog, and creates change records in ServiceNow.

naftiko: "0.5"
info:
  label: "Azure DevOps Release Gate Pipeline"
  description: "Validates release gates in Azure DevOps, checks quality metrics in Datadog, and creates change records in ServiceNow."
  tags:
    - cicd
    - azure-devops
    - datadog
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: release-gate
      port: 8080
      tools:
        - name: validate-release-gate
          description: "Validate release quality gates before deployment."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Azure DevOps release ID."
          steps:
            - name: get-release
              type: call
              call: "azdo-api.get-release"
              with:
                release_id: "{{release_id}}"
            - name: check-quality
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "ci.test.pass_rate{release:{{release_id}}}"
            - name: create-change
              type: call
              call: "servicenow-api.create-change"
              with:
                short_description: "Release: {{get-release.name}} v{{get-release.version}}"
                description: "Test pass rate: {{check-quality.value}}%. Artifacts: {{get-release.artifacts_count}}."
  consumes:
    - type: http
      namespace: azdo-api
      baseUri: "https://vsrm.dev.azure.com/mastercard"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: releases
          path: "/_apis/release/releases/{{release_id}}"
          inputParameters:
            - name: release_id
              in: path
          operations:
            - name: get-release
              method: GET
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Checks the health and node status of an Azure Kubernetes Service cluster hosting payment microservices.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Cluster Health Check"
  description: "Checks the health and node status of an Azure Kubernetes Service cluster hosting payment microservices."
  tags:
    - infrastructure
    - azure-kubernetes-service
capability:
  exposes:
    - type: mcp
      namespace: aks
      port: 8080
      tools:
        - name: check-cluster-health
          description: "Retrieve the health status of an AKS cluster."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "AKS cluster name."
          call: "aks-api.get-cluster"
          with:
            cluster_name: "{{cluster_name}}"
  consumes:
    - type: http
      namespace: aks-api
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_management_token"
      resources:
        - name: clusters
          path: "/resourceGroups/mc-prod/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}"
          inputParameters:
            - name: cluster_name
              in: path
          operations:
            - name: get-cluster
              method: GET

Scans Box for documents exceeding retention policies, archives expired files, and logs actions in ServiceNow.

naftiko: "0.5"
info:
  label: "Box Document Retention Policy Pipeline"
  description: "Scans Box for documents exceeding retention policies, archives expired files, and logs actions in ServiceNow."
  tags:
    - document-management
    - box
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: document-retention
      port: 8080
      tools:
        - name: enforce-retention-policy
          description: "Enforce document retention policies on Box files."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "Box folder identifier."
          steps:
            - name: scan-files
              type: call
              call: "box-api.list-files"
              with:
                folder_id: "{{folder_id}}"
            - name: check-retention
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM compliance.retention_policies WHERE folder_id = '{{folder_id}}'"
            - name: log-actions
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Retention policy: folder {{folder_id}}"
                description: "Files scanned: {{scan-files.count}}. Expired: {{check-retention.expired_count}}."
  consumes:
    - type: http
      namespace: box-api
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders/{{folder_id}}/items"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: list-files
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves static application security testing results from Checkmarx for payment application code review.

naftiko: "0.5"
info:
  label: "Checkmarx Security Scan Results"
  description: "Retrieves static application security testing results from Checkmarx for payment application code review."
  tags:
    - security
    - checkmarx
capability:
  exposes:
    - type: mcp
      namespace: checkmarx
      port: 8080
      tools:
        - name: get-scan-results
          description: "Fetch SAST scan results for a Checkmarx project."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "Checkmarx project identifier."
          call: "checkmarx-api.get-results"
          with:
            project_id: "{{project_id}}"
  consumes:
    - type: http
      namespace: checkmarx-api
      baseUri: "https://checkmarx.mastercard.com/cxrestapi"
      authentication:
        type: bearer
        token: "$secrets.checkmarx_token"
      resources:
        - name: results
          path: "/projects/{{project_id}}/results"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-results
              method: GET

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the platform engineering Teams channel.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Handler"
  description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the platform engineering Teams channel."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions workflow failure with repo, branch, commit SHA, and run URL, create a Jira bug, post a Datadog event, and notify the platform engineering Teams channel. Invoke on any protected-branch pipeline failure in the Mastercard technology estate."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "GitHub repository in org/repo format."
            - name: branch
              in: body
              type: string
              description: "Branch name where the failure occurred."
            - name: commit_sha
              in: body
              type: string
              description: "Git commit SHA of the failing run."
            - name: run_url
              in: body
              type: string
              description: "Direct URL to the failing GitHub Actions run."
            - name: workflow_name
              in: body
              type: string
              description: "Name of the failing GitHub Actions workflow."
          steps:
            - name: create-bug
              type: call
              call: "jira-eng.create-issue"
              with:
                project_key: "PLAT"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}"
                description: "Branch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
            - name: post-datadog-event
              type: call
              call: "datadog-ci.create-event"
              with:
                title: "CI Failure: {{repository}}"
                text: "Workflow {{workflow_name}} failed on {{branch}} at {{commit_sha}}"
                alert_type: "error"
            - name: alert-platform-team
              type: call
              call: "msteams-platform.post-channel-message"
              with:
                channel_id: "platform-engineering"
                text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
  consumes:
    - type: http
      namespace: jira-eng
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: datadog-ci
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-platform
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Extracts resolved ServiceNow incidents, creates knowledge articles in Confluence, and notifies support teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Article Creation Pipeline"
  description: "Extracts resolved ServiceNow incidents, creates knowledge articles in Confluence, and notifies support teams via Microsoft Teams."
  tags:
    - knowledge-management
    - servicenow
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: kb-creation
      port: 8080
      tools:
        - name: create-knowledge-article
          description: "Convert resolved incidents into knowledge base articles."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-api.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: create-article
              type: call
              call: "confluence-api.create-page"
              with:
                space: "KB"
                title: "KB: {{get-incident.short_description}}"
                body: "Problem: {{get-incident.description}}. Resolution: {{get-incident.close_notes}}."
            - name: notify-team
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "support"
                channel_id: "knowledge-base"
                message: "New KB article: {{get-incident.short_description}}. Link: {{create-article.url}}."
  consumes:
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Searches Confluence for payment network policy and procedure documents by keyword.

naftiko: "0.5"
info:
  label: "Confluence Policy Document Search"
  description: "Searches Confluence for payment network policy and procedure documents by keyword."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: confluence
      port: 8080
      tools:
        - name: search-policies
          description: "Search Confluence for policy documents by keyword."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search keyword or phrase."
          call: "confluence-api.search"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: search
          path: "/content/search"
          operations:
            - name: search
              method: GET

Detects malicious endpoints via CrowdStrike, quarantines the device, revokes Okta access, and logs the incident in ServiceNow.

naftiko: "0.5"
info:
  label: "CrowdStrike Endpoint Quarantine Workflow"
  description: "Detects malicious endpoints via CrowdStrike, quarantines the device, revokes Okta access, and logs the incident in ServiceNow."
  tags:
    - security
    - crowdstrike
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: endpoint-quarantine
      port: 8080
      tools:
        - name: quarantine-endpoint
          description: "Quarantine a compromised endpoint and revoke user access."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "CrowdStrike device identifier."
          steps:
            - name: get-detection
              type: call
              call: "crowdstrike-api.get-detection"
              with:
                device_id: "{{device_id}}"
            - name: revoke-access
              type: call
              call: "okta-api.suspend-user"
              with:
                login: "{{get-detection.user_email}}"
            - name: log-incident
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Endpoint quarantine: {{device_id}}"
                description: "Threat: {{get-detection.threat_name}}. User: {{get-detection.user_email}}. Okta suspended."
                priority: "1"
  consumes:
    - type: http
      namespace: crowdstrike-api
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: detections
          path: "/detects/entities/summaries/GET/v1"
          operations:
            - name: get-detection
              method: POST
    - type: http
      namespace: okta-api
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}/lifecycle/suspend"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: suspend-user
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

When a CrowdStrike Falcon detection alert fires, creates a ServiceNow security incident, notifies the SOC team via Teams, and logs the detection in Datadog.

naftiko: "0.5"
info:
  label: "CrowdStrike Threat Detection Alert Handler"
  description: "When a CrowdStrike Falcon detection alert fires, creates a ServiceNow security incident, notifies the SOC team via Teams, and logs the detection in Datadog."
  tags:
    - security
    - crowdstrike
    - servicenow
    - datadog
    - microsoft-teams
    - threat-detection
capability:
  exposes:
    - type: mcp
      namespace: soc-ops
      port: 8080
      tools:
        - name: handle-threat-detection
          description: "Given a CrowdStrike Falcon detection ID, severity, and affected hostname, retrieve the full detection context, create a ServiceNow security incident, post a Datadog security event, and alert the SOC Teams channel. Invoke immediately on any CrowdStrike detection at medium severity or above."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "CrowdStrike Falcon detection ID."
            - name: severity
              in: body
              type: string
              description: "Detection severity: critical, high, medium."
            - name: affected_host
              in: body
              type: string
              description: "Hostname of the affected endpoint."
            - name: tactic
              in: body
              type: string
              description: "MITRE ATT&CK tactic associated with the detection."
          steps:
            - name: get-detection
              type: call
              call: "crowdstrike.get-detection"
              with:
                detection_id: "{{detection_id}}"
            - name: create-security-incident
              type: call
              call: "servicenow-soc.create-incident"
              with:
                short_description: "[{{severity}}] CrowdStrike detection on {{affected_host}} — {{tactic}}"
                category: "security_incident"
                urgency: "1"
            - name: post-datadog-event
              type: call
              call: "datadog-soc.create-event"
              with:
                title: "CrowdStrike Detection: {{affected_host}}"
                text: "Detection {{detection_id}} | Severity: {{severity}} | Tactic: {{tactic}} | ServiceNow: {{create-security-incident.number}}"
                alert_type: "error"
            - name: alert-soc
              type: call
              call: "msteams-soc.post-channel-message"
              with:
                channel_id: "security-operations-center"
                text: "THREAT DETECTION: {{affected_host}} | Severity: {{severity}} | Tactic: {{tactic}} | CrowdStrike: {{detection_id}} | ServiceNow: {{create-security-incident.number}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: detections
          path: "/detects/entities/detect/v2"
          operations:
            - name: get-detection
              method: GET
    - type: http
      namespace: servicenow-soc
      baseUri: "https://mastercard.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: datadog-soc
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-soc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Detects Databricks job failures, restarts pipelines, and creates incident tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Databricks ETL Pipeline Failure Handler"
  description: "Detects Databricks job failures, restarts pipelines, and creates incident tickets in ServiceNow."
  tags:
    - data-engineering
    - azure-databricks
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: etl-failure
      port: 8080
      tools:
        - name: handle-etl-failure
          description: "Detect, restart, and track Databricks ETL pipeline failures."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "Databricks job identifier."
          steps:
            - name: get-status
              type: call
              call: "databricks-api.get-run"
              with:
                job_id: "{{job_id}}"
            - name: restart-job
              type: call
              call: "databricks-api.run-job"
              with:
                job_id: "{{job_id}}"
            - name: create-incident
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "ETL failure: job {{job_id}}"
                description: "Status: {{get-status.state}}. Error: {{get-status.error}}. Restarted: {{restart-job.run_id}}."
  consumes:
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/get"
          operations:
            - name: get-run
              method: GET
            - name: run-job
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Checks the status of Databricks model serving endpoints for payment fraud and risk models, and alerts the data science team via Teams if any endpoints are degraded.

naftiko: "0.5"
info:
  label: "Databricks ML Model Deployment Monitor"
  description: "Checks the status of Databricks model serving endpoints for payment fraud and risk models, and alerts the data science team via Teams if any endpoints are degraded."
  tags:
    - ai
    - data
    - databricks
    - microsoft-teams
    - ml-operations
    - payments
capability:
  exposes:
    - type: mcp
      namespace: mlops
      port: 8080
      tools:
        - name: monitor-model-endpoints
          description: "Given an Azure Databricks workspace URL and a model serving endpoint name, retrieve the endpoint health status and alert the data science Teams channel if the endpoint is degraded or unavailable. Use for continuous monitoring of payment fraud and risk scoring models in production."
          inputParameters:
            - name: databricks_host
              in: body
              type: string
              description: "The Azure Databricks workspace hostname (e.g., adb-1234567890.12.azuredatabricks.net)."
            - name: endpoint_name
              in: body
              type: string
              description: "The Databricks model serving endpoint name to check."
            - name: data_science_channel_id
              in: body
              type: string
              description: "Teams channel ID for the data science team alert."
          steps:
            - name: get-endpoint-status
              type: call
              call: "databricks.get-serving-endpoint"
              with:
                endpoint_name: "{{endpoint_name}}"
            - name: alert-if-degraded
              type: call
              call: "msteams-mlops.post-channel-message"
              with:
                channel_id: "{{data_science_channel_id}}"
                text: "Model Endpoint Alert: {{endpoint_name}} status is {{get-endpoint-status.state}}. Please investigate model serving health in Databricks workspace {{databricks_host}}."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://adb-0000000000.0.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: serving-endpoints
          path: "/serving-endpoints/{name}"
          inputParameters:
            - name: name
              in: path
          operations:
            - name: get-serving-endpoint
              method: GET
    - type: http
      namespace: msteams-mlops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Triggers model retraining in Databricks, validates accuracy metrics in Snowflake, and notifies the data science team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Databricks ML Model Retraining Pipeline"
  description: "Triggers model retraining in Databricks, validates accuracy metrics in Snowflake, and notifies the data science team via Microsoft Teams."
  tags:
    - ml-ops
    - azure-databricks
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ml-retraining
      port: 8080
      tools:
        - name: retrain-fraud-model
          description: "Retrain a fraud detection model and validate its performance."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "ML model name."
          steps:
            - name: trigger-training
              type: call
              call: "databricks-api.run-job"
              with:
                job_id: "retrain-{{model_name}}"
            - name: validate-metrics
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT accuracy, precision, recall FROM ml.model_metrics WHERE model = '{{model_name}}' ORDER BY trained_at DESC LIMIT 1"
            - name: notify-team
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "data-science"
                channel_id: "ml-ops"
                message: "Model {{model_name}} retrained. Accuracy: {{validate-metrics.accuracy}}. Precision: {{validate-metrics.precision}}."
  consumes:
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves the current status of all Datadog monitors tagged to a specific payment service for use in operational health checks and status pages.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Monitor Status Lookup"
  description: "Retrieves the current status of all Datadog monitors tagged to a specific payment service for use in operational health checks and status pages."
  tags:
    - observability
    - datadog
    - monitoring
    - payments
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-service-monitor-status
          description: "Given a Datadog service tag, retrieve all monitors associated with that service and their current alert states. Use for real-time health checks of payment processing services, authorization systems, and network infrastructure."
          inputParameters:
            - name: service_tag
              in: body
              type: string
              description: "Datadog service tag to filter monitors (e.g., service:authorization, service:clearing)."
          call: "datadog.get-monitors"
          with:
            tags: "{{service_tag}}"
          outputParameters:
            - name: monitors
              type: array
              mapping: "$.monitors"
            - name: alerting_count
              type: number
              mapping: "$.counts.Alert"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor"
          operations:
            - name: get-monitors
              method: GET

Monitors payment processing latency SLOs in Datadog, detects breaches in Snowflake, and escalates via PagerDuty.

naftiko: "0.5"
info:
  label: "Datadog Payment Latency SLO Monitor"
  description: "Monitors payment processing latency SLOs in Datadog, detects breaches in Snowflake, and escalates via PagerDuty."
  tags:
    - monitoring
    - datadog
    - snowflake
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: payment-slo
      port: 8080
      tools:
        - name: monitor-payment-slo
          description: "Monitor payment latency SLOs and escalate breaches."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Payment service name."
          steps:
            - name: check-slo
              type: call
              call: "datadog-api.get-slo"
              with:
                service: "{{service}}"
            - name: check-history
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM monitoring.slo_history WHERE service = '{{service}}' AND breached = true"
            - name: escalate
              type: call
              call: "pagerduty-api.create-event"
              with:
                routing_key: "$secrets.pagerduty_routing_key"
                summary: "SLO breach: {{service}}. Current: {{check-slo.value}}. Target: {{check-slo.target}}."
  consumes:
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo"
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: pagerduty-api
      baseUri: "https://events.pagerduty.com/v2"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: events
          path: "/enqueue"
          operations:
            - name: create-event
              method: POST

Retrieves SLO compliance data for all payment processing monitors from Datadog and publishes a weekly summary to the engineering leadership Teams channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Weekly Report"
  description: "Retrieves SLO compliance data for all payment processing monitors from Datadog and publishes a weekly summary to the engineering leadership Teams channel."
  tags:
    - observability
    - datadog
    - slo
    - reporting
    - microsoft-teams
    - payments
capability:
  exposes:
    - type: mcp
      namespace: slo-compliance
      port: 8080
      tools:
        - name: publish-slo-compliance-report
          description: "Given a Datadog SLO tag filter and a Teams channel ID, retrieve all SLO statuses for the past 7 days and post a compliance summary. Use for weekly engineering reliability reviews and payment network SLA reporting to leadership."
          inputParameters:
            - name: slo_tag_filter
              in: body
              type: string
              description: "Datadog tag filter for SLOs to include (e.g., service:payments, env:production)."
            - name: teams_channel_id
              in: body
              type: string
              description: "Teams channel ID for the engineering leadership SLO digest."
          steps:
            - name: get-slo-status
              type: call
              call: "datadog-slos.get-slos"
              with:
                tags_query: "{{slo_tag_filter}}"
            - name: post-report
              type: call
              call: "msteams-slos.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Weekly SLO Compliance Report: {{get-slo-status.compliant_count}} SLOs meeting target, {{get-slo-status.breached_count}} SLOs breaching targets. Filter: {{slo_tag_filter}}."
  consumes:
    - type: http
      namespace: datadog-slos
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo"
          operations:
            - name: get-slos
              method: GET
    - type: http
      namespace: msteams-slos
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Detects Datadog synthetic test failures, creates PagerDuty incidents, and tracks resolution in Jira.

naftiko: "0.5"
info:
  label: "Datadog Synthetic Test Failure Handler"
  description: "Detects Datadog synthetic test failures, creates PagerDuty incidents, and tracks resolution in Jira."
  tags:
    - monitoring
    - datadog
    - pagerduty
    - jira
capability:
  exposes:
    - type: mcp
      namespace: synthetic-failure
      port: 8080
      tools:
        - name: handle-synthetic-failure
          description: "Respond to Datadog synthetic test failures."
          inputParameters:
            - name: test_id
              in: body
              type: string
              description: "Datadog synthetic test ID."
          steps:
            - name: get-results
              type: call
              call: "datadog-api.get-test-results"
              with:
                test_id: "{{test_id}}"
            - name: alert-oncall
              type: call
              call: "pagerduty-api.create-event"
              with:
                routing_key: "$secrets.pagerduty_routing_key"
                summary: "Synthetic test failure: {{test_id}}. Location: {{get-results.failing_location}}."
            - name: track-issue
              type: call
              call: "jira-api.create-issue"
              with:
                project: "PLATFORM"
                summary: "Synthetic failure: {{test_id}}"
                description: "Failing location: {{get-results.failing_location}}. Response time: {{get-results.response_time_ms}}ms."
  consumes:
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: synthetics
          path: "/synthetics/tests/{{test_id}}/results"
          inputParameters:
            - name: test_id
              in: path
          operations:
            - name: get-test-results
              method: GET
    - type: http
      namespace: pagerduty-api
      baseUri: "https://events.pagerduty.com/v2"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: events
          path: "/enqueue"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When an employee separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes open ServiceNow tickets assigned to that user.

naftiko: "0.5"
info:
  label: "Employee Offboarding and Access Revocation"
  description: "When an employee separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes open ServiceNow tickets assigned to that user."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - servicenow
    - microsoft-365
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-employee-offboarding
          description: "Given a Workday employee ID, disable the Microsoft 365 account, revoke all Okta sessions, and close open ServiceNow tickets. Invoke on confirmed employee termination or resignation effective date."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: separation_date
              in: body
              type: string
              description: "The effective separation date in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: "workday-offboard.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: disable-m365
              type: call
              call: "msgraph-offboard.disable-user"
              with:
                user_id: "{{get-worker.work_email}}"
            - name: revoke-okta
              type: call
              call: "okta.clear-user-sessions"
              with:
                user_id: "{{get-worker.work_email}}"
            - name: close-snow-tickets
              type: call
              call: "servicenow-offboard.close-user-tickets"
              with:
                assigned_to: "{{get-worker.work_email}}"
  consumes:
    - type: http
      namespace: workday-offboard
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph-offboard
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{user_id}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: okta
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-sessions
          path: "/users/{user_id}/sessions"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: clear-user-sessions
              method: DELETE
    - type: http
      namespace: servicenow-offboard
      baseUri: "https://mastercard.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: close-user-tickets
              method: PATCH

Retrieves design file metadata from Figma for payment product UI/UX design review and versioning.

naftiko: "0.5"
info:
  label: "Figma Design File Lookup"
  description: "Retrieves design file metadata from Figma for payment product UI/UX design review and versioning."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: figma
      port: 8080
      tools:
        - name: get-design-file
          description: "Fetch metadata for a Figma design file."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "Figma file key."
          call: "figma-api.get-file"
          with:
            file_key: "{{file_key}}"
  consumes:
    - type: http
      namespace: figma-api
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{file_key}}"
          inputParameters:
            - name: file_key
              in: path
          operations:
            - name: get-file
              method: GET

Fetches completed Figma designs, creates implementation tickets in Jira, and notifies engineering via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Figma Design to Jira Handoff Pipeline"
  description: "Fetches completed Figma designs, creates implementation tickets in Jira, and notifies engineering via Microsoft Teams."
  tags:
    - design
    - figma
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: design-handoff
      port: 8080
      tools:
        - name: handoff-design-to-engineering
          description: "Create engineering tickets from completed design files."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "Figma file key."
            - name: project
              in: body
              type: string
              description: "Jira project key."
          steps:
            - name: get-design
              type: call
              call: "figma-api.get-file"
              with:
                file_key: "{{file_key}}"
            - name: create-ticket
              type: call
              call: "jira-api.create-issue"
              with:
                project: "{{project}}"
                summary: "Implement: {{get-design.name}}"
                description: "Figma: https://figma.com/file/{{file_key}}. Last modified: {{get-design.last_modified}}."
            - name: notify-eng
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "engineering"
                channel_id: "design-handoffs"
                message: "New design handoff: {{get-design.name}}. Jira: {{create-ticket.key}}."
  consumes:
    - type: http
      namespace: figma-api
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{file_key}}"
          inputParameters:
            - name: file_key
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Triggers a GitHub Actions deployment, runs Postman API tests, and logs the deployment in ServiceNow.

naftiko: "0.5"
info:
  label: "GitHub Actions Payment API Deployment"
  description: "Triggers a GitHub Actions deployment, runs Postman API tests, and logs the deployment in ServiceNow."
  tags:
    - cicd
    - github-actions
    - postman
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: api-deployment
      port: 8080
      tools:
        - name: deploy-payment-api
          description: "Deploy a payment API with automated testing and change management."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository."
            - name: version
              in: body
              type: string
              description: "Version tag."
          steps:
            - name: trigger-deploy
              type: call
              call: "github-api.dispatch-workflow"
              with:
                repo: "{{repo}}"
                workflow: "deploy.yml"
                ref: "v{{version}}"
            - name: run-tests
              type: call
              call: "postman-api.run-collection"
              with:
                collection_id: "payment-api-smoke-tests"
            - name: log-deployment
              type: call
              call: "servicenow-api.create-change"
              with:
                short_description: "API deployment: {{repo}} v{{version}}"
                description: "Tests passed: {{run-tests.passed}}. Failed: {{run-tests.failed}}."
  consumes:
    - type: http
      namespace: github-api
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/mastercard/{{repo}}/actions/workflows/{{workflow}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow
              in: path
          operations:
            - name: dispatch-workflow
              method: POST
    - type: http
      namespace: postman-api
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apikey
        key: "X-API-Key"
        value: "$secrets.postman_api_key"
        placement: header
      resources:
        - name: collections
          path: "/collections/{{collection_id}}/runs"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: run-collection
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Pulls GitHub Copilot adoption metrics, stores them in Snowflake, and generates adoption dashboards in Power BI.

naftiko: "0.5"
info:
  label: "GitHub Copilot Usage Reporting Pipeline"
  description: "Pulls GitHub Copilot adoption metrics, stores them in Snowflake, and generates adoption dashboards in Power BI."
  tags:
    - developer-tools
    - github-copilot
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: copilot-usage
      port: 8080
      tools:
        - name: report-copilot-usage
          description: "Generate GitHub Copilot adoption reports."
          inputParameters:
            - name: org
              in: body
              type: string
              description: "GitHub organization name."
          steps:
            - name: get-usage
              type: call
              call: "github-api.get-copilot-usage"
              with:
                org: "{{org}}"
            - name: store-metrics
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO devtools.copilot_usage (org, active_users, suggestions_accepted) VALUES ('{{org}}', {{get-usage.active_users}}, {{get-usage.suggestions_accepted}})"
            - name: refresh-dashboard
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "copilot-adoption"
  consumes:
    - type: http
      namespace: github-api
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: copilot
          path: "/orgs/{{org}}/copilot/usage"
          inputParameters:
            - name: org
              in: path
          operations:
            - name: get-copilot-usage
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Lists all GitHub organization collaborators across repositories and cross-references against active Okta users to identify stale access and flag accounts for removal.

naftiko: "0.5"
info:
  label: "GitHub Repository Access Quarterly Audit"
  description: "Lists all GitHub organization collaborators across repositories and cross-references against active Okta users to identify stale access and flag accounts for removal."
  tags:
    - security
    - devops
    - github
    - okta
    - access-audit
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: repo-access-audit
      port: 8080
      tools:
        - name: audit-github-access
          description: "Given a GitHub organization name, retrieve all repository collaborators and cross-reference with active Okta users to identify any deprovisioned or external accounts still holding repository access. Use for quarterly PCI-DSS access reviews and security compliance audits."
          inputParameters:
            - name: github_org
              in: body
              type: string
              description: "GitHub organization name to audit (e.g., Mastercard)."
            - name: repository
              in: body
              type: string
              description: "Repository name to check for stale collaborator access."
          steps:
            - name: get-collaborators
              type: call
              call: "github-access.get-repo-collaborators"
              with:
                org: "{{github_org}}"
                repo: "{{repository}}"
            - name: list-active-users
              type: call
              call: "okta-access.list-active-users"
              with:
                filter: "status eq ACTIVE"
  consumes:
    - type: http
      namespace: github-access
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: collaborators
          path: "/repos/{owner}/{repo}/collaborators"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
          operations:
            - name: get-repo-collaborators
              method: GET
    - type: http
      namespace: okta-access
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: list-active-users
              method: GET

Verifies that branch protection rules are properly configured on a GitHub repository for payment platform codebases.

naftiko: "0.5"
info:
  label: "GitHub Repository Branch Protection Check"
  description: "Verifies that branch protection rules are properly configured on a GitHub repository for payment platform codebases."
  tags:
    - security
    - github
capability:
  exposes:
    - type: mcp
      namespace: github-branch
      port: 8080
      tools:
        - name: check-branch-protection
          description: "Verify branch protection rules on a GitHub repository."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository name."
            - name: branch
              in: body
              type: string
              description: "Branch name to check."
          call: "github-api.get-branch-protection"
          with:
            repo: "{{repo}}"
            branch: "{{branch}}"
  consumes:
    - type: http
      namespace: github-api
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branches
          path: "/repos/mastercard/{{repo}}/branches/{{branch}}/protection"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch-protection
              method: GET

Monitors GitHub Dependabot alerts, prioritizes via Checkmarx scan, and creates remediation tickets in Jira.

naftiko: "0.5"
info:
  label: "GitHub Security Advisory Response Pipeline"
  description: "Monitors GitHub Dependabot alerts, prioritizes via Checkmarx scan, and creates remediation tickets in Jira."
  tags:
    - security
    - github
    - checkmarx
    - jira
capability:
  exposes:
    - type: mcp
      namespace: security-advisory
      port: 8080
      tools:
        - name: respond-to-advisory
          description: "Respond to GitHub security advisories with prioritized remediation."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository."
          steps:
            - name: get-alerts
              type: call
              call: "github-api.list-dependabot-alerts"
              with:
                repo: "{{repo}}"
            - name: run-scan
              type: call
              call: "checkmarx-api.create-scan"
              with:
                project: "{{repo}}"
            - name: create-tickets
              type: call
              call: "jira-api.create-issue"
              with:
                project: "SECURITY"
                summary: "Dependabot alerts: {{repo}}"
                description: "Critical: {{get-alerts.critical}}. High: {{get-alerts.high}}. Checkmarx findings: {{run-scan.vulnerability_count}}."
  consumes:
    - type: http
      namespace: github-api
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: alerts
          path: "/repos/mastercard/{{repo}}/dependabot/alerts"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: list-dependabot-alerts
              method: GET
    - type: http
      namespace: checkmarx-api
      baseUri: "https://checkmarx.mastercard.com/cxrestapi"
      authentication:
        type: bearer
        token: "$secrets.checkmarx_token"
      resources:
        - name: scans
          path: "/sast/scans"
          operations:
            - name: create-scan
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Scans a GitHub repository for Dependabot alerts, creates Jira tickets for critical and high vulnerabilities, and notifies the security engineering team via Teams.

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Triage"
  description: "Scans a GitHub repository for Dependabot alerts, creates Jira tickets for critical and high vulnerabilities, and notifies the security engineering team via Teams."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-triage
      port: 8080
      tools:
        - name: triage-security-alerts
          description: "Given a GitHub repository, retrieve all open Dependabot security alerts at critical or high severity, create a Jira security ticket for each, and post a summary to the security engineering Teams channel. Use for weekly security vulnerability reviews and compliance reporting."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "GitHub repository in org/repo format to scan for Dependabot alerts."
            - name: security_channel_id
              in: body
              type: string
              description: "Teams channel ID for the security engineering team."
          steps:
            - name: get-dependabot-alerts
              type: call
              call: "github.get-dependabot-alerts"
              with:
                repo: "{{repository}}"
            - name: create-security-ticket
              type: call
              call: "jira-security.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Security"
                summary: "Dependabot vulnerabilities detected: {{repository}}"
                description: "Repository: {{repository}}\nAlert count: {{get-dependabot-alerts.total_count}}\nCritical: {{get-dependabot-alerts.critical_count}}"
            - name: notify-security-team
              type: call
              call: "msteams-security.post-channel-message"
              with:
                channel_id: "{{security_channel_id}}"
                text: "Security Alert: {{get-dependabot-alerts.total_count}} Dependabot vulnerabilities in {{repository}} ({{get-dependabot-alerts.critical_count}} critical). Jira: {{create-security-ticket.key}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{owner}/{repo}/dependabot/alerts"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
          operations:
            - name: get-dependabot-alerts
              method: GET
    - type: http
      namespace: jira-security
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-security
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Triggers a canary deployment via Harness, monitors error rates in Datadog, and rolls back or promotes based on results.

naftiko: "0.5"
info:
  label: "Harness Deployment Canary Pipeline"
  description: "Triggers a canary deployment via Harness, monitors error rates in Datadog, and rolls back or promotes based on results."
  tags:
    - cicd
    - harness
    - datadog
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: canary-deploy
      port: 8080
      tools:
        - name: run-canary-deployment
          description: "Execute a canary deployment with automated validation."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "Harness service name."
            - name: artifact_version
              in: body
              type: string
              description: "Artifact version to deploy."
          steps:
            - name: trigger-canary
              type: call
              call: "harness-api.trigger-pipeline"
              with:
                service: "{{service_name}}"
                version: "{{artifact_version}}"
            - name: verify-health
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "avg(last_5m):avg:http.error_rate{service:{{service_name}},version:{{artifact_version}}}"
            - name: log-deployment
              type: call
              call: "servicenow-api.create-change"
              with:
                short_description: "Canary deploy: {{service_name}} v{{artifact_version}}"
                description: "Error rate: {{verify-health.value}}%. Pipeline: {{trigger-canary.id}}."
  consumes:
    - type: http
      namespace: harness-api
      baseUri: "https://app.harness.io/gateway/api"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.harness_api_key"
        placement: header
      resources:
        - name: pipelines
          path: "/pipelines/execute"
          operations:
            - name: trigger-pipeline
              method: POST
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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 compliance-related tasks from Jira to track regulatory requirement implementation progress.

naftiko: "0.5"
info:
  label: "Jira Compliance Task Lookup"
  description: "Retrieves compliance-related tasks from Jira to track regulatory requirement implementation progress."
  tags:
    - compliance
    - jira
capability:
  exposes:
    - type: mcp
      namespace: jira-compliance
      port: 8080
      tools:
        - name: get-compliance-tasks
          description: "Look up compliance tasks in a Jira project."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Jira project key."
          call: "jira-api.search-issues"
          with:
            project: "{{project}}"
  consumes:
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: GET

Pulls sprint status across all engineering squads from Jira and publishes a delivery digest to the technology leadership Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Delivery Digest"
  description: "Pulls sprint status across all engineering squads from Jira and publishes a delivery digest to the technology leadership Teams channel."
  tags:
    - devops
    - jira
    - sprint
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: delivery-reporting
      port: 8080
      tools:
        - name: digest-sprint-delivery
          description: "Given a Jira board ID and active sprint ID, retrieve all in-progress, blocked, and completed issues and post a delivery digest to the technology leadership Teams channel. Use for weekly engineering all-hands, sprint reviews, and executive delivery reporting."
          inputParameters:
            - name: board_id
              in: body
              type: integer
              description: "The Jira board ID for the engineering squad."
            - name: sprint_id
              in: body
              type: integer
              description: "The active sprint ID to report on."
            - name: teams_channel_id
              in: body
              type: string
              description: "Teams channel ID to post the sprint digest to."
          steps:
            - name: get-sprint-issues
              type: call
              call: "jira-boards.get-sprint-issues"
              with:
                board_id: "{{board_id}}"
                sprint_id: "{{sprint_id}}"
            - name: post-digest
              type: call
              call: "msteams-delivery.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Sprint Digest — Board {{board_id}} Sprint {{sprint_id}}: {{get-sprint-issues.in_progress_count}} in progress, {{get-sprint-issues.blocked_count}} blocked, {{get-sprint-issues.done_count}} done."
  consumes:
    - type: http
      namespace: jira-boards
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/board/{board_id}/sprint/{sprint_id}/issue"
          inputParameters:
            - name: board_id
              in: path
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: msteams-delivery
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Collects completed Jira issues for a release, generates formatted release notes in Confluence, and notifies stakeholders via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Jira to Confluence Release Notes Generator"
  description: "Collects completed Jira issues for a release, generates formatted release notes in Confluence, and notifies stakeholders via Microsoft Outlook."
  tags:
    - documentation
    - jira
    - confluence
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: release-notes
      port: 8080
      tools:
        - name: generate-release-notes
          description: "Generate and publish release notes from Jira issues."
          inputParameters:
            - name: fix_version
              in: body
              type: string
              description: "Jira fix version."
            - name: project
              in: body
              type: string
              description: "Jira project key."
          steps:
            - name: get-issues
              type: call
              call: "jira-api.search-issues"
              with:
                jql: "project={{project}} AND fixVersion={{fix_version}} AND status=Done"
            - name: create-notes
              type: call
              call: "confluence-api.create-page"
              with:
                space: "RELEASES"
                title: "Release Notes: {{project}} {{fix_version}}"
                body: "Issues completed: {{get-issues.total}}. Features: {{get-issues.feature_count}}. Bugs fixed: {{get-issues.bug_count}}."
            - name: notify-stakeholders
              type: call
              call: "outlook-api.send-mail"
              with:
                to: "stakeholders@mastercard.com"
                subject: "Release Notes: {{project}} {{fix_version}}"
                body: "Release notes published: {{create-notes.url}}. {{get-issues.total}} issues completed."
  consumes:
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: outlook-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Monitors Lambda function concurrency, adjusts reserved capacity, and notifies the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Lambda Payment Processor Scaling Pipeline"
  description: "Monitors Lambda function concurrency, adjusts reserved capacity, and notifies the platform team via Microsoft Teams."
  tags:
    - serverless
    - aws-lambda
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lambda-scaling
      port: 8080
      tools:
        - name: scale-lambda-processor
          description: "Monitor and scale Lambda payment processor concurrency."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "Lambda function name."
            - name: target_concurrency
              in: body
              type: string
              description: "Target reserved concurrency."
          steps:
            - name: check-metrics
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "aws.lambda.concurrent_executions{function:{{function_name}}}"
            - name: update-config
              type: call
              call: "lambda-api.update-concurrency"
              with:
                function_name: "{{function_name}}"
                concurrency: "{{target_concurrency}}"
            - name: notify-team
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "platform-team"
                channel_id: "scaling"
                message: "Lambda scaling: {{function_name}} to {{target_concurrency}}. Current: {{check-metrics.value}}."
  consumes:
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: lambda-api
      baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_sig_v4"
        placement: header
      resources:
        - name: concurrency
          path: "/functions/{{function_name}}/concurrency"
          inputParameters:
            - name: function_name
              in: path
          operations:
            - name: update-concurrency
              method: PUT
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Pulls employer brand metrics from LinkedIn, stores in Snowflake, and creates recruitment insights in Confluence.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Analytics Pipeline"
  description: "Pulls employer brand metrics from LinkedIn, stores in Snowflake, and creates recruitment insights in Confluence."
  tags:
    - recruiting
    - linkedin
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: employer-brand
      port: 8080
      tools:
        - name: analyze-employer-brand
          description: "Analyze employer brand performance and generate insights."
          inputParameters:
            - name: date_range
              in: body
              type: string
              description: "Date range for analysis."
          steps:
            - name: get-metrics
              type: call
              call: "linkedin-api.get-brand-metrics"
              with:
                date_range: "{{date_range}}"
            - name: store-data
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO hr.employer_brand (impressions, followers, apply_rate) VALUES ({{get-metrics.impressions}}, {{get-metrics.followers}}, {{get-metrics.apply_rate}})"
            - name: publish-insights
              type: call
              call: "confluence-api.create-page"
              with:
                space: "HR"
                title: "Employer Brand Report: {{date_range}}"
                body: "Impressions: {{get-metrics.impressions}}. Followers: {{get-metrics.followers}}. Apply rate: {{get-metrics.apply_rate}}%."
  consumes:
    - type: http
      namespace: linkedin-api
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: analytics
          path: "/organizationalEntityShareStatistics"
          operations:
            - name: get-brand-metrics
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves weekly LinkedIn company page engagement metrics for Mastercard and posts a brand performance digest to the marketing leadership Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Performance Digest"
  description: "Retrieves weekly LinkedIn company page engagement metrics for Mastercard and posts a brand performance digest to the marketing leadership Teams channel."
  tags:
    - marketing
    - linkedin
    - social-media
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: brand-reporting
      port: 8080
      tools:
        - name: digest-linkedin-brand-performance
          description: "Given a LinkedIn organization ID and a Teams channel ID, retrieve the latest company page follower growth, post impressions, and engagement rate, and publish a digest to the marketing leadership channel. Use for weekly brand health reviews and talent marketing reporting."
          inputParameters:
            - name: linkedin_org_id
              in: body
              type: string
              description: "LinkedIn organization URN ID for the Mastercard company page."
            - name: teams_channel_id
              in: body
              type: string
              description: "Teams channel ID for the marketing leadership digest."
          steps:
            - name: get-page-stats
              type: call
              call: "linkedin.get-organization-stats"
              with:
                organization_id: "{{linkedin_org_id}}"
            - name: post-digest
              type: call
              call: "msteams-brand.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "LinkedIn Brand Digest: Followers: {{get-page-stats.follower_count}} | Impressions: {{get-page-stats.impressions}} | Engagement Rate: {{get-page-stats.engagement_rate}}%"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: organization-stats
          path: "/organizationalEntityShareStatistics"
          operations:
            - name: get-organization-stats
              method: GET
    - type: http
      namespace: msteams-brand
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Creates a merchant account in Salesforce, provisions payment gateway credentials via MuleSoft, and sends welcome documentation via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Merchant Onboarding Orchestrator"
  description: "Creates a merchant account in Salesforce, provisions payment gateway credentials via MuleSoft, and sends welcome documentation via Microsoft Outlook."
  tags:
    - merchant-management
    - salesforce
    - mulesoft
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: merchant-onboarding
      port: 8080
      tools:
        - name: onboard-merchant
          description: "Orchestrate the full merchant onboarding process."
          inputParameters:
            - name: merchant_name
              in: body
              type: string
              description: "Merchant business name."
            - name: contact_email
              in: body
              type: string
              description: "Primary contact email."
          steps:
            - name: create-account
              type: call
              call: "salesforce-api.create-account"
              with:
                name: "{{merchant_name}}"
                email: "{{contact_email}}"
            - name: provision-gateway
              type: call
              call: "mulesoft-api.provision-credentials"
              with:
                merchant_id: "{{create-account.id}}"
            - name: send-welcome
              type: call
              call: "outlook-api.send-mail"
              with:
                to: "{{contact_email}}"
                subject: "Welcome to Mastercard: {{merchant_name}}"
                body: "Your merchant account is ready. API Key: {{provision-gateway.api_key}}. Documentation: https://developer.mastercard.com."
  consumes:
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: mulesoft-api
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: credentials
          path: "/organizations/mastercard/credentials"
          operations:
            - name: provision-credentials
              method: POST
    - type: http
      namespace: outlook-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Calculates merchant risk scores in Snowflake, updates Salesforce records, and flags high-risk merchants in ServiceNow.

naftiko: "0.5"
info:
  label: "Merchant Risk Scoring Pipeline"
  description: "Calculates merchant risk scores in Snowflake, updates Salesforce records, and flags high-risk merchants in ServiceNow."
  tags:
    - risk
    - snowflake
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: merchant-risk
      port: 8080
      tools:
        - name: score-merchant-risk
          description: "Calculate and update merchant risk scores."
          inputParameters:
            - name: merchant_id
              in: body
              type: string
              description: "Merchant identifier."
          steps:
            - name: calculate-score
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "CALL risk.calculate_merchant_score('{{merchant_id}}')"
            - name: update-crm
              type: call
              call: "salesforce-api.update-account"
              with:
                account_id: "{{merchant_id}}"
                risk_score: "{{calculate-score.score}}"
            - name: flag-high-risk
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "High-risk merchant: {{merchant_id}}"
                description: "Risk score: {{calculate-score.score}}. Factors: {{calculate-score.top_factors}}."
                category: "merchant_risk"
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: update-account
              method: PATCH
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Posts an alert message to a Microsoft Teams channel for payment network operational notifications.

naftiko: "0.5"
info:
  label: "Microsoft Teams Alert Post"
  description: "Posts an alert message to a Microsoft Teams channel for payment network operational notifications."
  tags:
    - communication
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: msteams
      port: 8080
      tools:
        - name: post-alert
          description: "Send an alert to a Teams channel."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Teams team identifier."
            - name: channel_id
              in: body
              type: string
              description: "Teams channel identifier."
            - name: message
              in: body
              type: string
              description: "Alert message text."
          call: "msteams-api.post-message"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
            message: "{{message}}"
  consumes:
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Checks the health and deployment status of APIs managed through MuleSoft Anypoint Platform.

naftiko: "0.5"
info:
  label: "MuleSoft API Health Check"
  description: "Checks the health and deployment status of APIs managed through MuleSoft Anypoint Platform."
  tags:
    - api-management
    - mulesoft
capability:
  exposes:
    - type: mcp
      namespace: mulesoft
      port: 8080
      tools:
        - name: check-api-health
          description: "Retrieve health status for a MuleSoft-managed API."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "MuleSoft API identifier."
          call: "mulesoft-api.get-status"
          with:
            api_id: "{{api_id}}"
  consumes:
    - type: http
      namespace: mulesoft-api
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: apis
          path: "/organizations/mastercard/environments/production/apis/{{api_id}}"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: get-status
              method: GET

Monitors API usage in MuleSoft, enforces rate limits for high-traffic merchants, and notifies account managers via Salesforce.

naftiko: "0.5"
info:
  label: "MuleSoft API Rate Limiting Enforcement"
  description: "Monitors API usage in MuleSoft, enforces rate limits for high-traffic merchants, and notifies account managers via Salesforce."
  tags:
    - api-management
    - mulesoft
    - datadog
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: rate-limiting
      port: 8080
      tools:
        - name: enforce-rate-limits
          description: "Monitor and enforce API rate limits for merchants."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "MuleSoft API identifier."
          steps:
            - name: check-usage
              type: call
              call: "datadog-api.query-metrics"
              with:
                query: "mulesoft.api.requests{api_id:{{api_id}}}"
            - name: update-policy
              type: call
              call: "mulesoft-api.update-policy"
              with:
                api_id: "{{api_id}}"
                rate_limit: "{{check-usage.recommended_limit}}"
            - name: notify-account-mgr
              type: call
              call: "salesforce-api.create-task"
              with:
                subject: "Rate limit updated: API {{api_id}}"
                description: "Current usage: {{check-usage.value}} req/min. New limit: {{check-usage.recommended_limit}}."
  consumes:
    - type: http
      namespace: datadog-api
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: mulesoft-api
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: policies
          path: "/organizations/mastercard/apis/{{api_id}}/policies"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: update-policy
              method: POST
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestrator"
  description: "When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-employee-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Microsoft 365, and Microsoft Teams. Invoke when a new employee is confirmed in Workday."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new employee."
            - name: start_date
              in: body
              type: string
              description: "The employee's start date in YYYY-MM-DD format."
            - name: business_unit
              in: body
              type: string
              description: "The Mastercard business unit the employee is joining (e.g., Technology, Product, Finance)."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: create-onboarding-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New employee onboarding: {{get-worker.full_name}} — {{business_unit}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: provision-m365
              type: call
              call: "msgraph.create-user"
              with:
                display_name: "{{get-worker.full_name}}"
                mail_nickname: "{{get-worker.first_name}}.{{get-worker.last_name}}"
                department: "{{business_unit}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{provision-m365.user_principal_name}}"
                text: "Welcome to Mastercard, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mastercard.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: msgraph
      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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Reviews user access in Okta, compares against Workday employment status, and revokes access for terminated employees.

naftiko: "0.5"
info:
  label: "Okta Access Review and Revocation Pipeline"
  description: "Reviews user access in Okta, compares against Workday employment status, and revokes access for terminated employees."
  tags:
    - identity
    - okta
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: review-and-revoke-access
          description: "Review Okta access against employment status and revoke as needed."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department to audit."
          steps:
            - name: get-okta-users
              type: call
              call: "okta-api.list-users"
              with:
                department: "{{department}}"
            - name: check-workday
              type: call
              call: "workday-api.list-active-workers"
              with:
                department: "{{department}}"
            - name: log-revocations
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Access review: {{department}}"
                description: "Okta users: {{get-okta-users.count}}. Active workers: {{check-workday.count}}."
                category: "access_management"
  consumes:
    - type: http
      namespace: okta-api
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: list-users
              method: GET
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers"
          operations:
            - name: list-active-workers
              method: GET
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Provisions application access in Okta for a new or transferring employee based on their job role, then confirms via Teams.

naftiko: "0.5"
info:
  label: "Okta Application Access Provisioning"
  description: "Provisions application access in Okta for a new or transferring employee based on their job role, then confirms via Teams."
  tags:
    - identity
    - security
    - okta
    - access-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: access-provisioning
      port: 8080
      tools:
        - name: provision-application-access
          description: "Given an employee email and job role code, assign the appropriate Okta application groups for their role and send an access confirmation to their Teams account. Use during onboarding or role changes requiring updated application access across payment and analytics platforms."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "Work email of the employee requiring access provisioning."
            - name: job_role
              in: body
              type: string
              description: "Job role code determining which Okta groups to assign (e.g., PAYMENTS_ANALYST, DATA_ENGINEER, PRODUCT_MANAGER)."
            - name: teams_upn
              in: body
              type: string
              description: "UPN of the employee's Teams account for confirmation."
          steps:
            - name: get-user
              type: call
              call: "okta-prov.get-user-by-email"
              with:
                email: "{{user_email}}"
            - name: assign-role-groups
              type: call
              call: "okta-prov.assign-group"
              with:
                user_id: "{{get-user.user_id}}"
                group_name: "{{job_role}}"
            - name: confirm-access
              type: call
              call: "msteams-access.send-message"
              with:
                recipient_upn: "{{teams_upn}}"
                text: "Your application access has been provisioned for role {{job_role}}. You can access your applications at mastercard.okta.com."
  consumes:
    - type: http
      namespace: okta-prov
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-user-by-email
              method: GET
        - name: group-members
          path: "/groups/{group_id}/users/{user_id}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-group
              method: PUT
    - type: http
      namespace: msteams-access
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Audits MFA enrollment status in Okta, identifies non-compliant users via Workday, and sends enforcement notices via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Okta MFA Enrollment Enforcement Pipeline"
  description: "Audits MFA enrollment status in Okta, identifies non-compliant users via Workday, and sends enforcement notices via Microsoft Teams."
  tags:
    - security
    - okta
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mfa-enforcement
      port: 8080
      tools:
        - name: enforce-mfa-enrollment
          description: "Audit and enforce MFA enrollment across the organization."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department to audit."
          steps:
            - name: get-enrollment
              type: call
              call: "okta-api.get-mfa-status"
              with:
                department: "{{department}}"
            - name: get-employees
              type: call
              call: "workday-api.list-workers"
              with:
                department: "{{department}}"
            - name: send-notice
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "security-team"
                channel_id: "mfa-compliance"
                message: "MFA audit: {{department}}. Enrolled: {{get-enrollment.enrolled_count}}/{{get-employees.count}}. Non-compliant: {{get-enrollment.non_compliant_count}}."
  consumes:
    - type: http
      namespace: okta-api
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: factors
          path: "/users"
          operations:
            - name: get-mfa-status
              method: GET
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers"
          operations:
            - name: list-workers
              method: GET
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves the list of applications assigned to a user in Okta for access management auditing.

naftiko: "0.5"
info:
  label: "Okta User Application Assignments Lookup"
  description: "Retrieves the list of applications assigned to a user in Okta for access management auditing."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: okta
      port: 8080
      tools:
        - name: get-user-apps
          description: "List applications assigned to an Okta user."
          inputParameters:
            - name: user_login
              in: body
              type: string
              description: "Okta user login (email)."
          call: "okta-api.list-user-apps"
          with:
            user_login: "{{user_login}}"
  consumes:
    - type: http
      namespace: okta-api
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_login}}/appLinks"
          inputParameters:
            - name: user_login
              in: path
          operations:
            - name: list-user-apps
              method: GET

Extracts firewall rules from Palo Alto Networks, validates against compliance policies in Snowflake, and reports violations in ServiceNow.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Audit Pipeline"
  description: "Extracts firewall rules from Palo Alto Networks, validates against compliance policies in Snowflake, and reports violations in ServiceNow."
  tags:
    - security
    - palo-alto-networks
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: firewall-audit
      port: 8080
      tools:
        - name: audit-firewall-rules
          description: "Audit Palo Alto firewall rules against compliance policies."
          inputParameters:
            - name: firewall_id
              in: body
              type: string
              description: "Palo Alto firewall identifier."
          steps:
            - name: get-rules
              type: call
              call: "paloalto-api.get-security-rules"
              with:
                firewall_id: "{{firewall_id}}"
            - name: check-compliance
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM security.firewall_policy_violations WHERE firewall_id = '{{firewall_id}}'"
            - name: report-violations
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Firewall audit: {{firewall_id}}"
                description: "Rules: {{get-rules.count}}. Violations: {{check-compliance.count}}."
                category: "security_compliance"
  consumes:
    - type: http
      namespace: paloalto-api
      baseUri: "https://panorama.mastercard.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: rules
          path: "/Policies/SecurityRules"
          operations:
            - name: get-security-rules
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Queries Palo Alto Networks for active firewall policy rules on payment network segments and posts a compliance summary to the security operations Teams channel.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Security Policy Audit"
  description: "Queries Palo Alto Networks for active firewall policy rules on payment network segments and posts a compliance summary to the security operations Teams channel."
  tags:
    - security
    - network
    - palo-alto
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: audit-firewall-policies
          description: "Given a Palo Alto Networks firewall hostname and a Teams channel ID, retrieve all active security policy rules for the specified device group and post a summary of any permissive or non-compliant rules to the security operations channel. Use for PCI-DSS compliance audits and quarterly firewall rule reviews."
          inputParameters:
            - name: firewall_hostname
              in: body
              type: string
              description: "The Palo Alto Networks Panorama or NGFW hostname to audit."
            - name: device_group
              in: body
              type: string
              description: "The Panorama device group or vsys scope to audit."
            - name: security_channel_id
              in: body
              type: string
              description: "Teams channel ID for the security operations team."
          steps:
            - name: get-policies
              type: call
              call: "paloalto.get-security-rules"
              with:
                device_group: "{{device_group}}"
            - name: post-audit-summary
              type: call
              call: "msteams-netsec.post-channel-message"
              with:
                channel_id: "{{security_channel_id}}"
                text: "Firewall Policy Audit for {{firewall_hostname}} ({{device_group}}): {{get-policies.rule_count}} rules retrieved. Review complete — check for permissive rules flagged in output."
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.mastercard.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: security-rules
          path: "/Objects/SecurityRules"
          operations:
            - name: get-security-rules
              method: GET
    - type: http
      namespace: msteams-netsec
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Analyzes transaction patterns in Snowflake, detects fraud via Databricks ML models, and creates investigation cases in ServiceNow.

naftiko: "0.5"
info:
  label: "Payment Fraud Detection and Alerting Pipeline"
  description: "Analyzes transaction patterns in Snowflake, detects fraud via Databricks ML models, and creates investigation cases in ServiceNow."
  tags:
    - fraud
    - snowflake
    - azure-databricks
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: fraud-detection
      port: 8080
      tools:
        - name: detect-payment-fraud
          description: "Analyze transactions for fraud patterns and create investigation cases."
          inputParameters:
            - name: merchant_id
              in: body
              type: string
              description: "Merchant identifier."
            - name: time_window
              in: body
              type: string
              description: "Analysis time window (e.g. last_24h)."
          steps:
            - name: get-transactions
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM payments.transactions WHERE merchant_id = '{{merchant_id}}' AND created_at > DATEADD(hour, -24, CURRENT_TIMESTAMP())"
            - name: run-model
              type: call
              call: "databricks-api.run-job"
              with:
                job_id: "fraud-detection-model"
                parameters: "merchant_id={{merchant_id}}"
            - name: create-case
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Fraud alert: merchant {{merchant_id}}"
                description: "Transactions analyzed: {{get-transactions.count}}. Fraud score: {{run-model.score}}. Window: {{time_window}}."
                category: "fraud_investigation"
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Analyzes transaction volume trends in Snowflake, forecasts capacity needs in Databricks, and creates scaling tickets in Jira.

naftiko: "0.5"
info:
  label: "Payment Network Capacity Planning Pipeline"
  description: "Analyzes transaction volume trends in Snowflake, forecasts capacity needs in Databricks, and creates scaling tickets in Jira."
  tags:
    - capacity-planning
    - snowflake
    - azure-databricks
    - jira
capability:
  exposes:
    - type: mcp
      namespace: capacity-planning
      port: 8080
      tools:
        - name: plan-network-capacity
          description: "Forecast payment network capacity needs and create scaling plans."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Network region."
            - name: forecast_days
              in: body
              type: string
              description: "Forecast horizon in days."
          steps:
            - name: get-trends
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM network.volume_trends WHERE region = '{{region}}'"
            - name: run-forecast
              type: call
              call: "databricks-api.run-job"
              with:
                job_id: "capacity-forecast"
                parameters: "region={{region}},days={{forecast_days}}"
            - name: create-ticket
              type: call
              call: "jira-api.create-issue"
              with:
                project: "INFRA"
                summary: "Capacity planning: {{region}}"
                description: "Forecast: {{run-forecast.peak_tps}}. Current: {{get-trends.current_tps}}. Headroom: {{run-forecast.headroom_pct}}%."
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When a critical Datadog alert fires on payment processing infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer, and posts an alert to the network operations Teams channel.

naftiko: "0.5"
info:
  label: "Payment Network Incident Response"
  description: "When a critical Datadog alert fires on payment processing infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer, and posts an alert to the network operations Teams channel."
  tags:
    - itsm
    - incident-response
    - datadog
    - servicenow
    - microsoft-teams
    - payments
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: handle-payment-network-incident
          description: "Given a Datadog alert for payment network infrastructure, create a ServiceNow P1 incident, assign it to the on-call payments SRE team, and alert the NOC Teams channel. Invoke immediately when any payment processing or authorization service alert fires."
          inputParameters:
            - name: monitor_name
              in: body
              type: string
              description: "The Datadog monitor name that triggered the alert."
            - name: severity
              in: body
              type: string
              description: "Alert severity level: critical or high."
            - name: affected_service
              in: body
              type: string
              description: "The payment service or network component affected."
            - name: alert_url
              in: body
              type: string
              description: "Direct URL to the Datadog alert event."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-p1.create-incident"
              with:
                short_description: "[P1] Payment network alert: {{monitor_name}} — {{affected_service}}"
                urgency: "1"
                category: "payment_infrastructure"
                assigned_group: "Payments_SRE"
            - name: post-noc-alert
              type: call
              call: "msteams-noc.post-channel-message"
              with:
                channel_id: "network-operations-center"
                text: "PAYMENT NETWORK INCIDENT {{create-incident.number}}: {{monitor_name}} | Service: {{affected_service}} | Severity: {{severity}} | Alert: {{alert_url}}"
  consumes:
    - type: http
      namespace: servicenow-p1
      baseUri: "https://mastercard.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-noc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Scans infrastructure with Checkmarx, validates compliance posture in Snowflake, and generates audit reports in Confluence.

naftiko: "0.5"
info:
  label: "PCI Compliance Audit Pipeline"
  description: "Scans infrastructure with Checkmarx, validates compliance posture in Snowflake, and generates audit reports in Confluence."
  tags:
    - compliance
    - checkmarx
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: pci-audit
      port: 8080
      tools:
        - name: run-pci-audit
          description: "Execute a PCI compliance audit across infrastructure and applications."
          inputParameters:
            - name: scope
              in: body
              type: string
              description: "Audit scope (e.g. cardholder-data-environment)."
          steps:
            - name: run-scan
              type: call
              call: "checkmarx-api.create-scan"
              with:
                project: "{{scope}}"
            - name: check-posture
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM compliance.pci_controls WHERE scope = '{{scope}}' AND status != 'compliant'"
            - name: generate-report
              type: call
              call: "confluence-api.create-page"
              with:
                space: "COMPLIANCE"
                title: "PCI Audit: {{scope}}"
                body: "Scan findings: {{run-scan.vulnerability_count}}. Non-compliant controls: {{check-posture.count}}."
  consumes:
    - type: http
      namespace: checkmarx-api
      baseUri: "https://checkmarx.mastercard.com/cxrestapi"
      authentication:
        type: bearer
        token: "$secrets.checkmarx_token"
      resources:
        - name: scans
          path: "/sast/scans"
          operations:
            - name: create-scan
              method: POST
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Triggers a Postman collection test run to validate payment API endpoints and returns pass/fail results.

naftiko: "0.5"
info:
  label: "Postman API Collection Test Run"
  description: "Triggers a Postman collection test run to validate payment API endpoints and returns pass/fail results."
  tags:
    - api-testing
    - postman
capability:
  exposes:
    - type: mcp
      namespace: postman
      port: 8080
      tools:
        - name: run-collection-tests
          description: "Trigger a Postman collection run and retrieve results."
          inputParameters:
            - name: collection_id
              in: body
              type: string
              description: "Postman collection identifier."
          call: "postman-api.run-collection"
          with:
            collection_id: "{{collection_id}}"
  consumes:
    - type: http
      namespace: postman-api
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apikey
        key: "X-API-Key"
        value: "$secrets.postman_api_key"
        placement: header
      resources:
        - name: collections
          path: "/collections/{{collection_id}}/runs"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: run-collection
              method: POST

Triggers a Power BI dataset refresh for the executive payments dashboard and notifies the analytics team in Teams when the refresh is complete.

naftiko: "0.5"
info:
  label: "Power BI Executive Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the executive payments dashboard and notifies the analytics team in Teams when the refresh is complete."
  tags:
    - data
    - analytics
    - power-bi
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: exec-reporting
      port: 8080
      tools:
        - name: refresh-executive-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the executive payments dashboard and notify the analytics team channel in Teams. Use before executive meetings, board presentations, or quarterly business reviews."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the executive dashboard dataset."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
            - name: notify_channel_id
              in: body
              type: string
              description: "Teams channel ID for the analytics team notification."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.trigger-refresh"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-analytics
              type: call
              call: "msteams-analytics.post-channel-message"
              with:
                channel_id: "{{notify_channel_id}}"
                text: "Executive dashboard refresh triggered for dataset {{dataset_id}} in workspace {{workspace_id}}. Data will be current shortly."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-analytics
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Aggregates KPIs from Snowflake, refreshes Power BI datasets, and sends executive summaries via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Power BI Executive KPI Refresh Pipeline"
  description: "Aggregates KPIs from Snowflake, refreshes Power BI datasets, and sends executive summaries via Microsoft Outlook."
  tags:
    - reporting
    - snowflake
    - power-bi
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: exec-kpi
      port: 8080
      tools:
        - name: refresh-executive-kpis
          description: "Refresh executive KPI dashboards and distribute summaries."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g. weekly, monthly)."
          steps:
            - name: aggregate-kpis
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "CALL reporting.aggregate_executive_kpis('{{period}}')"
            - name: refresh-dashboard
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "executive-kpis"
            - name: send-summary
              type: call
              call: "outlook-api.send-mail"
              with:
                to: "executive-team@mastercard.com"
                subject: "Executive KPI Summary: {{period}}"
                body: "KPI dashboard refreshed. Transaction volume: {{aggregate-kpis.total_volume}}. Revenue: {{aggregate-kpis.revenue}}."
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: outlook-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Checks the last refresh status of a Power BI dataset used for payment network executive reporting.

naftiko: "0.5"
info:
  label: "Power BI Report Refresh Status"
  description: "Checks the last refresh status of a Power BI dataset used for payment network executive reporting."
  tags:
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: powerbi
      port: 8080
      tools:
        - name: get-refresh-status
          description: "Retrieve the last refresh status for a Power BI dataset."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset identifier."
          call: "powerbi-api.get-refresh-history"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Extracts business unit cost center data from SAP S/4HANA and refreshes the consolidated forecast Power BI dataset for CFO and finance leadership review.

naftiko: "0.5"
info:
  label: "Quarterly Finance Forecast Consolidation"
  description: "Extracts business unit cost center data from SAP S/4HANA and refreshes the consolidated forecast Power BI dataset for CFO and finance leadership review."
  tags:
    - finance
    - forecasting
    - sap
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: finance-planning
      port: 8080
      tools:
        - name: consolidate-quarterly-forecast
          description: "Given a fiscal quarter identifier, SAP cost center hierarchy, and Power BI dataset ID, extract actuals and forecast data from SAP S/4HANA and trigger a Power BI refresh. Use during quarterly planning cycles, budget reviews, and CFO reporting preparation."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "Fiscal quarter to consolidate (e.g., Q2-2026)."
            - name: powerbi_dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the consolidated finance forecast."
            - name: powerbi_workspace_id
              in: body
              type: string
              description: "Power BI workspace ID containing the forecast dataset."
          steps:
            - name: get-sap-actuals
              type: call
              call: "sap-finance.get-cost-center-data"
              with:
                fiscal_period: "{{fiscal_quarter}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-finance.trigger-refresh"
              with:
                workspace_id: "{{powerbi_workspace_id}}"
                dataset_id: "{{powerbi_dataset_id}}"
  consumes:
    - type: http
      namespace: sap-finance
      baseUri: "https://mastercard-s4.sap.com/sap/opu/odata/sap/FAR_ACDOCA_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-data
          path: "/AcdocaItems"
          operations:
            - name: get-cost-center-data
              method: GET
    - type: http
      namespace: powerbi-finance
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Extracts merchant performance from Snowflake, generates review reports in Power BI, and creates review tasks in Jira.

naftiko: "0.5"
info:
  label: "Quarterly Merchant Review Automation"
  description: "Extracts merchant performance from Snowflake, generates review reports in Power BI, and creates review tasks in Jira."
  tags:
    - merchant-management
    - snowflake
    - power-bi
    - jira
capability:
  exposes:
    - type: mcp
      namespace: merchant-review
      port: 8080
      tools:
        - name: generate-quarterly-review
          description: "Automate quarterly merchant performance reviews."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter (e.g. Q1-2026)."
            - name: region
              in: body
              type: string
              description: "Region code."
          steps:
            - name: get-performance
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM merchants.quarterly_performance WHERE quarter = '{{quarter}}' AND region = '{{region}}'"
            - name: refresh-report
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "merchant-review-{{region}}"
            - name: create-reviews
              type: call
              call: "jira-api.create-issue"
              with:
                project: "MERCHANTS"
                summary: "Quarterly review: {{region}} {{quarter}}"
                description: "Merchants reviewed: {{get-performance.count}}. Top performer: {{get-performance.top.name}}."
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Runs data quality checks on Redshift payment tables, logs results in Snowflake, and alerts data teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Redshift Data Quality Validation Pipeline"
  description: "Runs data quality checks on Redshift payment tables, logs results in Snowflake, and alerts data teams via Microsoft Teams."
  tags:
    - data-quality
    - amazon-redshift
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: redshift-dq
      port: 8080
      tools:
        - name: validate-redshift-data
          description: "Run data quality checks on Redshift and alert on failures."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "Redshift table to validate."
          steps:
            - name: run-checks
              type: call
              call: "redshift-api.execute-statement"
              with:
                query: "SELECT COUNT(*) as nulls FROM {{table_name}} WHERE primary_key IS NULL"
            - name: log-results
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO data_quality.checks (table_name, null_count) VALUES ('{{table_name}}', {{run-checks.nulls}})"
            - name: alert-team
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "data-engineering"
                channel_id: "quality-alerts"
                message: "Data quality check: {{table_name}}. Null PKs: {{run-checks.nulls}}."
  consumes:
    - type: http
      namespace: redshift-api
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_sig_v4"
        placement: header
      resources:
        - name: statements
          path: "/"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Tracks regulatory changes in Confluence, assesses impact in Snowflake, and creates compliance tasks in Jira.

naftiko: "0.5"
info:
  label: "Regulatory Change Impact Assessment Workflow"
  description: "Tracks regulatory changes in Confluence, assesses impact in Snowflake, and creates compliance tasks in Jira."
  tags:
    - compliance
    - confluence
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: reg-change
      port: 8080
      tools:
        - name: assess-regulatory-change
          description: "Assess the impact of a regulatory change on payment operations."
          inputParameters:
            - name: regulation_id
              in: body
              type: string
              description: "Regulation reference identifier."
          steps:
            - name: get-regulation
              type: call
              call: "confluence-api.get-page"
              with:
                page_id: "{{regulation_id}}"
            - name: assess-impact
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "CALL compliance.assess_regulation_impact('{{regulation_id}}')"
            - name: create-tasks
              type: call
              call: "jira-api.create-issue"
              with:
                project: "COMPLIANCE"
                summary: "Regulatory change: {{get-regulation.title}}"
                description: "Affected systems: {{assess-impact.system_count}}. Deadline: {{assess-impact.deadline}}."
  consumes:
    - type: http
      namespace: confluence-api
      baseUri: "https://mastercard.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_password"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves account activity data from Salesforce and updates each financial institution account record with a calculated health score based on recent transaction volumes and engagement.

naftiko: "0.5"
info:
  label: "Salesforce Account Health Score Update"
  description: "Retrieves account activity data from Salesforce and updates each financial institution account record with a calculated health score based on recent transaction volumes and engagement."
  tags:
    - crm
    - sales
    - salesforce
    - account-management
capability:
  exposes:
    - type: mcp
      namespace: account-intelligence
      port: 8080
      tools:
        - name: update-account-health-score
          description: "Given a Salesforce account ID, retrieve the account's recent activity metrics, calculate a health score, and update the account record. Use for quarterly account reviews, renewal risk identification, and sales prioritization for financial institution and merchant accounts."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID to calculate and update health score for."
          steps:
            - name: get-account
              type: call
              call: "salesforce-accounts.get-account"
              with:
                account_id: "{{account_id}}"
            - name: update-health-score
              type: call
              call: "salesforce-accounts.update-account"
              with:
                account_id: "{{account_id}}"
                health_score_last_calculated: "2026-03-20"
  consumes:
    - type: http
      namespace: salesforce-accounts
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{account_id}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
            - name: update-account
              method: PATCH

Retrieves merchant account details from Salesforce for payment network relationship management.

naftiko: "0.5"
info:
  label: "Salesforce Merchant Account Lookup"
  description: "Retrieves merchant account details from Salesforce for payment network relationship management."
  tags:
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce-merchant
      port: 8080
      tools:
        - name: get-merchant-account
          description: "Look up a merchant account in Salesforce by ID."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Salesforce account identifier."
          call: "salesforce-api.get-account"
          with:
            account_id: "{{account_id}}"
  consumes:
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Aggregates merchant performance data from Snowflake, calculates health scores, and updates Salesforce account records.

naftiko: "0.5"
info:
  label: "Salesforce Merchant Health Score Updater"
  description: "Aggregates merchant performance data from Snowflake, calculates health scores, and updates Salesforce account records."
  tags:
    - merchant-management
    - snowflake
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: merchant-health
      port: 8080
      tools:
        - name: update-merchant-health
          description: "Calculate and update merchant health scores across platforms."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Geographic region."
          steps:
            - name: aggregate-data
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "CALL merchants.calculate_health_scores('{{region}}')"
            - name: update-salesforce
              type: call
              call: "salesforce-api.composite-update"
              with:
                object: "Account"
                region: "{{region}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "merchant-health-{{region}}"
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: composite
          path: "/composite/sobjects"
          operations:
            - name: composite-update
              method: PATCH
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Triggers a Net Promoter Score survey campaign in Salesforce Marketing Cloud for a cohort of financial institution contacts and logs the campaign event in Salesforce CRM.

naftiko: "0.5"
info:
  label: "Salesforce NPS Campaign Trigger"
  description: "Triggers a Net Promoter Score survey campaign in Salesforce Marketing Cloud for a cohort of financial institution contacts and logs the campaign event in Salesforce CRM."
  tags:
    - crm
    - marketing
    - salesforce
    - nps
    - customer-success
capability:
  exposes:
    - type: mcp
      namespace: nps-campaigns
      port: 8080
      tools:
        - name: trigger-nps-campaign
          description: "Given a Salesforce campaign ID containing a financial institution contact cohort, trigger the NPS survey journey in Salesforce Marketing Cloud and update the campaign record with the launch timestamp. Use for quarterly relationship NPS surveys with issuing banks and merchant partners."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID whose members will receive the NPS survey."
            - name: survey_journey_name
              in: body
              type: string
              description: "The Salesforce Marketing Cloud journey name for the NPS survey."
          steps:
            - name: get-campaign
              type: call
              call: "salesforce-nps.get-campaign"
              with:
                campaign_id: "{{campaign_id}}"
            - name: trigger-journey
              type: call
              call: "sfmc-nps.trigger-journey"
              with:
                journey_name: "{{survey_journey_name}}"
                campaign_id: "{{campaign_id}}"
            - name: update-campaign
              type: call
              call: "salesforce-nps.update-campaign"
              with:
                campaign_id: "{{campaign_id}}"
                status: "Active"
  consumes:
    - type: http
      namespace: salesforce-nps
      baseUri: "https://mastercard.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: get-campaign
              method: GET
            - name: update-campaign
              method: PATCH
    - type: http
      namespace: sfmc-nps
      baseUri: "https://mc.mastercard.com/interaction/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: journeys
          path: "/interactions/contactEvents"
          operations:
            - name: trigger-journey
              method: POST

Identifies target merchants in Salesforce, distributes NPS surveys via HubSpot, and aggregates results in Snowflake.

naftiko: "0.5"
info:
  label: "Salesforce NPS Survey Distribution Pipeline"
  description: "Identifies target merchants in Salesforce, distributes NPS surveys via HubSpot, and aggregates results in Snowflake."
  tags:
    - merchant-management
    - salesforce
    - hubspot
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: nps-survey
      port: 8080
      tools:
        - name: distribute-nps-survey
          description: "Distribute NPS surveys to merchants and track responses."
          inputParameters:
            - name: segment
              in: body
              type: string
              description: "Merchant segment to survey."
          steps:
            - name: get-merchants
              type: call
              call: "salesforce-api.get-accounts"
              with:
                segment: "{{segment}}"
            - name: send-surveys
              type: call
              call: "hubspot-api.create-campaign"
              with:
                name: "NPS Survey: {{segment}}"
                contacts: "{{get-merchants.email_list}}"
            - name: setup-tracking
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO surveys.nps_campaigns (segment, merchant_count, campaign_id) VALUES ('{{segment}}', {{get-merchants.count}}, '{{send-surveys.id}}')"
  consumes:
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: get-accounts
              method: GET
    - type: http
      namespace: hubspot-api
      baseUri: "https://api.hubapi.com/marketing/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST

When a Salesforce opportunity reaches Closed Won, creates a Jira project or epic for delivery and notifies the assigned solutions team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Sync to Jira"
  description: "When a Salesforce opportunity reaches Closed Won, creates a Jira project or epic for delivery and notifies the assigned solutions team via Microsoft Teams."
  tags:
    - crm
    - sales
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sales-delivery
      port: 8080
      tools:
        - name: sync-opportunity-to-delivery
          description: "Given a Salesforce opportunity ID that has reached Closed Won stage, create a corresponding Jira epic for the delivery team and notify the solutions engineering Teams channel. Invoke when a financial institution or merchant deal closes in Salesforce."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID that has reached Closed Won."
            - name: delivery_team_channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for the delivery team notification."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce-opps.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-epic
              type: call
              call: "jira-delivery.create-issue"
              with:
                project_key: "DEL"
                issuetype: "Epic"
                summary: "Delivery: {{get-opportunity.account_name}} — {{get-opportunity.name}}"
                description: "Salesforce Opportunity: {{opportunity_id}}\nAccount: {{get-opportunity.account_name}}\nContract Value: {{get-opportunity.amount}}\nClose Date: {{get-opportunity.close_date}}"
            - name: notify-team
              type: call
              call: "msteams-delivery.post-channel-message"
              with:
                channel_id: "{{delivery_team_channel_id}}"
                text: "New deal closed: {{get-opportunity.account_name}} — {{get-opportunity.name}} (${{get-opportunity.amount}}). Jira epic: {{create-epic.key}}"
  consumes:
    - type: http
      namespace: salesforce-opps
      baseUri: "https://mastercard.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
    - type: http
      namespace: jira-delivery
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-delivery
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Identifies expiring partner agreements in Salesforce, creates renewal tasks in Jira, and sends notifications via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Salesforce Partner Agreement Renewal Pipeline"
  description: "Identifies expiring partner agreements in Salesforce, creates renewal tasks in Jira, and sends notifications via Microsoft Outlook."
  tags:
    - partner-management
    - salesforce
    - jira
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: agreement-renewal
      port: 8080
      tools:
        - name: process-agreement-renewals
          description: "Identify and process expiring partner agreements."
          inputParameters:
            - name: days_until_expiry
              in: body
              type: string
              description: "Days before expiry to trigger renewal."
          steps:
            - name: get-expiring
              type: call
              call: "salesforce-api.get-agreements"
              with:
                days: "{{days_until_expiry}}"
            - name: create-task
              type: call
              call: "jira-api.create-issue"
              with:
                project: "PARTNERS"
                summary: "Agreement renewal: {{get-expiring.top.partner_name}}"
                description: "Expires: {{get-expiring.top.expiry_date}}. Value: {{get-expiring.top.annual_value}}."
            - name: notify-partner
              type: call
              call: "outlook-api.send-mail"
              with:
                to: "{{get-expiring.top.contact_email}}"
                subject: "Agreement Renewal: {{get-expiring.top.partner_name}}"
                body: "Your partnership agreement expires on {{get-expiring.top.expiry_date}}. Please contact your account manager."
  consumes:
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: agreements
          path: "/sobjects/Contract"
          operations:
            - name: get-agreements
              method: GET
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: outlook-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Creates a new vendor record in SAP Ariba, assigns the appropriate spend categories, and notifies the procurement team via Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Vendor Onboarding"
  description: "Creates a new vendor record in SAP Ariba, assigns the appropriate spend categories, and notifies the procurement team via Teams."
  tags:
    - procurement
    - sap-ariba
    - vendor-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Given a vendor company name, tax ID, and spend category, create the vendor record in SAP Ariba and notify the procurement lead via Teams. Use when a new supplier is approved for Mastercard procurement."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "Legal company name of the vendor to onboard."
            - name: tax_id
              in: body
              type: string
              description: "Vendor tax identification number (EIN/TIN)."
            - name: spend_category
              in: body
              type: string
              description: "Primary SAP Ariba spend category for this vendor."
            - name: procurement_lead_upn
              in: body
              type: string
              description: "UPN of the procurement lead to notify upon completion."
          steps:
            - name: create-vendor
              type: call
              call: "ariba.create-vendor"
              with:
                name: "{{vendor_name}}"
                tax_id: "{{tax_id}}"
                category: "{{spend_category}}"
            - name: notify-procurement
              type: call
              call: "msteams-vendors.send-message"
              with:
                recipient_upn: "{{procurement_lead_upn}}"
                text: "New vendor onboarded in SAP Ariba: {{vendor_name}} ({{spend_category}}). Vendor ID: {{create-vendor.vendor_id}}. Ready for procurement use."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: vendors
          path: "/suppliers"
          operations:
            - name: create-vendor
              method: POST
    - type: http
      namespace: msteams-vendors
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a submitted SAP Concur expense report and notifies the approver via Teams with a summary and direct approval link.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Approval Flow"
  description: "Retrieves a submitted SAP Concur expense report and notifies the approver via Teams with a summary and direct approval link."
  tags:
    - finance
    - expense-management
    - sap-concur
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-management
      port: 8080
      tools:
        - name: notify-expense-approver
          description: "Given a SAP Concur expense report ID and approver UPN, retrieve the report details and send the approver a Teams notification with a cost summary and direct link to review. Use when an employee submits a travel or business expense report requiring manager approval."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID to retrieve and surface for approval."
            - name: approver_upn
              in: body
              type: string
              description: "UPN of the approving manager."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: notify-approver
              type: call
              call: "msteams-concur.send-message"
              with:
                recipient_upn: "{{approver_upn}}"
                text: "Expense approval needed: {{get-report.employee_name}} submitted ${{get-report.total_amount}} for {{get-report.purpose}}. Report ID: {{expense_report_id}}. Approve at: {{get-report.approval_url}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{report_id}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: msteams-concur
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Reviews expense reports from SAP Concur, validates against policies in Snowflake, and flags violations in Jira.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Compliance Check"
  description: "Reviews expense reports from SAP Concur, validates against policies in Snowflake, and flags violations in Jira."
  tags:
    - finance
    - sap-concur
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: expense-compliance
      port: 8080
      tools:
        - name: check-expense-compliance
          description: "Audit travel expenses against corporate policies."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
          steps:
            - name: get-report
              type: call
              call: "concur-api.get-report"
              with:
                report_id: "{{report_id}}"
            - name: check-policy
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM finance.expense_policy_violations WHERE report_id = '{{report_id}}'"
            - name: flag-violations
              type: call
              call: "jira-api.create-issue"
              with:
                project: "FINANCE"
                summary: "Expense policy violation: {{report_id}}"
                description: "Total: {{get-report.total}}. Violations: {{check-policy.count}}."
  consumes:
    - type: http
      namespace: concur-api
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves a SAP purchase order by number and returns header status, vendor details, and total value for procurement and finance review.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Retrieves a SAP purchase order by number and returns header status, vendor details, and total value for procurement and finance review."
  tags:
    - procurement
    - erp
    - sap
    - finance
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, return the PO status, vendor name, total value, and currency. Use for procurement approvals, vendor invoice reconciliation, and accounts payable processing."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (e.g., 4500123456)."
          call: "sap-erp.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"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://mastercard-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{po_number}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves vendor invoices from SAP, validates against purchase orders in Snowflake, and routes approvals via ServiceNow.

naftiko: "0.5"
info:
  label: "SAP Vendor Invoice Processing Pipeline"
  description: "Retrieves vendor invoices from SAP, validates against purchase orders in Snowflake, and routes approvals via ServiceNow."
  tags:
    - procurement
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: invoice-processing
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Validate and route vendor invoices for approval."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "SAP invoice identifier."
          steps:
            - name: get-invoice
              type: call
              call: "sap-api.get-invoice"
              with:
                invoice_id: "{{invoice_id}}"
            - name: validate-po
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM procurement.purchase_orders WHERE po_number = '{{get-invoice.po_number}}'"
            - name: route-approval
              type: call
              call: "servicenow-api.create-request"
              with:
                short_description: "Invoice approval: {{invoice_id}}"
                description: "Vendor: {{get-invoice.vendor}}. Amount: {{get-invoice.amount}}. PO: {{get-invoice.po_number}}."
  consumes:
    - type: http
      namespace: sap-api
      baseUri: "https://sap.mastercard.com/sap/opu/odata/sap"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/API_SUPPLIER_INVOICE_PROCESS_SRV/A_SupplierInvoice('{{invoice_id}}')"
          inputParameters:
            - name: invoice_id
              in: path
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Submits a technology change request in ServiceNow for payment network changes and notifies the Change Advisory Board via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Change Management Submission"
  description: "Submits a technology change request in ServiceNow for payment network changes and notifies the Change Advisory Board via Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: submit-network-change
          description: "Given a change title, description, risk level, and implementation window, create a ServiceNow change request for a payment network change and notify the CAB channel in Teams. Use for planned maintenance, configuration changes, and software releases on payment processing systems."
          inputParameters:
            - name: change_title
              in: body
              type: string
              description: "Short title of the change request."
            - name: change_description
              in: body
              type: string
              description: "Full description of the change, risk, and rollback plan."
            - name: risk_level
              in: body
              type: string
              description: "Change risk level: low, medium, or high."
            - name: implementation_window
              in: body
              type: string
              description: "Planned implementation date/time window in ISO 8601 format."
          steps:
            - name: create-change
              type: call
              call: "servicenow-changes.create-change"
              with:
                short_description: "{{change_title}}"
                description: "{{change_description}}"
                risk: "{{risk_level}}"
                start_date: "{{implementation_window}}"
            - name: notify-cab
              type: call
              call: "msteams-cab.post-channel-message"
              with:
                channel_id: "change-advisory-board"
                text: "New change request: {{create-change.number}} — {{change_title}} | Risk: {{risk_level}} | Window: {{implementation_window}} | Review in ServiceNow."
  consumes:
    - type: http
      namespace: servicenow-changes
      baseUri: "https://mastercard.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-cab
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Fetches the current status and assignment of a ServiceNow incident for payment platform operations.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Fetches the current status and assignment of a ServiceNow incident for payment platform operations."
  tags:
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-incident-status
          description: "Retrieve status details for a ServiceNow incident."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number."
          call: "servicenow-api.get-incident"
          with:
            incident_number: "{{incident_number}}"
  consumes:
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Analyzes cross-border payment flows in Snowflake, detects anomalies in Databricks, and publishes insights to Power BI.

naftiko: "0.5"
info:
  label: "Snowflake Cross-Border Transaction Analytics"
  description: "Analyzes cross-border payment flows in Snowflake, detects anomalies in Databricks, and publishes insights to Power BI."
  tags:
    - analytics
    - snowflake
    - azure-databricks
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: cross-border-analytics
      port: 8080
      tools:
        - name: analyze-cross-border-flows
          description: "Analyze cross-border payment patterns and detect anomalies."
          inputParameters:
            - name: corridor
              in: body
              type: string
              description: "Payment corridor (e.g. US-EU, US-APAC)."
          steps:
            - name: get-flows
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM payments.cross_border_summary WHERE corridor = '{{corridor}}'"
            - name: detect-anomalies
              type: call
              call: "databricks-api.run-job"
              with:
                job_id: "cross-border-anomaly"
                parameters: "corridor={{corridor}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "cross-border-analytics"
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: databricks-api
      baseUri: "https://mastercard.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Checks scheduled Snowflake task execution health for transaction analytics pipelines and creates a ServiceNow incident if critical tasks have failed.

naftiko: "0.5"
info:
  label: "Snowflake Transaction Analytics Pipeline Monitor"
  description: "Checks scheduled Snowflake task execution health for transaction analytics pipelines and creates a ServiceNow incident if critical tasks have failed."
  tags:
    - data
    - analytics
    - snowflake
    - servicenow
    - monitoring
    - payments
capability:
  exposes:
    - type: mcp
      namespace: analytics-ops
      port: 8080
      tools:
        - name: monitor-transaction-pipeline
          description: "Given a Snowflake database and schema hosting transaction analytics tasks, check for failed or overdue tasks and automatically open a ServiceNow incident if failures are detected. Use for daily monitoring of payment transaction data pipelines."
          inputParameters:
            - name: snowflake_database
              in: body
              type: string
              description: "The Snowflake database containing the transaction analytics tasks."
            - name: snowflake_schema
              in: body
              type: string
              description: "The Snowflake schema to check for task failures."
          steps:
            - name: get-task-status
              type: call
              call: "snowflake.get-task-history"
              with:
                database: "{{snowflake_database}}"
                schema: "{{snowflake_schema}}"
            - name: create-incident
              type: call
              call: "servicenow-analytics.create-incident"
              with:
                short_description: "Snowflake pipeline failure: {{snowflake_database}}.{{snowflake_schema}}"
                category: "data_pipeline"
                urgency: "2"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/databases/{database}/schemas/{schema}/tasks"
          inputParameters:
            - name: database
              in: path
            - name: schema
              in: path
          operations:
            - name: get-task-history
              method: GET
    - type: http
      namespace: servicenow-analytics
      baseUri: "https://mastercard.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

Queries Snowflake for aggregate transaction volume metrics by region and time period for payment network analytics.

naftiko: "0.5"
info:
  label: "Snowflake Transaction Volume Query"
  description: "Queries Snowflake for aggregate transaction volume metrics by region and time period for payment network analytics."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: transaction-analytics
      port: 8080
      tools:
        - name: get-transaction-volume
          description: "Query aggregate transaction volumes from Snowflake."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Geographic region code."
            - name: date
              in: body
              type: string
              description: "Query date YYYY-MM-DD."
          call: "snowflake-api.run-query"
          with:
            region: "{{region}}"
            date: "{{date}}"
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries fraud-related logs from Splunk, correlates with transaction data in Snowflake, and creates investigation tickets in Jira.

naftiko: "0.5"
info:
  label: "Splunk Fraud Investigation Pipeline"
  description: "Queries fraud-related logs from Splunk, correlates with transaction data in Snowflake, and creates investigation tickets in Jira."
  tags:
    - fraud
    - splunk
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: fraud-investigation
      port: 8080
      tools:
        - name: investigate-fraud-event
          description: "Investigate a fraud event using log correlation and transaction analysis."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Splunk alert identifier."
          steps:
            - name: get-logs
              type: call
              call: "splunk-api.search-events"
              with:
                alert_id: "{{alert_id}}"
            - name: correlate-transactions
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM payments.transactions WHERE alert_id = '{{alert_id}}'"
            - name: create-investigation
              type: call
              call: "jira-api.create-issue"
              with:
                project: "FRAUD"
                summary: "Fraud investigation: {{alert_id}}"
                description: "Log events: {{get-logs.count}}. Transactions: {{correlate-transactions.count}}."
  consumes:
    - type: http
      namespace: splunk-api
      baseUri: "https://splunk.mastercard.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search-events
              method: POST
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves security event logs from Splunk for a specified time range and source to support fraud investigation.

naftiko: "0.5"
info:
  label: "Splunk Security Event Lookup"
  description: "Retrieves security event logs from Splunk for a specified time range and source to support fraud investigation."
  tags:
    - security
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: splunk-security
      port: 8080
      tools:
        - name: get-security-events
          description: "Search Splunk for security events by source and time range."
          inputParameters:
            - name: source
              in: body
              type: string
              description: "Event source identifier."
            - name: time_range
              in: body
              type: string
              description: "Time range (e.g. last_1h, last_24h)."
          call: "splunk-api.search-events"
          with:
            source: "{{source}}"
            time_range: "{{time_range}}"
  consumes:
    - type: http
      namespace: splunk-api
      baseUri: "https://splunk.mastercard.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search-events
              method: POST

Triggers a Terraform Cloud workspace run to provision new payment processing infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams.

naftiko: "0.5"
info:
  label: "Terraform Cloud Infrastructure Provisioning"
  description: "Triggers a Terraform Cloud workspace run to provision new payment processing infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams."
  tags:
    - cloud
    - infrastructure
    - terraform
    - servicenow
    - microsoft-teams
    - provisioning
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: provision-payment-infrastructure
          description: "Given a Terraform Cloud workspace ID and environment target, trigger a Terraform run for payment infrastructure provisioning, create a ServiceNow change record, and notify the infrastructure team. Use when scaling payment processing capacity or deploying new regions."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Terraform Cloud workspace ID for the infrastructure configuration."
            - name: environment
              in: body
              type: string
              description: "Target environment: dev, staging, or production."
            - name: region
              in: body
              type: string
              description: "Target cloud region for the infrastructure deployment."
          steps:
            - name: trigger-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "Provisioning payment infrastructure in {{region}} ({{environment}})"
            - name: create-change
              type: call
              call: "servicenow-infra.create-change"
              with:
                short_description: "Infrastructure provisioning: {{region}} — {{environment}}"
                category: "cloud_provisioning"
            - name: notify-infra
              type: call
              call: "msteams-infra.post-channel-message"
              with:
                channel_id: "infrastructure-deployments"
                text: "Terraform run triggered for {{environment}} in {{region}}. Change: {{create-change.number}}. Run ID: {{trigger-run.run_id}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: servicenow-infra
      baseUri: "https://mastercard.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-infra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Detects infrastructure drift in Terraform Cloud, triggers remediation runs, and logs changes in ServiceNow.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Drift Remediation"
  description: "Detects infrastructure drift in Terraform Cloud, triggers remediation runs, and logs changes in ServiceNow."
  tags:
    - infrastructure
    - terraform
    - servicenow
    - jira
capability:
  exposes:
    - type: mcp
      namespace: terraform-drift
      port: 8080
      tools:
        - name: remediate-drift
          description: "Detect and remediate Terraform infrastructure drift."
          inputParameters:
            - name: workspace
              in: body
              type: string
              description: "Terraform workspace name."
          steps:
            - name: detect-drift
              type: call
              call: "terraform-api.plan-run"
              with:
                workspace: "{{workspace}}"
            - name: apply-fix
              type: call
              call: "terraform-api.apply-run"
              with:
                run_id: "{{detect-drift.id}}"
            - name: log-change
              type: call
              call: "servicenow-api.create-change"
              with:
                short_description: "Terraform drift remediation: {{workspace}}"
                description: "Resources drifted: {{detect-drift.resource_changes}}. Run ID: {{detect-drift.id}}."
  consumes:
    - type: http
      namespace: terraform-api
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/workspaces/{{workspace}}/runs"
          inputParameters:
            - name: workspace
              in: path
          operations:
            - name: plan-run
              method: POST
            - name: apply-run
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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 dispute details from Salesforce, analyzes transaction history in Snowflake, and updates the resolution in ServiceNow.

naftiko: "0.5"
info:
  label: "Transaction Dispute Resolution Workflow"
  description: "Retrieves dispute details from Salesforce, analyzes transaction history in Snowflake, and updates the resolution in ServiceNow."
  tags:
    - disputes
    - salesforce
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: dispute-resolution
      port: 8080
      tools:
        - name: resolve-transaction-dispute
          description: "Investigate and resolve a payment transaction dispute."
          inputParameters:
            - name: dispute_id
              in: body
              type: string
              description: "Salesforce dispute case ID."
          steps:
            - name: get-dispute
              type: call
              call: "salesforce-api.get-case"
              with:
                case_id: "{{dispute_id}}"
            - name: analyze-history
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "SELECT * FROM payments.transaction_history WHERE transaction_id = '{{get-dispute.transaction_id}}'"
            - name: update-resolution
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Dispute resolution: {{dispute_id}}"
                description: "Transaction: {{get-dispute.transaction_id}}. Amount: {{get-dispute.amount}}. History records: {{analyze-history.count}}."
                category: "dispute_resolution"
  consumes:
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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

Reconciles settlement files from Snowflake, detects discrepancies, and creates resolution tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Transaction Settlement Reconciliation Pipeline"
  description: "Reconciles settlement files from Snowflake, detects discrepancies, and creates resolution tickets in ServiceNow."
  tags:
    - settlements
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: settlement-recon
      port: 8080
      tools:
        - name: reconcile-settlements
          description: "Reconcile payment settlements and flag discrepancies."
          inputParameters:
            - name: settlement_date
              in: body
              type: string
              description: "Settlement date YYYY-MM-DD."
          steps:
            - name: run-recon
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "CALL settlements.reconcile('{{settlement_date}}')"
            - name: create-ticket
              type: call
              call: "servicenow-api.create-incident"
              with:
                short_description: "Settlement recon: {{settlement_date}}"
                description: "Breaks: {{run-recon.break_count}}. Total amount: {{run-recon.break_amount}}."
            - name: notify-ops
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "settlement-ops"
                channel_id: "reconciliation"
                message: "Settlement recon for {{settlement_date}}: {{run-recon.break_count}} breaks totaling {{run-recon.break_amount}}."
  consumes:
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow-api
      baseUri: "https://mastercard.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-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Scans VMware VMs for compliance, logs findings in Snowflake, and creates remediation tasks in Jira.

naftiko: "0.5"
info:
  label: "VMware VM Compliance Scan Pipeline"
  description: "Scans VMware VMs for compliance, logs findings in Snowflake, and creates remediation tasks in Jira."
  tags:
    - infrastructure
    - vmware
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: vm-compliance
      port: 8080
      tools:
        - name: scan-vm-compliance
          description: "Scan VMware VMs for security and compliance issues."
          inputParameters:
            - name: datacenter
              in: body
              type: string
              description: "VMware datacenter name."
          steps:
            - name: scan-vms
              type: call
              call: "vmware-api.get-compliance"
              with:
                datacenter: "{{datacenter}}"
            - name: log-findings
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO compliance.vm_scans (datacenter, non_compliant) VALUES ('{{datacenter}}', {{scan-vms.non_compliant_count}})"
            - name: create-tasks
              type: call
              call: "jira-api.create-issue"
              with:
                project: "INFRA"
                summary: "VM compliance: {{datacenter}}"
                description: "Non-compliant VMs: {{scan-vms.non_compliant_count}}."
  consumes:
    - type: http
      namespace: vmware-api
      baseUri: "https://vcenter.mastercard.com/api"
      authentication:
        type: bearer
        token: "$secrets.vmware_token"
      resources:
        - name: compliance
          path: "/vcenter/vm"
          operations:
            - name: get-compliance
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Extracts diversity metrics from Workday, stores in Snowflake, and generates executive reports in Power BI.

naftiko: "0.5"
info:
  label: "Workday Diversity Metrics Reporting Pipeline"
  description: "Extracts diversity metrics from Workday, stores in Snowflake, and generates executive reports in Power BI."
  tags:
    - hr
    - workday
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: diversity-reporting
      port: 8080
      tools:
        - name: generate-diversity-report
          description: "Generate diversity and inclusion metrics report."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Reporting quarter."
          steps:
            - name: get-metrics
              type: call
              call: "workday-api.get-diversity-data"
              with:
                quarter: "{{quarter}}"
            - name: store-data
              type: call
              call: "snowflake-api.run-query"
              with:
                query: "INSERT INTO hr.diversity_metrics (quarter, total, diverse_pct) VALUES ('{{quarter}}', {{get-metrics.total}}, {{get-metrics.diverse_pct}})"
            - name: refresh-dashboard
              type: call
              call: "powerbi-api.refresh-dataset"
              with:
                dataset_id: "diversity-metrics"
  consumes:
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: diversity
          path: "/mastercard/analytics/diversity"
          operations:
            - name: get-diversity-data
              method: GET
    - type: http
      namespace: snowflake-api
      baseUri: "https://mastercard.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi-api
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Retrieves employee certification and compliance training records from Workday for regulatory audit support.

naftiko: "0.5"
info:
  label: "Workday Employee Certification Lookup"
  description: "Retrieves employee certification and compliance training records from Workday for regulatory audit support."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday-certs
      port: 8080
      tools:
        - name: get-certifications
          description: "Look up an employee's certifications and training records."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          call: "workday-api.get-certifications"
          with:
            worker_id: "{{worker_id}}"
  consumes:
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/mastercard/workers/{{worker_id}}/certifications"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-certifications
              method: GET

Creates new hire records in Workday, provisions Okta access, and assigns Pluralsight training courses.

naftiko: "0.5"
info:
  label: "Workday Employee Onboarding Pipeline"
  description: "Creates new hire records in Workday, provisions Okta access, and assigns Pluralsight training courses."
  tags:
    - hr
    - workday
    - okta
    - pluralsight
capability:
  exposes:
    - type: mcp
      namespace: employee-onboarding
      port: 8080
      tools:
        - name: onboard-new-hire
          description: "Orchestrate the new hire onboarding process."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          steps:
            - name: get-employee
              type: call
              call: "workday-api.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: provision-access
              type: call
              call: "okta-api.create-user"
              with:
                email: "{{get-employee.work_email}}"
                firstName: "{{get-employee.first_name}}"
                lastName: "{{get-employee.last_name}}"
            - name: assign-training
              type: call
              call: "pluralsight-api.assign-course"
              with:
                email: "{{get-employee.work_email}}"
                course: "mastercard-security-fundamentals"
  consumes:
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-api
      baseUri: "https://mastercard.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: pluralsight-api
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: assignments
          path: "/assignments"
          operations:
            - name: assign-course
              method: POST

Retrieves current headcount by business unit and grade from Workday for use in workforce planning, finance forecasting, and executive reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount and Payroll Snapshot"
  description: "Retrieves current headcount by business unit and grade from Workday for use in workforce planning, finance forecasting, and executive reporting."
  tags:
    - hr
    - finance
    - workday
    - headcount
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: workforce-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns a current headcount breakdown by Mastercard business unit, grade band, and location from Workday. Use for quarterly workforce planning, executive dashboards, and compensation benchmarking."
          call: "workday-hc.headcount-export"
          description: "Exports current headcount from Workday by business unit, grade, and location. Returns totals and breakdown for use in finance and HR reporting."
          outputParameters:
            - name: total_headcount
              type: number
              mapping: "$.total"
            - name: by_business_unit
              type: array
              mapping: "$.business_units"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/mastercard/workers/export"
          operations:
            - name: headcount-export
              method: GET

Launches performance review cycles in Workday, sends reminders via Microsoft Teams, and tracks completion in Jira.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Orchestrator"
  description: "Launches performance review cycles in Workday, sends reminders via Microsoft Teams, and tracks completion in Jira."
  tags:
    - hr
    - workday
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: perf-review
      port: 8080
      tools:
        - name: launch-review-cycle
          description: "Launch and track a performance review cycle."
          inputParameters:
            - name: cycle_name
              in: body
              type: string
              description: "Review cycle name."
            - name: department
              in: body
              type: string
              description: "Department to review."
          steps:
            - name: launch-cycle
              type: call
              call: "workday-api.create-review-cycle"
              with:
                name: "{{cycle_name}}"
                department: "{{department}}"
            - name: send-reminders
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "hr-team"
                channel_id: "performance"
                message: "Performance review cycle launched: {{cycle_name}} for {{department}}. Eligible: {{launch-cycle.eligible_count}}."
            - name: track-progress
              type: call
              call: "jira-api.create-issue"
              with:
                project: "HR"
                summary: "Performance review: {{department}} - {{cycle_name}}"
                description: "Eligible: {{launch-cycle.eligible_count}}. Deadline: {{launch-cycle.deadline}}."
  consumes:
    - type: http
      namespace: workday-api
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reviews
          path: "/mastercard/performance/reviews"
          operations:
            - name: create-review-cycle
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: jira-api
      baseUri: "https://mastercard.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_password"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Creates a new job requisition in Workday, assigns it to a recruiter, and notifies the hiring manager via Teams with details and a Workday link.

naftiko: "0.5"
info:
  label: "Workday Recruitment Requisition Opener"
  description: "Creates a new job requisition in Workday, assigns it to a recruiter, and notifies the hiring manager via Teams with details and a Workday link."
  tags:
    - hr
    - recruiting
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-ops
      port: 8080
      tools:
        - name: open-job-requisition
          description: "Given a job title, business unit, grade level, and hiring manager UPN, create a new job requisition in Workday and notify the hiring manager via Teams. Use when a new headcount is approved or a backfill is needed across Mastercard technology and business units."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "Title of the role to be hired."
            - name: business_unit
              in: body
              type: string
              description: "Mastercard business unit the role belongs to."
            - name: grade_level
              in: body
              type: string
              description: "Compensation grade level for the role."
            - name: hiring_manager_upn
              in: body
              type: string
              description: "UPN of the hiring manager sponsoring the requisition."
          steps:
            - name: create-req
              type: call
              call: "workday-talent.create-requisition"
              with:
                job_title: "{{job_title}}"
                business_unit: "{{business_unit}}"
                grade_level: "{{grade_level}}"
                hiring_manager: "{{hiring_manager_upn}}"
            - name: notify-hiring-manager
              type: call
              call: "msteams-talent.send-message"
              with:
                recipient_upn: "{{hiring_manager_upn}}"
                text: "Job requisition opened in Workday: {{job_title}} ({{business_unit}}, {{grade_level}}). Req ID: {{create-req.requisition_id}}. Talent acquisition will reach out shortly."
  consumes:
    - type: http
      namespace: workday-talent
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/mastercard/jobRequisitions"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: msteams-talent
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

When an employee submits a time-off request in Workday, notifies their manager via Teams with request details and a direct Workday approval link.

naftiko: "0.5"
info:
  label: "Workday Time-Off Request Approval Notifier"
  description: "When an employee submits a time-off request in Workday, notifies their manager via Teams with request details and a direct Workday approval link."
  tags:
    - hr
    - workday
    - time-off
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: pto-approvals
      port: 8080
      tools:
        - name: notify-pto-approver
          description: "Given a Workday employee ID, leave type, start date, and end date, submit a leave request in Workday and notify the manager via Teams for approval. Use when an employee requests vacation, personal, or sick leave."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID of the employee requesting leave."
            - name: leave_type
              in: body
              type: string
              description: "Leave type: VACATION, SICK, or PERSONAL."
            - name: start_date
              in: body
              type: string
              description: "First day of the leave period in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Last day of the leave period in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: "workday-pto.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: create-leave
              type: call
              call: "workday-pto.create-leave-request"
              with:
                worker_id: "{{workday_employee_id}}"
                leave_type: "{{leave_type}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: notify-manager
              type: call
              call: "msteams-pto.send-message"
              with:
                recipient_upn: "{{get-worker.manager_email}}"
                text: "Leave approval required: {{get-worker.full_name}} has requested {{leave_type}} from {{start_date}} to {{end_date}}. Request: {{create-leave.request_id}}. Approve in Workday."
  consumes:
    - type: http
      namespace: workday-pto
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/mastercard/workers/{worker_id}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: leave-requests
          path: "/mastercard/workers/{worker_id}/leaveRequests"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: create-leave-request
              method: POST
    - type: http
      namespace: msteams-pto
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Detects overdue Zendesk tickets, escalates to Salesforce account owners, and posts alerts to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Zendesk Merchant Support Escalation Pipeline"
  description: "Detects overdue Zendesk tickets, escalates to Salesforce account owners, and posts alerts to Microsoft Teams."
  tags:
    - support
    - zendesk
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: support-escalation
      port: 8080
      tools:
        - name: escalate-support-tickets
          description: "Escalate overdue merchant support tickets."
          inputParameters:
            - name: sla_hours
              in: body
              type: string
              description: "SLA threshold in hours."
          steps:
            - name: get-overdue
              type: call
              call: "zendesk-api.search-tickets"
              with:
                query: "status:open created<{{sla_hours}}hours"
            - name: notify-owner
              type: call
              call: "salesforce-api.create-task"
              with:
                subject: "Escalation: {{get-overdue.count}} overdue tickets"
            - name: post-alert
              type: call
              call: "msteams-api.post-message"
              with:
                team_id: "merchant-support"
                channel_id: "escalations"
                message: "{{get-overdue.count}} tickets exceeded {{sla_hours}}h SLA."
  consumes:
    - type: http
      namespace: zendesk-api
      baseUri: "https://mastercard.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: search
          path: "/search.json"
          operations:
            - name: search-tickets
              method: GET
    - type: http
      namespace: salesforce-api
      baseUri: "https://mastercard.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST