Regeneron Capabilities

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

Sort
Expand

Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams.

naftiko: "0.5"
info:
  label: "Antibody Discovery Experiment Tracker"
  description: "Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams."
  tags:
    - research
    - discovery
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: antibody-ops
      port: 8080
      tools:
        - name: antibody-discovery-experiment-tracker
          description: "Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Antibody Discovery Experiment Tracker follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Antibody Discovery Experiment Tracker completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams.

naftiko: "0.5"
info:
  label: "Azure Cost Optimization Recommendation"
  description: "Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams."
  tags:
    - finops
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: azure-ops
      port: 8080
      tools:
        - name: azure-cost-optimization-recommendation
          description: "Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Azure Cost Optimization Recommendation action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Azure Cost Optimization Recommendation completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves month-to-date cost for an Azure resource group.

naftiko: "0.5"
info:
  label: "Azure Resource Cost Lookup"
  description: "Retrieves month-to-date cost for an Azure resource group."
  tags:
    - finops
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: finops-cloud
      port: 8080
      tools:
        - name: get-resource-cost
          description: "Look up Azure resource group cost."
          inputParameters:
            - name: resource_group
              in: body
              type: string
              description: "The resource group."
          call: "azure-cost.get-cost"
          with:
            resource_group: "{{resource_group}}"
          outputParameters:
            - name: total_cost
              type: string
              mapping: "$.properties.rows[0][0]"
  consumes:
    - type: http
      namespace: azure-cost
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: cost-query
          path: "/subscriptions/$secrets.azure_sub/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: resource_group
              in: path
          operations:
            - name: get-cost
              method: POST

Publishes pipeline results by querying Snowflake and notifying genomics team via Teams.

naftiko: "0.5"
info:
  label: "Bioinformatics Pipeline Results Publisher"
  description: "Publishes pipeline results by querying Snowflake and notifying genomics team via Teams."
  tags:
    - research
    - genomics
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bioinformatics-ops
      port: 8080
      tools:
        - name: bioinformatics-pipeline-results-publisher
          description: "Publishes pipeline results by querying Snowflake and notifying genomics team via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Bioinformatics Pipeline Results Publisher completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams.

naftiko: "0.5"
info:
  label: "Clinical Data Reconciliation Workflow"
  description: "Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams."
  tags:
    - clinical
    - data-management
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: clinical-data-reconciliation-workflow
          description: "Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Clinical Data Reconciliation Workflow completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams.

naftiko: "0.5"
info:
  label: "Clinical IRB Submission Tracker"
  description: "Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams."
  tags:
    - clinical
    - regulatory
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: clinical-irb-submission-tracker
          description: "Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Clinical IRB Submission Tracker completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams.

naftiko: "0.5"
info:
  label: "Clinical Monitoring Report Generation"
  description: "Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams."
  tags:
    - clinical
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: clinical-monitoring-report-generation
          description: "Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Clinical Monitoring Report Generation completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Schedules visits by pulling Snowflake site status and notifying monitors via Teams.

naftiko: "0.5"
info:
  label: "Clinical Site Monitoring Visit Scheduler"
  description: "Schedules visits by pulling Snowflake site status and notifying monitors via Teams."
  tags:
    - clinical
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: clinical-site-monitoring-visit-scheduler
          description: "Schedules visits by pulling Snowflake site status and notifying monitors via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Clinical Site Monitoring Visit Scheduler completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new clinical trial site is approved in Salesforce, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the clinical operations team in Teams.

naftiko: "0.5"
info:
  label: "Clinical Trial Investigator Site Onboarding"
  description: "When a new clinical trial site is approved in Salesforce, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the clinical operations team in Teams."
  tags:
    - clinical-trials
    - salesforce
    - servicenow
    - microsoft-teams
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: clinical-site-onboarding
      port: 8080
      tools:
        - name: onboard-clinical-site
          description: "Given a Salesforce clinical site account ID, create a ServiceNow onboarding project for the investigator site and notify the clinical operations team in Teams."
          inputParameters:
            - name: site_account_id
              in: body
              type: string
              description: "The Salesforce account ID for the clinical trial investigator site."
          steps:
            - name: get-site
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{site_account_id}}"
            - name: create-onboarding-project
              type: call
              call: "servicenow.create-project"
              with:
                name: "Site Onboarding: {{get-site.name}}"
                description: "Investigator site onboarding for {{get-site.name}} in trial {{get-site.trial_id}}"
            - name: notify-clinical-ops
              type: call
              call: "msteams.post-site-notice"
              with:
                channel_id: "clinical-operations"
                message: "Clinical site {{get-site.name}} onboarding initiated. ServiceNow: {{create-onboarding-project.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://regeneron.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
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: projects
          path: "/table/pm_project"
          operations:
            - name: create-project
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-site-notice
              method: POST

Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams.

naftiko: "0.5"
info:
  label: "Clinical Trial Protocol Amendment Workflow"
  description: "Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams."
  tags:
    - clinical
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clinical-ops
      port: 8080
      tools:
        - name: clinical-trial-protocol-amendment-workflow
          description: "Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Clinical Trial Protocol Amendment Workflow action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Clinical Trial Protocol Amendment Workflow completed successfully."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{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 drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets.

naftiko: "0.5"
info:
  label: "Cloud Infrastructure Drift Detector"
  description: "Detects drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets."
  tags:
    - infrastructure
    - datadog
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cloud-ops
      port: 8080
      tools:
        - name: cloud-infrastructure-drift-detector
          description: "Detects drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: check-monitors
              type: call
              call: "datadog.get-monitors"
              with:
                tags: "service:{{service_name}}"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Cloud Infrastructure Drift Detector action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor"

          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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

Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams.

naftiko: "0.5"
info:
  label: "Compliance Training Overdue Escalation"
  description: "Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams."
  tags:
    - compliance
    - hr
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-ops
      port: 8080
      tools:
        - name: compliance-training-overdue-escalation
          description: "Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Compliance Training Overdue Escalation action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Compliance Training Overdue Escalation completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves Confluence page content by ID.

naftiko: "0.5"
info:
  label: "Confluence Page Lookup"
  description: "Retrieves Confluence page content by ID."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: km-docs
      port: 8080
      tools:
        - name: get-confluence-page
          description: "Look up Confluence page."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The page ID."
          call: "confluence.get-page"
          with:
            page_id: "{{page_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.title"
            - name: body
              type: string
              mapping: "$.body.storage.value"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://regeneron.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams.

naftiko: "0.5"
info:
  label: "Cross-Functional Project Status Aggregator"
  description: "Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams."
  tags:
    - project-management
    - jira
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cross-ops
      port: 8080
      tools:
        - name: cross-functional-project-status-aggregator
          description: "Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Cross-Functional Project Status Aggregator follow-up"
                issue_type: "Task"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Cross-Functional Project Status Aggregator completed successfully."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://regeneron.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: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{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 DSARs by searching Snowflake and logging completion in ServiceNow.

naftiko: "0.5"
info:
  label: "Data Privacy Subject Access Request"
  description: "Processes DSARs by searching Snowflake and logging completion in ServiceNow."
  tags:
    - compliance
    - privacy
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: data-privacy-subject-access-request
          description: "Processes DSARs by searching Snowflake and logging completion in ServiceNow."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Data Privacy Subject Access Request action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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 critical Datadog monitor fires for a Regeneron production or research system, automatically creates a ServiceNow incident with full alert context.

naftiko: "0.5"
info:
  label: "Datadog Alert to ServiceNow Incident Bridge"
  description: "When a critical Datadog monitor fires for a Regeneron production or research system, automatically creates a ServiceNow incident with full alert context."
  tags:
    - observability
    - monitoring
    - datadog
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: alert-incident-bridge
      port: 8080
      tools:
        - name: bridge-alert-to-incident
          description: "Given a Datadog monitor ID and alert severity, create a ServiceNow incident pre-populated with monitor name, query, and severity for production and research systems."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered the alert."
            - name: alert_severity
              in: body
              type: string
              description: "Severity of the alert: critical, warning, or no_data."
          steps:
            - name: get-monitor
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-from-alert"
              with:
                short_description: "Datadog alert: {{get-monitor.name}}"
                description: "Monitor: {{get-monitor.name}}\nSeverity: {{alert_severity}}\nQuery: {{get-monitor.query}}"
                urgency: "2"
  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/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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-from-alert
              method: POST

Retrieves current error rate for a service from Datadog APM.

naftiko: "0.5"
info:
  label: "Datadog APM Error Rate Check"
  description: "Retrieves current error rate for a service from Datadog APM."
  tags:
    - observability
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: observability-apm
      port: 8080
      tools:
        - name: check-error-rate
          description: "Check APM error rate."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The service name."
          call: "datadog.get-apm-metrics"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: error_rate
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: query
          path: "/query"

          operations:
            - name: get-apm-metrics
              method: GET

Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams.

naftiko: "0.5"
info:
  label: "Datadog Performance Degradation Response"
  description: "Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams."
  tags:
    - observability
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: datadog-ops
      port: 8080
      tools:
        - name: datadog-performance-degradation-response
          description: "Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: check-monitors
              type: call
              call: "datadog.get-monitors"
              with:
                tags: "service:{{service_name}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Datadog Performance Degradation Response action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Datadog Performance Degradation Response completed successfully."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor"

          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{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 Datadog SLOs for Regeneron's computational biology and genomics research platforms, opening a ServiceNow incident when health thresholds are breached.

naftiko: "0.5"
info:
  label: "Datadog Research Platform Service Health Monitor"
  description: "Monitors Datadog SLOs for Regeneron's computational biology and genomics research platforms, opening a ServiceNow incident when health thresholds are breached."
  tags:
    - observability
    - monitoring
    - datadog
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: research-platform-monitoring
      port: 8080
      tools:
        - name: check-research-platform-health
          description: "Given a Datadog service name and SLO ID for a research computing platform, check SLO compliance and create a ServiceNow P1 incident if the error budget is exhausted."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name for the research platform."
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID to evaluate."
          steps:
            - name: get-slo
              type: call
              call: "datadog.get-slo"
              with:
                slo_id: "{{slo_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-p1-incident"
              with:
                short_description: "SLO breach: {{service_name}}"
                description: "SLO {{slo_id}} compliance: {{get-slo.compliance}}. Error budget: {{get-slo.error_budget_remaining}}."
                urgency: "1"
  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: slos
          path: "/slo/{{slo_id}}"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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-p1-incident
              method: POST

Checks the health status of a monitored service in Datadog.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Checks the health status of a monitored service in Datadog."
  tags:
    - observability
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: observability-health
      port: 8080
      tools:
        - name: check-service-health
          description: "Check Datadog service health."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The service name."
          call: "datadog.get-monitor-status"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_state"
            - name: last_check
              type: string
              mapping: "$.overall_state_modified"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor"

          operations:
            - name: get-monitor-status
              method: GET

Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams.

naftiko: "0.5"
info:
  label: "Drug Substance Stability Monitoring"
  description: "Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams."
  tags:
    - quality
    - manufacturing
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: drug-ops
      port: 8080
      tools:
        - name: drug-substance-stability-monitoring
          description: "Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Drug Substance Stability Monitoring completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When an employee departure is confirmed in Workday, revokes Microsoft 365 access, suspends the Okta account, closes open ServiceNow tickets, and logs the action.

naftiko: "0.5"
info:
  label: "Employee Offboarding and Access Revocation"
  description: "When an employee departure is confirmed in Workday, revokes Microsoft 365 access, suspends the Okta account, closes open ServiceNow tickets, and logs the action."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-graph
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, revoke Microsoft 365 access, suspend Okta account, and create a ServiceNow offboarding record."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "Employee termination date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: disable-m365
              type: call
              call: "msgraph.disable-user"
              with:
                user_id: "{{get-employee.azure_object_id}}"
            - name: suspend-okta
              type: call
              call: "okta.suspend-user"
              with:
                user_id: "{{get-employee.okta_user_id}}"
            - name: create-offboarding-record
              type: call
              call: "servicenow.create-offboarding"
              with:
                short_description: "Employee offboarding: {{get-employee.full_name}}"
                category: "hr_offboarding"
                description: "Termination: {{termination_date}}. All access revoked."
  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: "/regeneron/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph
      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://regeneron.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-lifecycle
          path: "/users/{{user_id}}/lifecycle/suspend"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: suspend-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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-offboarding
              method: POST

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

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account via Graph, and sends a Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full new-hire onboarding sequence across ServiceNow, Microsoft Graph, and Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "Employee start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: provision-account
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-employee.full_name}}"
                mail: "{{get-employee.work_email}}"
                department: "{{get-employee.department}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{get-employee.work_email}}"
                message: "Welcome to Regeneron, {{get-employee.first_name}}! Your IT ticket is {{create-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: "/regeneron/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-message
              method: POST

Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams.

naftiko: "0.5"
info:
  label: "Employee Performance Review Kickoff"
  description: "Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams."
  tags:
    - hr
    - performance
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: employee-ops
      port: 8080
      tools:
        - name: employee-performance-review-kickoff
          description: "Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Employee Performance Review Kickoff follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Employee Performance Review Kickoff completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Syncs metadata by extracting from Snowflake and notifying data stewards via Teams.

naftiko: "0.5"
info:
  label: "Enterprise Data Catalog Metadata Sync"
  description: "Syncs metadata by extracting from Snowflake and notifying data stewards via Teams."
  tags:
    - data-governance
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: enterprise-ops
      port: 8080
      tools:
        - name: enterprise-data-catalog-metadata-sync
          description: "Syncs metadata by extracting from Snowflake and notifying data stewards via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Enterprise Data Catalog Metadata Sync completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams.

naftiko: "0.5"
info:
  label: "Financial Close Checklist Orchestrator"
  description: "Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams."
  tags:
    - finance
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: financial-ops
      port: 8080
      tools:
        - name: financial-close-checklist-orchestrator
          description: "Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Financial Close Checklist Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams.

naftiko: "0.5"
info:
  label: "Genomics Data Pipeline Failure Handler"
  description: "Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams."
  tags:
    - data-engineering
    - genomics
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: genomics-ops
      port: 8080
      tools:
        - name: genomics-data-pipeline-failure-handler
          description: "Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Genomics Data Pipeline Failure Handler follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Genomics Data Pipeline Failure Handler completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks latest GitHub Actions workflow run status.

naftiko: "0.5"
info:
  label: "GitHub Actions Workflow Status"
  description: "Checks latest GitHub Actions workflow run status."
  tags:
    - devops
    - github-actions
capability:
  exposes:
    - type: mcp
      namespace: devops-ci
      port: 8080
      tools:
        - name: check-workflow-status
          description: "Check workflow status."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "Repo (org/repo)."
            - name: workflow_name
              in: body
              type: string
              description: "Workflow file."
          call: "github.get-workflow-runs"
          with:
            repo: "{{repo_name}}"
            workflow: "{{workflow_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.workflow_runs[0].status"
            - name: conclusion
              type: string
              mapping: "$.workflow_runs[0].conclusion"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo_name}}/actions/runs"
          inputParameters:
            - name: repo_name
              in: path
          operations:
            - name: get-workflow-runs
              method: GET

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, records a Datadog deployment event, and alerts the engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub CI/CD Pipeline Failure Handler"
  description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, records a Datadog deployment event, and alerts the engineering team in Microsoft Teams."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions pipeline failure event, create a Jira bug with full context, record a Datadog deployment failure event, and alert the engineering Teams channel."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository name in owner/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch name where the pipeline failed."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions run ID for the failed pipeline."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA that triggered the pipeline."
          steps:
            - name: get-run
              type: call
              call: "github.get-workflow-run"
              with:
                repository: "{{repository}}"
                run_id: "{{run_id}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}}"
                description: "Run: {{run_id}}\nCommit: {{commit_sha}}\nURL: {{get-run.html_url}}"
            - name: record-event
              type: call
              call: "datadog.create-event"
              with:
                title: "CI failure: {{repository}} {{branch}}"
                text: "Commit {{commit_sha}} pipeline failure. Jira: {{create-bug.key}}"
                alert_type: "error"
            - name: alert-team
              type: call
              call: "msteams.post-alert"
              with:
                channel_id: "engineering-alerts"
                message: "CI Failure in {{repository}} on {{branch}}. Jira: {{create-bug.key}}. Run: {{get-run.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repository}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repository
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.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
      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
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-alert
              method: POST

Checks that all merged pull requests on protected branches meet minimum approval counts and flags violations in Jira for the R&D engineering team.

naftiko: "0.5"
info:
  label: "GitHub Code Review Compliance Check"
  description: "Checks that all merged pull requests on protected branches meet minimum approval counts and flags violations in Jira for the R&D engineering team."
  tags:
    - devops
    - engineering
    - github
    - jira
    - compliance
    - code-review
capability:
  exposes:
    - type: mcp
      namespace: code-governance
      port: 8080
      tools:
        - name: check-pr-review-compliance
          description: "Given a GitHub repository and minimum approval count, scan recently merged PRs for insufficient reviews and create Jira compliance tickets for violations."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: min_approvals
              in: body
              type: integer
              description: "Minimum number of required review approvals per PR."
          steps:
            - name: get-merged-prs
              type: call
              call: "github.list-merged-prs"
              with:
                repository: "{{repository}}"
            - name: create-violation-ticket
              type: call
              call: "jira.create-compliance-ticket"
              with:
                project_key: "SEC"
                issuetype: "Task"
                summary: "PR review compliance violations in {{repository}}"
                description: "{{get-merged-prs.violation_count}} PRs merged with fewer than {{min_approvals}} approvals."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pull-requests
          path: "/repos/{{repository}}/pulls"
          inputParameters:
            - name: repository
              in: path
          operations:
            - name: list-merged-prs
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.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-compliance-ticket
              method: POST

Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams.

naftiko: "0.5"
info:
  label: "GitHub Dependency Vulnerability Scanner"
  description: "Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: github-ops
      port: 8080
      tools:
        - name: github-dependency-vulnerability-scanner
          description: "Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-repo-info
              type: call
              call: "github.get-repo"
              with:
                repo: "{{repo_name}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "GitHub Dependency Vulnerability Scanner follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "GitHub Dependency Vulnerability Scanner completed successfully."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{repo}}"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves metadata for a GitHub repository.

naftiko: "0.5"
info:
  label: "GitHub Repository Status Check"
  description: "Retrieves metadata for a GitHub repository."
  tags:
    - devops
    - github
capability:
  exposes:
    - type: mcp
      namespace: devops-repo
      port: 8080
      tools:
        - name: get-repo-status
          description: "Look up GitHub repository metadata."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repo (org/repo)."
          call: "github.get-repo"
          with:
            repo: "{{repo_name}}"
          outputParameters:
            - name: default_branch
              type: string
              mapping: "$.default_branch"
            - name: visibility
              type: string
              mapping: "$.visibility"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{repo_name}}"
          inputParameters:
            - name: repo_name
              in: path
          operations:
            - name: get-repo
              method: GET

Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams.

naftiko: "0.5"
info:
  label: "GitHub Security Alert Triage Workflow"
  description: "Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: github-ops
      port: 8080
      tools:
        - name: github-security-alert-triage-workflow
          description: "Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-repo-info
              type: call
              call: "github.get-repo"
              with:
                repo: "{{repo_name}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "GitHub Security Alert Triage Workflow follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "GitHub Security Alert Triage Workflow completed successfully."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{repo}}"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a GitHub Dependabot alert is raised, creates a Jira security ticket and notifies the information security team in Teams with severity and remediation guidance.

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Triage"
  description: "When a GitHub Dependabot alert is raised, creates a Jira security ticket and notifies the information security team in Teams with severity and remediation guidance."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: triage-vulnerability-alert
          description: "Given a GitHub Dependabot alert number and repository, create a Jira security ticket with CVE details and notify the information security team in Teams."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: alert_number
              in: body
              type: integer
              description: "The Dependabot alert number."
          steps:
            - name: get-alert
              type: call
              call: "github.get-dependabot-alert"
              with:
                repository: "{{repository}}"
                alert_number: "{{alert_number}}"
            - name: create-ticket
              type: call
              call: "jira.create-security-issue"
              with:
                project_key: "SEC"
                issuetype: "Security"
                summary: "[Vuln] {{get-alert.dependency_name}} in {{repository}}"
                description: "CVE: {{get-alert.cve_id}}\nSeverity: {{get-alert.severity}}\nPackage: {{get-alert.dependency_name}}"
            - name: notify-infosec
              type: call
              call: "msteams.post-security-notice"
              with:
                channel_id: "information-security"
                message: "Vulnerability {{get-alert.cve_id}} ({{get-alert.severity}}) in {{repository}}. Jira: {{create-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/{{repository}}/dependabot/alerts/{{alert_number}}"
          inputParameters:
            - name: repository
              in: path
            - name: alert_number
              in: path
          operations:
            - name: get-dependabot-alert
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.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-security-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-security-notice
              method: POST

Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams.

naftiko: "0.5"
info:
  label: "GxP Validated System Deployment Tracker"
  description: "Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams."
  tags:
    - quality
    - compliance
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: gxp-ops
      port: 8080
      tools:
        - name: gxp-validated-system-deployment-tracker
          description: "Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "GxP Validated System Deployment Tracker action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "GxP Validated System Deployment Tracker completed successfully."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves a HubSpot contact by email.

naftiko: "0.5"
info:
  label: "HubSpot Contact Lookup"
  description: "Retrieves a HubSpot contact by email."
  tags:
    - marketing
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: marketing-crm
      port: 8080
      tools:
        - name: get-contact
          description: "Look up HubSpot contact."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The contact email."
          call: "hubspot.search-contact"
          with:
            email: "{{email}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.results[0].properties.firstname"
            - name: company
              type: string
              mapping: "$.results[0].properties.company"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/search"

          operations:
            - name: search-contact
              method: POST

Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams.

naftiko: "0.5"
info:
  label: "IT Asset Lifecycle Retirement Workflow"
  description: "Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams."
  tags:
    - it-asset-management
    - servicenow
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: it-asset-lifecycle-retirement-workflow
          description: "Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IT Asset Lifecycle Retirement Workflow action required"
                category: "automated"
                assigned_group: "Operations"
            - name: check-identity
              type: call
              call: "okta.get-users"
              with:
                filter: "status eq ACTIVE"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "IT Asset Lifecycle Retirement Workflow completed successfully."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"

          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams.

naftiko: "0.5"
info:
  label: "IT Change Risk Assessment Orchestrator"
  description: "Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams."
  tags:
    - it-service-management
    - servicenow
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: it-change-risk-assessment-orchestrator
          description: "Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IT Change Risk Assessment Orchestrator action required"
                category: "automated"
                assigned_group: "Operations"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "IT Change Risk Assessment Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams.

naftiko: "0.5"
info:
  label: "IT Onboarding Access Provisioning Orchestrator"
  description: "Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams."
  tags:
    - hr
    - onboarding
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: it-onboarding-access-provisioning-orchestrator
          description: "Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: check-identity
              type: call
              call: "okta.get-users"
              with:
                filter: "status eq ACTIVE"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IT Onboarding Access Provisioning Orchestrator action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "IT Onboarding Access Provisioning Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"

          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams.

naftiko: "0.5"
info:
  label: "IT Service Request Fulfillment Orchestrator"
  description: "Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams."
  tags:
    - it-service-management
    - servicenow
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: it-service-request-fulfillment-orchestrator
          description: "Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IT Service Request Fulfillment Orchestrator action required"
                category: "automated"
                assigned_group: "Operations"
            - name: check-identity
              type: call
              call: "okta.get-users"
              with:
                filter: "status eq ACTIVE"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "IT Service Request Fulfillment Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"

          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates release notes by pulling Jira tickets and posting to engineering Teams channel.

naftiko: "0.5"
info:
  label: "Jira Release Notes Generator"
  description: "Generates release notes by pulling Jira tickets and posting to engineering Teams channel."
  tags:
    - devops
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: jira-ops
      port: 8080
      tools:
        - name: jira-release-notes-generator
          description: "Generates release notes by pulling Jira tickets and posting to engineering Teams channel."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Jira Release Notes Generator follow-up"
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Jira Release Notes Generator completed successfully."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"

          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves the current sprint status for a Jira board.

naftiko: "0.5"
info:
  label: "Jira Sprint Status Lookup"
  description: "Retrieves the current sprint status for a Jira board."
  tags:
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pm-sprint
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Look up Jira sprint status."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID."
          call: "jira.get-active-sprint"
          with:
            board_id: "{{board_id}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.values[0].name"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/board/{{board_id}}/sprint"
          inputParameters:
            - name: board_id
              in: path
          operations:
            - name: get-active-sprint
              method: GET

At sprint completion, fetches completed Jira issues, calculates velocity, and posts a summary to the R&D engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report"
  description: "At sprint completion, fetches completed Jira issues, calculates velocity, and posts a summary to the R&D engineering Microsoft Teams channel."
  tags:
    - devops
    - engineering
    - jira
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: engineering-reporting
      port: 8080
      tools:
        - name: publish-sprint-velocity
          description: "Given a Jira project key and sprint ID, retrieve completed issues, compute story point velocity, and post a sprint report to the R&D engineering Teams channel."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., BIOINFO, PLATFORM)."
            - name: sprint_id
              in: body
              type: integer
              description: "The Jira sprint ID to report on."
          steps:
            - name: get-sprint-issues
              type: call
              call: "jira.get-sprint-issues"
              with:
                sprint_id: "{{sprint_id}}"
                project_key: "{{project_key}}"
            - name: post-velocity
              type: call
              call: "msteams.post-sprint-report"
              with:
                channel_id: "rd-engineering"
                message: "Sprint {{sprint_id}} complete for {{project_key}}. Velocity: {{get-sprint-issues.story_points}} pts across {{get-sprint-issues.issue_count}} issues."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://regeneron.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/search"
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-sprint-report
              method: POST

Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake.

naftiko: "0.5"
info:
  label: "Lab Notebook Electronic Signature Workflow"
  description: "Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake."
  tags:
    - research
    - quality
    - sharepoint
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: lab-ops
      port: 8080
      tools:
        - name: lab-notebook-electronic-signature-workflow
          description: "Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST

Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams.

naftiko: "0.5"
info:
  label: "Laboratory Sample Chain of Custody"
  description: "Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams."
  tags:
    - quality
    - laboratory
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: laboratory-ops
      port: 8080
      tools:
        - name: laboratory-sample-chain-of-custody
          description: "Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Laboratory Sample Chain of Custody action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Laboratory Sample Chain of Custody completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Searches LinkedIn for candidates matching scientific and R&D job requisitions, imports matches into Workday Recruiting, and notifies the scientific recruiter in Teams.

naftiko: "0.5"
info:
  label: "LinkedIn Scientific Talent Sourcing"
  description: "Searches LinkedIn for candidates matching scientific and R&D job requisitions, imports matches into Workday Recruiting, and notifies the scientific recruiter in Teams."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: scientific-talent-acquisition
      port: 8080
      tools:
        - name: source-scientific-candidates
          description: "Given a Workday job requisition ID for a scientific or R&D role, search LinkedIn for matching candidates and notify the scientific recruiter in Teams with match count."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
            - name: recruiter_email
              in: body
              type: string
              description: "Email of the scientific recruiter to notify."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-job-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: search-candidates
              type: call
              call: "linkedin.search-people"
              with:
                keywords: "{{get-requisition.title}}"
                location: "{{get-requisition.location}}"
            - name: notify-recruiter
              type: call
              call: "msteams.send-recruiter-notice"
              with:
                recipient: "{{recruiter_email}}"
                message: "Found {{search-candidates.count}} LinkedIn candidates for {{get-requisition.title}} (req {{requisition_id}})."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/regeneron/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: people-search
          path: "/people"
          operations:
            - name: search-people
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-recruiter-notice
              method: POST

Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Environmental Monitoring"
  description: "Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams."
  tags:
    - manufacturing
    - quality
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-ops
      port: 8080
      tools:
        - name: manufacturing-environmental-monitoring
          description: "Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Manufacturing Environmental Monitoring completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams.

naftiko: "0.5"
info:
  label: "Medical Affairs Congress Activity Tracker"
  description: "Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams."
  tags:
    - medical-affairs
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: medical-ops
      port: 8080
      tools:
        - name: medical-affairs-congress-activity-tracker
          description: "Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-sf-data
              type: call
              call: "salesforce.query"
              with:
                q: "SELECT Id, Name FROM Account LIMIT 10"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Medical Affairs Congress Activity Tracker completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: sobjects
          path: "/sobjects/Account"

          operations:
            - name: query
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves user account details from Microsoft Entra ID.

naftiko: "0.5"
info:
  label: "Microsoft Entra User Lookup"
  description: "Retrieves user account details from Microsoft Entra ID."
  tags:
    - identity
    - microsoft-entra
capability:
  exposes:
    - type: mcp
      namespace: identity-mgmt
      port: 8080
      tools:
        - name: get-user-details
          description: "Look up Entra user."
          inputParameters:
            - name: upn
              in: body
              type: string
              description: "The user principal name."
          call: "msgraph.get-user"
          with:
            upn: "{{upn}}"
          outputParameters:
            - name: account_enabled
              type: boolean
              mapping: "$.accountEnabled"
            - name: display_name
              type: string
              mapping: "$.displayName"
  consumes:
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-user
              method: GET

Checks whether a user is assigned to an Okta application.

naftiko: "0.5"
info:
  label: "Okta Application Assignment Check"
  description: "Checks whether a user is assigned to an Okta application."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: identity-app-access
      port: 8080
      tools:
        - name: check-app-assignment
          description: "Check Okta app assignment."
          inputParameters:
            - name: user_id
              in: body
              type: string
              description: "The user ID."
            - name: app_id
              in: body
              type: string
              description: "The app ID."
          call: "okta.get-user-apps"
          with:
            user_id: "{{user_id}}"
            app_id: "{{app_id}}"
          outputParameters:
            - name: assigned
              type: boolean
              mapping: "$.assigned"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: app-users
          path: "/apps/{{app_id}}/users/{{user_id}}"
          inputParameters:
            - name: app_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: get-user-apps
              method: GET

Scans Okta for active users without MFA enrolled in research and commercial systems, and sends a compliance warning to the security Teams channel.

naftiko: "0.5"
info:
  label: "Okta MFA Compliance Enforcement"
  description: "Scans Okta for active users without MFA enrolled in research and commercial systems, and sends a compliance warning to the security Teams channel."
  tags:
    - security
    - identity
    - okta
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: mfa-compliance
      port: 8080
      tools:
        - name: enforce-mfa-compliance
          description: "Query Okta for active users without MFA enrolled, post a count of non-compliant users to the security compliance Teams channel, and return the list for escalation."
          inputParameters:
            - name: grace_days
              in: body
              type: integer
              description: "Number of days before automatic account suspension for non-compliant users."
          steps:
            - name: get-non-mfa-users
              type: call
              call: "okta.list-users-without-mfa"
              with:
                status: "ACTIVE"
            - name: post-compliance-warning
              type: call
              call: "msteams.broadcast-mfa-warning"
              with:
                channel_id: "security-compliance"
                message: "{{get-non-mfa-users.count}} users have not enrolled in MFA. Grace period: {{grace_days}} days before suspension."
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://regeneron.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-without-mfa
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: broadcast-mfa-warning
              method: POST

Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow.

naftiko: "0.5"
info:
  label: "Okta Orphaned Account Cleanup"
  description: "Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow."
  tags:
    - identity
    - security
    - okta
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: okta-ops
      port: 8080
      tools:
        - name: okta-orphaned-account-cleanup
          description: "Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: check-identity
              type: call
              call: "okta.get-users"
              with:
                filter: "status eq ACTIVE"
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Okta Orphaned Account Cleanup action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"

          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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 researcher is added to a Workday research group, provisions corresponding research application access in Okta and logs the action in ServiceNow.

naftiko: "0.5"
info:
  label: "Okta User Access Provisioning for Research Systems"
  description: "When a researcher is added to a Workday research group, provisions corresponding research application access in Okta and logs the action in ServiceNow."
  tags:
    - identity
    - security
    - okta
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: research-access-provisioning
      port: 8080
      tools:
        - name: provision-researcher-access
          description: "Given a Workday employee ID and target research Okta group, assign group membership and log the provisioning event in ServiceNow."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the researcher."
            - name: okta_group_id
              in: body
              type: string
              description: "The Okta group ID for the research application to provision."
          steps:
            - name: get-researcher
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: assign-group
              type: call
              call: "okta.add-user-to-group"
              with:
                user_id: "{{get-researcher.okta_user_id}}"
                group_id: "{{okta_group_id}}"
            - name: log-access
              type: call
              call: "servicenow.create-access-record"
              with:
                short_description: "Research access provisioned: {{get-researcher.full_name}} to {{okta_group_id}}"
                category: "access_management"
  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: "/regeneron/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/users/{{user_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: user_id
              in: path
          operations:
            - name: add-user-to-group
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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-access-record
              method: POST

Checks whether a user has MFA enrolled in Okta.

naftiko: "0.5"
info:
  label: "Okta User MFA Status Lookup"
  description: "Checks whether a user has MFA enrolled in Okta."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: identity-mfa
      port: 8080
      tools:
        - name: get-mfa-status
          description: "Check Okta MFA enrollment."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The user email."
          call: "okta.get-user-factors"
          with:
            email: "{{user_email}}"
          outputParameters:
            - name: factors
              type: array
              mapping: "$.factors"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users/{{user_email}}/factors"
          inputParameters:
            - name: user_email
              in: path
          operations:
            - name: get-user-factors
              method: GET

Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel.

naftiko: "0.5"
info:
  label: "Patent Landscape Analysis Report"
  description: "Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel."
  tags:
    - research
    - legal
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: patent-ops
      port: 8080
      tools:
        - name: patent-landscape-analysis-report
          description: "Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Patent Landscape Analysis Report completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves current headcount by department and cost center from Workday for use in workforce planning and financial reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Retrieves current headcount by department and cost center from Workday for use in workforce planning and financial reporting."
  tags:
    - hr
    - finance
    - payroll
    - workday
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-finance
      port: 8080
      tools:
        - name: get-headcount-by-department
          description: "Returns a list of active employees grouped by department and cost center from Workday. Use for headcount planning, budget allocation, and HR analytics."
          call: "workday.headcount-export"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.data"
  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-export
          path: "/regeneron/workers"
          operations:
            - name: headcount-export
              method: GET

Triggers a Power BI dataset refresh for clinical pipeline dashboards and notifies the clinical development team in Teams when the refresh is complete.

naftiko: "0.5"
info:
  label: "Power BI Clinical Pipeline Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for clinical pipeline dashboards and notifies the clinical development team in Teams when the refresh is complete."
  tags:
    - data
    - analytics
    - power-bi
    - microsoft-teams
    - reporting
    - clinical-trials
capability:
  exposes:
    - type: mcp
      namespace: clinical-analytics
      port: 8080
      tools:
        - name: refresh-clinical-pipeline-dashboard
          description: "Given a Power BI workspace and dataset ID for the clinical pipeline dashboard, trigger a data refresh and notify the clinical development leadership in Teams."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the clinical pipeline dashboard."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.trigger-refresh"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-clinical-leadership
              type: call
              call: "msteams.post-refresh-notice"
              with:
                channel_id: "clinical-development"
                message: "Clinical pipeline Power BI dashboard (dataset {{dataset_id}}) has been refreshed successfully."
  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
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-refresh-notice
              method: POST

Checks last refresh status of a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Check"
  description: "Checks last refresh status of a Power BI dataset."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics-refresh
      port: 8080
      tools:
        - name: check-dataset-refresh
          description: "Check Power BI refresh status."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The dataset ID."
          call: "powerbi.get-refresh-history"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: end_time
              type: string
              mapping: "$.value[0].endTime"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refresh-history
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams.

naftiko: "0.5"
info:
  label: "Power BI Executive Dashboard Orchestrator"
  description: "Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams."
  tags:
    - analytics
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: power-ops
      port: 8080
      tools:
        - name: power-bi-executive-dashboard-orchestrator
          description: "Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "$secrets.dashboard_dataset_id"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Power BI Executive Dashboard Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel.

naftiko: "0.5"
info:
  label: "Preclinical Study Report Assembly"
  description: "Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel."
  tags:
    - research
    - preclinical
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: preclinical-ops
      port: 8080
      tools:
        - name: preclinical-study-report-assembly
          description: "Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Preclinical Study Report Assembly completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams.

naftiko: "0.5"
info:
  label: "Regulatory Health Authority Response"
  description: "Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams."
  tags:
    - regulatory
    - sharepoint
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory-ops
      port: 8080
      tools:
        - name: regulatory-health-authority-response
          description: "Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Regulatory Health Authority Response completed successfully."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams.

naftiko: "0.5"
info:
  label: "Regulatory Inspection Readiness Check"
  description: "Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams."
  tags:
    - quality
    - regulatory
    - sharepoint
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory-ops
      port: 8080
      tools:
        - name: regulatory-inspection-readiness-check
          description: "Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Regulatory Inspection Readiness Check completed successfully."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow.

naftiko: "0.5"
info:
  label: "Research Collaboration Data Sharing Workflow"
  description: "Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow."
  tags:
    - research
    - data-governance
    - sharepoint
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: research-ops
      port: 8080
      tools:
        - name: research-collaboration-data-sharing-workflow
          description: "Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Research Collaboration Data Sharing Workflow action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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

Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams.

naftiko: "0.5"
info:
  label: "Research Reagent Inventory Management"
  description: "Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams."
  tags:
    - research
    - supply-chain
    - snowflake
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: research-ops
      port: 8080
      tools:
        - name: research-reagent-inventory-management
          description: "Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Research Reagent Inventory Management completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves a Salesforce account by ID.

naftiko: "0.5"
info:
  label: "Salesforce Account Lookup"
  description: "Retrieves a Salesforce account by ID."
  tags:
    - commercial
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-account
      port: 8080
      tools:
        - name: get-account
          description: "Look up Salesforce account."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: industry
              type: string
              mapping: "$.Industry"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Processes renewals by pulling Salesforce data and notifying account managers via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Contract Renewal Workflow"
  description: "Processes renewals by pulling Salesforce data and notifying account managers via Teams."
  tags:
    - commercial
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce-ops
      port: 8080
      tools:
        - name: salesforce-contract-renewal-workflow
          description: "Processes renewals by pulling Salesforce data and notifying account managers via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sf-data
              type: call
              call: "salesforce.query"
              with:
                q: "SELECT Id, Name FROM Account LIMIT 10"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Salesforce Contract Renewal Workflow completed successfully."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: sobjects
          path: "/sobjects/Account"

          operations:
            - name: query
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Key Account Health Digest"
  description: "Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel."
  tags:
    - commercial
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce-ops
      port: 8080
      tools:
        - name: salesforce-key-account-health-digest
          description: "Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sf-data
              type: call
              call: "salesforce.query"
              with:
                q: "SELECT Id, Name FROM Account LIMIT 10"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Salesforce Key Account Health Digest completed successfully."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: sobjects
          path: "/sobjects/Account"

          operations:
            - name: query
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates a weekly digest of Salesforce medical affairs accounts showing recent engagement activity, key contact changes, and pipeline status, posted to the medical affairs Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Medical Affairs Account Intelligence Digest"
  description: "Generates a weekly digest of Salesforce medical affairs accounts showing recent engagement activity, key contact changes, and pipeline status, posted to the medical affairs Teams channel."
  tags:
    - crm
    - sales
    - salesforce
    - microsoft-teams
    - reporting
    - medical-affairs
capability:
  exposes:
    - type: mcp
      namespace: medical-affairs-reporting
      port: 8080
      tools:
        - name: digest-account-intelligence
          description: "Fetch Salesforce medical affairs account activity for the past week and post a formatted engagement digest to the medical affairs Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for the medical affairs team."
          steps:
            - name: get-account-activity
              type: call
              call: "salesforce.query-account-activity"
              with:
                account_type: "Medical_Affairs"
            - name: post-digest
              type: call
              call: "msteams.post-account-digest"
              with:
                channel_id: "{{channel_id}}"
                message: "Medical affairs digest: {{get-account-activity.accounts_touched}} accounts engaged, {{get-account-activity.new_contacts}} new contacts this week."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://regeneron.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query"
          operations:
            - name: query-account-activity
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-account-digest
              method: POST

Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Medical Inquiry Routing"
  description: "Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams."
  tags:
    - medical-affairs
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce-ops
      port: 8080
      tools:
        - name: salesforce-medical-inquiry-routing
          description: "Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sf-data
              type: call
              call: "salesforce.query"
              with:
                q: "SELECT Id, Name FROM Account LIMIT 10"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Salesforce Medical Inquiry Routing completed successfully."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: sobjects
          path: "/sobjects/Account"

          operations:
            - name: query
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves current stage of a Salesforce opportunity.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Stage Lookup"
  description: "Retrieves current stage of a Salesforce opportunity."
  tags:
    - commercial
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-opportunity
      port: 8080
      tools:
        - name: get-opportunity-stage
          description: "Look up opportunity stage."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            id: "{{opportunity_id}}"
          outputParameters:
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: close_date
              type: string
              mapping: "$.CloseDate"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://login.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET

Generates a weekly digest of Salesforce physician engagement opportunities and key account activities, posted to the commercial operations Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Physician Engagement Pipeline Digest"
  description: "Generates a weekly digest of Salesforce physician engagement opportunities and key account activities, posted to the commercial operations Teams channel."
  tags:
    - crm
    - sales
    - salesforce
    - microsoft-teams
    - reporting
    - commercial
capability:
  exposes:
    - type: mcp
      namespace: commercial-reporting
      port: 8080
      tools:
        - name: digest-physician-pipeline
          description: "Fetch open Salesforce opportunities with physician key account status and post a weekly pipeline digest to the commercial operations Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for commercial operations."
          steps:
            - name: get-opportunities
              type: call
              call: "salesforce.query-physician-opportunities"
              with:
                account_type: "Physician_KOL"
            - name: post-digest
              type: call
              call: "msteams.post-pipeline-digest"
              with:
                channel_id: "{{channel_id}}"
                message: "Physician pipeline digest: {{get-opportunities.total_value}} across {{get-opportunities.count}} open opportunities."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://regeneron.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/query"
          operations:
            - name: query-physician-opportunities
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-pipeline-digest
              method: POST

Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets.

naftiko: "0.5"
info:
  label: "SAP Financial Journal Entry Validation"
  description: "Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets."
  tags:
    - finance
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: sap-ops
      port: 8080
      tools:
        - name: sap-financial-journal-entry-validation
          description: "Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "SAP Financial Journal Entry Validation action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST

Triggers SAP S/4HANA period-close at month end, exports a journal entry summary, and notifies the finance team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Period-Close Financial Reconciliation"
  description: "Triggers SAP S/4HANA period-close at month end, exports a journal entry summary, and notifies the finance team in Microsoft Teams."
  tags:
    - finance
    - erp
    - sap
    - microsoft-teams
    - period-close
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: run-period-close
          description: "Given a fiscal period and company code, trigger SAP S/4HANA period-close postings and notify the finance team in Teams when complete."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "SAP company code (e.g., 1000 for Regeneron US)."
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period in YYYYMM format."
          steps:
            - name: trigger-close
              type: call
              call: "sap.trigger-period-close"
              with:
                company_code: "{{company_code}}"
                fiscal_period: "{{fiscal_period}}"
            - name: notify-finance
              type: call
              call: "msteams.post-close-notification"
              with:
                channel_id: "finance-team"
                message: "Period close for {{fiscal_period}} (company {{company_code}}) initiated. SAP job ID: {{trigger-close.job_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: period-close
          path: "/A_CompanyCode('{{company_code}}')/to_PeriodClose"
          inputParameters:
            - name: company_code
              in: path
          operations:
            - name: trigger-period-close
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-close-notification
              method: POST

Looks up a SAP S/4HANA purchase order by number, returning status, vendor details, and total value for finance and procurement teams.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by number, returning status, vendor details, and total value for finance and procurement teams."
  tags:
    - finance
    - procurement
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, and currency."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number to retrieve."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-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 SAP purchase order status by PO number.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status Check"
  description: "Retrieves SAP purchase order status by PO number."
  tags:
    - finance
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: check-po-status
          description: "Check SAP PO status."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-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

Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams.

naftiko: "0.5"
info:
  label: "SAP Vendor Invoice Processing Orchestrator"
  description: "Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams."
  tags:
    - finance
    - procurement
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap-ops
      port: 8080
      tools:
        - name: sap-vendor-invoice-processing-orchestrator
          description: "Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "SAP Vendor Invoice Processing Orchestrator completed successfully."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams.

naftiko: "0.5"
info:
  label: "Scientific Publication Submission Tracker"
  description: "Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams."
  tags:
    - research
    - medical-affairs
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: scientific-ops
      port: 8080
      tools:
        - name: scientific-publication-submission-tracker
          description: "Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-documents
              type: call
              call: "sharepoint.list-items"
              with:
                site_id: "$secrets.default_site_id"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Scientific Publication Submission Tracker completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves a CMDB configuration item by asset tag.

naftiko: "0.5"
info:
  label: "ServiceNow CMDB CI Lookup"
  description: "Retrieves a CMDB configuration item by asset tag."
  tags:
    - it-asset-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-cmdb
      port: 8080
      tools:
        - name: get-cmdb-ci
          description: "Look up CMDB CI."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The asset tag."
          call: "servicenow.get-ci"
          with:
            sysparm_query: "asset_tag={{asset_tag}}"
          outputParameters:
            - name: owner
              type: string
              mapping: "$.result[0].owned_by.display_value"
            - name: status
              type: string
              mapping: "$.result[0].operational_status"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb-ci
          path: "/table/cmdb_ci"

          operations:
            - name: get-ci
              method: GET

Opens a ServiceNow change control request for GxP-regulated systems, routes it through the quality assurance review board, and notifies stakeholders in Teams.

naftiko: "0.5"
info:
  label: "ServiceNow GxP Change Control Request"
  description: "Opens a ServiceNow change control request for GxP-regulated systems, routes it through the quality assurance review board, and notifies stakeholders in Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - gxp
    - quality
capability:
  exposes:
    - type: mcp
      namespace: gxp-change-control
      port: 8080
      tools:
        - name: open-gxp-change-request
          description: "Given a change description and GxP system classification, create a ServiceNow change control request for a regulated system and notify the QA review board in Teams."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the proposed change to the GxP-regulated system."
            - name: system_name
              in: body
              type: string
              description: "Name of the GxP-regulated system being changed."
            - name: scheduled_start
              in: body
              type: string
              description: "Planned start datetime in ISO 8601 format."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "{{short_description}}"
                system: "{{system_name}}"
                start_date: "{{scheduled_start}}"
                category: "gxp_change_control"
            - name: notify-qa-board
              type: call
              call: "msteams.notify-qa-board"
              with:
                channel_id: "qa-change-control"
                message: "GxP change request {{create-change.number}} submitted for {{system_name}}: {{short_description}} | Scheduled: {{scheduled_start}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: notify-qa-board
              method: POST

Retrieves the current status and assignment of a ServiceNow incident by number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Check"
  description: "Retrieves the current status and assignment of a ServiceNow incident by number."
  tags:
    - it-service-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-incident
      port: 8080
      tools:
        - name: get-incident-status
          description: "Check ServiceNow incident status."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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

Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data.

naftiko: "0.5"
info:
  label: "ServiceNow Major Incident Bridge"
  description: "Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data."
  tags:
    - it-service-management
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: servicenow-ops
      port: 8080
      tools:
        - name: servicenow-major-incident-bridge
          description: "Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "ServiceNow Major Incident Bridge action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "ServiceNow Major Incident Bridge completed successfully."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a ServiceNow P1 incident breaches its SLA for a critical research or commercial system, escalates by creating a Jira ticket and alerting leadership in Teams.

naftiko: "0.5"
info:
  label: "ServiceNow P1 Incident Escalation to Jira"
  description: "When a ServiceNow P1 incident breaches its SLA for a critical research or commercial system, escalates by creating a Jira ticket and alerting leadership in Teams."
  tags:
    - itsm
    - incident-response
    - servicenow
    - jira
    - microsoft-teams
    - escalation
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-p1-incident
          description: "Given a ServiceNow incident number that has breached its P1 SLA, create a Jira Engineering ticket and notify the executive escalation Teams channel."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: create-escalation
              type: call
              call: "jira.create-escalation-ticket"
              with:
                project_key: "ENG"
                issuetype: "Incident"
                summary: "[P1 Escalation] {{get-incident.short_description}}"
                description: "ServiceNow: {{incident_number}}\nImpact: {{get-incident.impact}}\nOpened: {{get-incident.opened_at}}"
            - name: alert-leadership
              type: call
              call: "msteams.post-escalation-alert"
              with:
                channel_id: "executive-escalations"
                message: "P1 SLA breach: {{incident_number}}. Jira: {{create-escalation.key}}. {{get-incident.short_description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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: jira
      baseUri: "https://regeneron.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-escalation-ticket
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-escalation-alert
              method: POST

Lists documents in a SharePoint library.

naftiko: "0.5"
info:
  label: "SharePoint Document Listing"
  description: "Lists documents in a SharePoint library."
  tags:
    - collaboration
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: collab-docs
      port: 8080
      tools:
        - name: list-sharepoint-docs
          description: "List SharePoint documents."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The site ID."
          call: "sharepoint.list-items"
          with:
            site_id: "{{site_id}}"
          outputParameters:
            - name: files
              type: array
              mapping: "$.value"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drives
          path: "/sites/{{site_id}}/drives"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: list-items
              method: GET

Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams.

naftiko: "0.5"
info:
  label: "Snowflake Data Quality SLA Monitor"
  description: "Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams."
  tags:
    - data-engineering
    - data-quality
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: snowflake-ops
      port: 8080
      tools:
        - name: snowflake-data-quality-sla-monitor
          description: "Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Snowflake Data Quality SLA Monitor action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Snowflake Data Quality SLA Monitor completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for genomics data pipeline task failures and ETL job anomalies, raising a Jira incident when failures are detected.

naftiko: "0.5"
info:
  label: "Snowflake Genomics Data Pipeline Health Check"
  description: "Queries Snowflake for genomics data pipeline task failures and ETL job anomalies, raising a Jira incident when failures are detected."
  tags:
    - data
    - analytics
    - snowflake
    - jira
    - monitoring
    - genomics
capability:
  exposes:
    - type: mcp
      namespace: genomics-data-ops
      port: 8080
      tools:
        - name: check-genomics-pipeline-health
          description: "Given a Snowflake warehouse name used for genomics ETL, query task history for failures in the last 24 hours and open a Jira incident if failures are detected."
          inputParameters:
            - name: warehouse_name
              in: body
              type: string
              description: "The Snowflake warehouse name for genomics pipelines."
          steps:
            - name: query-failures
              type: call
              call: "snowflake.get-task-history"
              with:
                warehouse_name: "{{warehouse_name}}"
            - name: create-incident
              type: call
              call: "jira.create-data-incident"
              with:
                project_key: "DATA"
                issuetype: "Incident"
                summary: "Genomics pipeline failures in {{warehouse_name}}"
                description: "Failed tasks: {{query-failures.failure_count}} in warehouse {{warehouse_name}} in last 24 hours."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/warehouses/{{warehouse_name}}/tasks/history"
          inputParameters:
            - name: warehouse_name
              in: path
          operations:
            - name: get-task-history
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://regeneron.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-data-incident
              method: POST

Queries Snowflake for the row count of a genomics data table for pipeline validation.

naftiko: "0.5"
info:
  label: "Snowflake Genomics Table Row Count"
  description: "Queries Snowflake for the row count of a genomics data table for pipeline validation."
  tags:
    - data-engineering
    - snowflake
    - genomics
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: get-genomics-row-count
          description: "Query row count of a Snowflake genomics table."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "Fully qualified table name."
          call: "snowflake.run-query"
          with:
            statement: "SELECT COUNT(*) FROM {{table_name}}"
          outputParameters:
            - name: row_count
              type: integer
              mapping: "$.data[0][0]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST

Checks last run status of a Snowflake data pipeline.

naftiko: "0.5"
info:
  label: "Snowflake Pipeline Last Run Check"
  description: "Checks last run status of a Snowflake data pipeline."
  tags:
    - data-engineering
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: data-ops-monitor
      port: 8080
      tools:
        - name: check-pipeline-run
          description: "Check pipeline run."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "The pipeline name."
          call: "snowflake.run-query"
          with:
            statement: "SELECT status, last_run_at FROM data_ops.pipeline_runs WHERE pipeline_name='{{pipeline_name}}' ORDER BY last_run_at DESC LIMIT 1"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data[0][0]"
            - name: last_run
              type: string
              mapping: "$.data[0][1]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST

Runs automated data quality checks on Snowflake translational research datasets and posts a quality summary report to the bioinformatics Teams channel.

naftiko: "0.5"
info:
  label: "Snowflake Translational Research Data Quality Check"
  description: "Runs automated data quality checks on Snowflake translational research datasets and posts a quality summary report to the bioinformatics Teams channel."
  tags:
    - data
    - analytics
    - snowflake
    - microsoft-teams
    - data-quality
    - genomics
capability:
  exposes:
    - type: mcp
      namespace: research-data-quality
      port: 8080
      tools:
        - name: run-data-quality-check
          description: "Given a Snowflake database and schema containing translational research data, execute quality checks for nulls, outliers, and referential integrity, then post results to Teams."
          inputParameters:
            - name: database_name
              in: body
              type: string
              description: "The Snowflake database name containing research data."
            - name: schema_name
              in: body
              type: string
              description: "The Snowflake schema name to run quality checks on."
            - name: channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for the bioinformatics team."
          steps:
            - name: run-quality-checks
              type: call
              call: "snowflake.execute-quality-check"
              with:
                database: "{{database_name}}"
                schema: "{{schema_name}}"
            - name: post-quality-report
              type: call
              call: "msteams.post-quality-summary"
              with:
                channel_id: "{{channel_id}}"
                message: "Data quality check for {{database_name}}.{{schema_name}}: {{run-quality-checks.pass_count}} passed, {{run-quality-checks.fail_count}} failed checks."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: execute-quality-check
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-quality-summary
              method: POST

Syncs demand forecasts by pulling Snowflake projections, updating SAP, and notifying via Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Demand Forecast Sync"
  description: "Syncs demand forecasts by pulling Snowflake projections, updating SAP, and notifying via Teams."
  tags:
    - supply-chain
    - snowflake
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-ops
      port: 8080
      tools:
        - name: supply-chain-demand-forecast-sync
          description: "Syncs demand forecasts by pulling Snowflake projections, updating SAP, and notifying via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Supply Chain Demand Forecast Sync completed successfully."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Posts a message to a Teams channel.

naftiko: "0.5"
info:
  label: "Teams Channel Message Post"
  description: "Posts a message to a Teams channel."
  tags:
    - collaboration
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: collab-messaging
      port: 8080
      tools:
        - name: post-teams-message
          description: "Post Teams channel message."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Team ID."
            - name: channel_id
              in: body
              type: string
              description: "Channel ID."
            - name: message
              in: body
              type: string
              description: "Message."
          call: "msteams.post-channel-message"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
            body: "{{message}}"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.id"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Assesses vendor qualifications by pulling SAP data, checking Snowflake compliance, and creating ServiceNow reviews.

naftiko: "0.5"
info:
  label: "Vendor Qualification Assessment"
  description: "Assesses vendor qualifications by pulling SAP data, checking Snowflake compliance, and creating ServiceNow reviews."
  tags:
    - procurement
    - quality
    - sap
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vendor-ops
      port: 8080
      tools:
        - name: vendor-qualification-assessment
          description: "Assesses vendor qualifications by pulling SAP data, checking Snowflake compliance, and creating ServiceNow reviews."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-sap-data
              type: call
              call: "sap.get-partner"
              with:
                filter: "BusinessPartnerCategory eq 1"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Vendor Qualification Assessment action required"
                category: "automated"
                assigned_group: "Operations"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: partners
          path: "/A_BusinessPartner"

          operations:
            - name: get-partner
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.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

Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams.

naftiko: "0.5"
info:
  label: "Workday Annual Compensation Review"
  description: "Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams."
  tags:
    - hr
    - compensation
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday-ops
      port: 8080
      tools:
        - name: workday-annual-compensation-review
          description: "Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Workday Annual Compensation Review completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake.

naftiko: "0.5"
info:
  label: "Workday Benefits Open Enrollment Kickoff"
  description: "Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake."
  tags:
    - hr
    - benefits
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday-ops
      port: 8080
      tools:
        - name: workday-benefits-open-enrollment-kickoff
          description: "Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Workday Benefits Open Enrollment Kickoff completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves compensation details for a Workday employee.

naftiko: "0.5"
info:
  label: "Workday Compensation Lookup"
  description: "Retrieves compensation details for a Workday employee."
  tags:
    - hr
    - compensation
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: get-compensation
          description: "Look up Workday compensation."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The worker ID."
          call: "workday.get-compensation"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: base_pay
              type: string
              mapping: "$.compensation.basePay"
            - name: pay_grade
              type: string
              mapping: "$.compensation.payGrade"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/regeneron/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation
              method: GET

Retrieves an employee profile from Workday by worker ID, returning name, department, and job title.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by worker ID, returning name, department, and job title."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-employee
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up a Workday employee profile by worker ID."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.worker.displayName"
            - name: department
              type: string
              mapping: "$.worker.department"
  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: "/regeneron/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves an employee's current leave balances and pending absence requests from Workday for HR business partners and managers.

naftiko: "0.5"
info:
  label: "Workday Leave Balance Lookup"
  description: "Retrieves an employee's current leave balances and pending absence requests from Workday for HR business partners and managers."
  tags:
    - hr
    - workday
    - leave-management
capability:
  exposes:
    - type: mcp
      namespace: hr-leave
      port: 8080
      tools:
        - name: get-leave-balance
          description: "Given a Workday employee ID, return current PTO, sick leave, and other leave balances along with any pending absence requests."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-leave-balance"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: pto_balance
              type: number
              mapping: "$.data.timeOffBalances.ptoBalance"
            - name: sick_balance
              type: number
              mapping: "$.data.timeOffBalances.sickBalance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: leave-balances
          path: "/regeneron/workers/{{worker_id}}/timeOffBalances"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-leave-balance
              method: GET

Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams.

naftiko: "0.5"
info:
  label: "Workday New Position Approval Workflow"
  description: "Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams."
  tags:
    - hr
    - workforce-planning
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday-ops
      port: 8080
      tools:
        - name: workday-new-position-approval-workflow
          description: "Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                statement: "SELECT * FROM analytics.summary LIMIT 100"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Workday New Position Approval Workflow completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://regeneron.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"

          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams.

naftiko: "0.5"
info:
  label: "Workday Organizational Change Propagation"
  description: "Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams."
  tags:
    - hr
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday-ops
      port: 8080
      tools:
        - name: workday-organizational-change-propagation
          description: "Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The request or entity identifier."
          steps:
            - name: get-employee-data
              type: call
              call: "workday.get-workers"
              with:
                department: "all"
            - name: check-identity
              type: call
              call: "okta.get-users"
              with:
                filter: "status eq ACTIVE"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Workday Organizational Change Propagation action required"
                category: "automated"
                assigned_group: "Operations"
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "$secrets.ops_team_id"
                channel_id: "$secrets.ops_channel_id"
                body: "Workday Organizational Change Propagation completed successfully."
  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: "/regeneron/workers"

          operations:
            - name: get-workers
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://regeneron.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"

          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://regeneron.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"

          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Initiates the annual performance review cycle in Workday and sends kick-off notifications to managers in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Launcher"
  description: "Initiates the annual performance review cycle in Workday and sends kick-off notifications to managers in Microsoft Teams."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: launch-review-cycle
          description: "Given a review cycle name and deadline, initiate the Workday performance review process for all active employees and notify managers in Teams."
          inputParameters:
            - name: cycle_name
              in: body
              type: string
              description: "The performance review cycle name (e.g., 2025 Annual Review)."
            - name: deadline
              in: body
              type: string
              description: "Review completion deadline in YYYY-MM-DD format."
          steps:
            - name: create-cycle
              type: call
              call: "workday.create-review-cycle"
              with:
                name: "{{cycle_name}}"
                deadline: "{{deadline}}"
            - name: notify-managers
              type: call
              call: "msteams.broadcast-review-kickoff"
              with:
                channel_id: "people-managers"
                message: "Performance review cycle '{{cycle_name}}' is now open. Deadline: {{deadline}}. Workday cycle ID: {{create-cycle.cycle_id}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: review-cycles
          path: "/regeneron/performanceReviews"
          operations:
            - name: create-review-cycle
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: broadcast-review-kickoff
              method: POST

When an employee's role or department changes in Workday, updates their Salesforce profile, revises Okta group memberships, and notifies their new manager in Teams.

naftiko: "0.5"
info:
  label: "Workday Role Change Propagation"
  description: "When an employee's role or department changes in Workday, updates their Salesforce profile, revises Okta group memberships, and notifies their new manager in Teams."
  tags:
    - hr
    - identity
    - workday
    - salesforce
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: propagate-role-change
          description: "Given a Workday employee ID and new role details, update the Salesforce user profile, revise Okta groups, and send a Teams notification to the new manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday worker ID of the employee changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job title or role name."
            - name: new_department
              in: body
              type: string
              description: "The new department name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-user"
              with:
                user_id: "{{get-employee.salesforce_user_id}}"
                title: "{{new_role}}"
                department: "{{new_department}}"
            - name: notify-manager
              type: call
              call: "msteams.send-role-notice"
              with:
                recipient: "{{get-employee.manager_email}}"
                message: "{{get-employee.full_name}} has moved to {{new_department}} as {{new_role}}."
  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: "/regeneron/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://regeneron.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: users
          path: "/sobjects/User/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient}}/sendMail"
          inputParameters:
            - name: recipient
              in: path
          operations:
            - name: send-role-notice
              method: POST