Medtronic Capabilities

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

Sort
Expand

Retrieves clinical trial protocol documents from SharePoint and uses the Anthropic Claude API to generate a concise summary of inclusion criteria, endpoints, and risk factors for the clinical affairs team.

naftiko: "0.5"
info:
  label: "AI-Assisted Clinical Trial Document Summarizer"
  description: "Retrieves clinical trial protocol documents from SharePoint and uses the Anthropic Claude API to generate a concise summary of inclusion criteria, endpoints, and risk factors for the clinical affairs team."
  tags:
    - ai
    - clinical
    - anthropic
    - sharepoint
    - microsoft-teams
    - regulatory
capability:
  exposes:
    - type: mcp
      namespace: clinical-ai
      port: 8080
      tools:
        - name: summarize-trial-protocol
          description: "Given a SharePoint site ID and document path for a clinical trial protocol, retrieve the document via Microsoft Graph, send it to Anthropic Claude for structured summarization of inclusion/exclusion criteria, primary and secondary endpoints, and safety considerations, then post the summary to the clinical affairs Teams channel. Use when reviewing new protocols, preparing for investigator meetings, or onboarding new clinical staff."
          inputParameters:
            - name: sharepoint_site_id
              in: body
              type: string
              description: "Microsoft Graph site ID for the SharePoint clinical document library."
            - name: protocol_document_path
              in: body
              type: string
              description: "Path to the clinical trial protocol document within the SharePoint drive."
            - name: clinical_channel_id
              in: body
              type: string
              description: "Teams channel ID for the clinical affairs team to receive the summary."
          steps:
            - name: get-protocol-document
              type: call
              call: "sharepoint-clinical.get-drive-item-content"
              with:
                site_id: "{{sharepoint_site_id}}"
                path: "{{protocol_document_path}}"
            - name: generate-summary
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "You are a clinical research expert. Summarize this Medtronic clinical trial protocol, extracting: 1) Inclusion and exclusion criteria, 2) Primary and secondary endpoints, 3) Key safety considerations and stopping rules, 4) Study duration and patient population. Protocol content: {{get-protocol-document.content}}"
            - name: post-summary
              type: call
              call: "msteams-clinical-ai.post-channel-message"
              with:
                channel_id: "{{clinical_channel_id}}"
                text: "Clinical Trial Protocol Summary: {{generate-summary.content}}"
  consumes:
    - type: http
      namespace: sharepoint-clinical
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{site_id}/drive/root:{path}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-drive-item-content
              method: GET
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams-clinical-ai
      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 archived clinical and manufacturing data in S3.

naftiko: "0.5"
info:
  label: "Amazon S3 Data Archive Lookup"
  description: "Retrieves metadata for archived clinical and manufacturing data in S3."
  tags:
    - data
    - cloud
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: data-archive
      port: 8080
      tools:
        - name: get-metadata
          description: "Given bucket and prefix, return object metadata. Use for archives."
          inputParameters:
            - name: bucket
              in: body
              type: string
              description: "Bucket."
            - name: prefix
              in: body
              type: string
              description: "Prefix."
          call: s3.list-objects
          with:
            bucket: "{{bucket}}"
            prefix: "{{prefix}}"
          outputParameters:
            - name: count
              type: integer
              mapping: "$.KeyCount"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.aws_s3_auth"
        placement: header
      resources:
        - name: objects
          path: "/{{bucket}}?list-type=2&prefix={{prefix}}"
          inputParameters:
            - name: bucket
              in: path
            - name: prefix
              in: query
          operations:
            - name: list-objects
              method: GET

Retrieves Azure AD group memberships for Medtronic employees.

naftiko: "0.5"
info:
  label: "Azure AD Group Membership Lookup"
  description: "Retrieves Azure AD group memberships for Medtronic employees."
  tags:
    - security
    - identity
    - azure-active-directory
capability:
  exposes:
    - type: mcp
      namespace: ad-groups
      port: 8080
      tools:
        - name: get-groups
          description: "Given UPN, return group memberships. Use for access audit."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "UPN."
          call: azure-ad.get-member-of
          with:
            upn: "{{user_upn}}"
          outputParameters:
            - name: group_count
              type: integer
              mapping: "$.value.length"
  consumes:
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.azure_ad_token"
      resources:
        - name: users
          path: "/users/{{upn}}/memberOf"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-member-of
              method: GET

Detects Azure spending anomalies in research or commercial subscriptions, creates a ServiceNow change request, and alerts the FinOps team via Teams.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Response"
  description: "Detects Azure spending anomalies in research or commercial subscriptions, creates a ServiceNow change request, and alerts the FinOps team via Teams."
  tags:
    - cloud
    - finops
    - azure
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID, anomalous spend amount, and responsible service, open a ServiceNow change request for investigation and alert the FinOps Teams channel. Use when Azure Cost Management detects unexpected spending in R&D, clinical systems, or commercial cloud subscriptions."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID where the anomaly was detected."
            - name: anomaly_amount
              in: body
              type: number
              description: "Anomalous spend amount in USD above baseline."
            - name: service_name
              in: body
              type: string
              description: "Azure service or resource group responsible for the anomaly."
          steps:
            - name: create-change
              type: call
              call: "servicenow-cost.create-change"
              with:
                short_description: "Azure cost anomaly: {{service_name}} — ${{anomaly_amount}} above baseline"
                category: "cloud_cost"
            - name: alert-finops
              type: call
              call: "msteams-finops.post-channel-message"
              with:
                channel_id: "finops-alerts"
                text: "Cost Anomaly: Azure {{service_name}} in {{subscription_id}} is ${{anomaly_amount}} over budget. ServiceNow: {{create-change.number}}"
  consumes:
    - type: http
      namespace: servicenow-cost
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries Azure Cost Management for resource group spend.

naftiko: "0.5"
info:
  label: "Azure Resource Cost Lookup"
  description: "Queries Azure Cost Management for resource group spend."
  tags:
    - it
    - cloud
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-cost
          description: "Given resource group, return current spend. Use for FinOps."
          inputParameters:
            - name: resource_group
              in: body
              type: string
              description: "Resource group."
          call: azure.get-cost-summary
          with:
            rg_name: "{{resource_group}}"
          outputParameters:
            - name: spend
              type: number
              mapping: "$.properties.rows[0].cost"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: cost
          path: "/subscriptions/{{sub}}/resourceGroups/{{rg_name}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: rg_name
              in: path
          operations:
            - name: get-cost-summary
              method: POST

Uploads regulatory documents to Box.

naftiko: "0.5"
info:
  label: "Box Regulatory File Upload"
  description: "Uploads regulatory documents to Box."
  tags:
    - regulatory
    - documentation
    - box
capability:
  exposes:
    - type: mcp
      namespace: file-storage
      port: 8080
      tools:
        - name: upload
          description: "Given folder and file name, upload to Box. Use for document storage."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "Folder ID."
            - name: file_name
              in: body
              type: string
              description: "File name."
          call: box.upload-file
          with:
            folder_id: "{{folder_id}}"
            name: "{{file_name}}"
          outputParameters:
            - name: file_id
              type: string
              mapping: "$.entries[0].id"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Orchestrates firmware release for cardiac rhythm management devices by running validation, creating regulatory tasks, and notifying engineering.

naftiko: "0.5"
info:
  label: "Cardiac Device Firmware Release Orchestration"
  description: "Orchestrates firmware release for cardiac rhythm management devices by running validation, creating regulatory tasks, and notifying engineering."
  tags:
    - rd
    - regulatory
    - medical-device
    - github
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: firmware-release
      port: 8080
      tools:
        - name: release-firmware
          description: "Given version and branch, trigger validation, create regulatory task, and notify. Use for CRM device firmware."
          inputParameters:
            - name: firmware_version
              in: body
              type: string
              description: "Version."
            - name: release_branch
              in: body
              type: string
              description: "Branch."
          steps:
            - name: validate
              type: call
              call: github.create-workflow-dispatch
              with:
                repo: "medtronic/crm-firmware"
                workflow: "validation.yml"
                ref: "{{release_branch}}"
            - name: regulatory-task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Regulatory review: CRM firmware {{firmware_version}}"
                category: "regulatory_review"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "crm-engineering"
                text: "CRM firmware {{firmware_version}} release initiated. Regulatory task: {{regulatory-task.number}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/{{repo}}/actions/workflows/{{workflow}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow
              in: path
          operations:
            - name: create-workflow-dispatch
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Logs adverse events in safety database, notifies medical team, and creates regulatory tasks.

naftiko: "0.5"
info:
  label: "Clinical Adverse Event Reporting Orchestration"
  description: "Logs adverse events in safety database, notifies medical team, and creates regulatory tasks."
  tags:
    - clinical
    - regulatory
    - safety
    - oracle
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: drug-safety
      port: 8080
      tools:
        - name: report-ae
          description: "Given study, patient, event, and severity, log event, notify, and create task. Use for SAE reporting."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Study ID."
            - name: patient_id
              in: body
              type: string
              description: "Patient ID."
            - name: event_description
              in: body
              type: string
              description: "Event."
            - name: severity
              in: body
              type: string
              description: "Severity."
          steps:
            - name: log
              type: call
              call: oracle-argus.create-case
              with:
                study_id: "{{study_id}}"
                subject_id: "{{patient_id}}"
                description: "{{event_description}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "medical-safety"
                text: "SAE: {{study_id}} Patient {{patient_id}}: {{event_description}} ({{severity}}). Case: {{log.case_number}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "SAE report: {{log.case_number}}"
                priority: "1"
  consumes:
    - type: http
      namespace: oracle-argus
      baseUri: "https://medtronic-argus.oracle.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_argus_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Orchestrates database lock for Medtronic device clinical trials.

naftiko: "0.5"
info:
  label: "Clinical Data Lock Orchestration"
  description: "Orchestrates database lock for Medtronic device clinical trials."
  tags:
    - clinical
    - rd
    - snowflake
    - oracle
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-lock
      port: 8080
      tools:
        - name: lock-database
          description: "Given study and lock date, run checks, lock, and notify. Use for database locks."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Study."
            - name: lock_date
              in: body
              type: string
              description: "Date."
          steps:
            - name: checks
              type: call
              call: snowflake.execute-query
              with:
                query_name: "data_quality_check"
                params: "{{study_id}}"
            - name: lock
              type: call
              call: oracle-clinical.lock-study
              with:
                study_id: "{{study_id}}"
                lock_date: "{{lock_date}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "biostatistics"
                text: "Study {{study_id}} locked. Queries: {{checks.open_query_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: oracle-clinical
      baseUri: "https://medtronic-ctms.oracle.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_ctms_token"
      resources:
        - name: studies
          path: "/studies/{{study_id}}/lock"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: lock-study
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Activates clinical trial sites for Medtronic device studies.

naftiko: "0.5"
info:
  label: "Clinical Site Activation Orchestration"
  description: "Activates clinical trial sites for Medtronic device studies."
  tags:
    - clinical
    - rd
    - oracle
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: site-activation
      port: 8080
      tools:
        - name: activate-site
          description: "Given study and site, verify IRB, provision access, schedule visit, and notify. Use for site activation."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Study."
            - name: site_id
              in: body
              type: string
              description: "Site."
          steps:
            - name: irb
              type: call
              call: oracle-clinical.get-irb-status
              with:
                study_id: "{{study_id}}"
                site_id: "{{site_id}}"
            - name: access
              type: call
              call: okta.assign-group
              with:
                group_name: "study-{{study_id}}-site-{{site_id}}"
            - name: visit
              type: call
              call: oracle-clinical.create-visit
              with:
                study_id: "{{study_id}}"
                site_id: "{{site_id}}"
                visit_type: "initiation"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "clinical-ops"
                text: "Site {{site_id}} activated for {{study_id}}. IRB: {{irb.status}}. Visit: {{visit.visit_date}}"
  consumes:
    - type: http
      namespace: oracle-clinical
      baseUri: "https://medtronic-ctms.oracle.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_ctms_token"
      resources:
        - name: irb
          path: "/studies/{{study_id}}/sites/{{site_id}}/irb"
          inputParameters:
            - name: study_id
              in: path
            - name: site_id
              in: path
          operations:
            - name: get-irb-status
              method: GET
        - name: visits
          path: "/studies/{{study_id}}/sites/{{site_id}}/visits"
          inputParameters:
            - name: study_id
              in: path
            - name: site_id
              in: path
          operations:
            - name: create-visit
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://medtronic.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_token"
        placement: header
      resources:
        - name: groups
          path: "/groups"
          operations:
            - name: assign-group
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries CTMS for medical device clinical trial enrollment counts.

naftiko: "0.5"
info:
  label: "Clinical Trial Patient Enrollment Tracker"
  description: "Queries CTMS for medical device clinical trial enrollment counts."
  tags:
    - clinical
    - rd
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: clinical-enrollment
      port: 8080
      tools:
        - name: get-enrollment
          description: "Given study ID, return enrollment count and target. Use for enrollment visibility."
          inputParameters:
            - name: study_id
              in: body
              type: string
              description: "Study ID."
          call: oracle-clinical.get-study-enrollment
          with:
            study_id: "{{study_id}}"
          outputParameters:
            - name: enrolled
              type: integer
              mapping: "$.data.enrolled"
            - name: target
              type: integer
              mapping: "$.data.target"
  consumes:
    - type: http
      namespace: oracle-clinical
      baseUri: "https://medtronic-ctms.oracle.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_ctms_token"
      resources:
        - name: studies
          path: "/studies/{{study_id}}/enrollment"
          inputParameters:
            - name: study_id
              in: path
          operations:
            - name: get-study-enrollment
              method: GET

Handles cold chain temperature excursions for implantable device shipments.

naftiko: "0.5"
info:
  label: "Cold Chain Temperature Excursion Orchestration"
  description: "Handles cold chain temperature excursions for implantable device shipments."
  tags:
    - supply-chain
    - quality
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cold-chain
      port: 8080
      tools:
        - name: handle-excursion
          description: "Given shipment, batch, and temperature, create deviation, quarantine, and notify. Use for cold chain."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Shipment."
            - name: batch_number
              in: body
              type: string
              description: "Batch."
            - name: temperature
              in: body
              type: string
              description: "Temp."
          steps:
            - name: deviation
              type: call
              call: servicenow.create-deviation
              with:
                description: "Cold chain: {{shipment_id}} {{batch_number}} {{temperature}}"
                priority: "1"
            - name: quarantine
              type: call
              call: sap-erp.update-batch-status
              with:
                batch: "{{batch_number}}"
                status: "quarantine"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "supply-chain"
                text: "COLD CHAIN: {{shipment_id}} {{batch_number}} quarantined. Dev: {{deviation.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: deviations
          path: "/table/u_deviation"
          operations:
            - name: create-deviation
              method: POST
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/A_Batch('{{batch}}')"
          inputParameters:
            - name: batch
              in: path
          operations:
            - name: update-batch-status
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Initiates compliance document reviews for Medtronic quality system.

naftiko: "0.5"
info:
  label: "Compliance Document Review Orchestration"
  description: "Initiates compliance document reviews for Medtronic quality system."
  tags:
    - compliance
    - quality
    - veeva-vault
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-review
      port: 8080
      tools:
        - name: initiate-review
          description: "Given document ID and deadline, create tasks and notify. Use for reviews."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "Document ID."
            - name: review_deadline
              in: body
              type: string
              description: "Deadline."
          steps:
            - name: get-doc
              type: call
              call: veeva-vault.get-document
              with:
                doc_id: "{{document_id}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Review: {{get-doc.title}}"
                due_date: "{{review_deadline}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "compliance"
                text: "Review: {{get-doc.title}}. Due: {{review_deadline}}. Task: {{task.number}}"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: documents
          path: "/objects/documents/{{doc_id}}"
          inputParameters:
            - name: doc_id
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves SOPs from Confluence for Medtronic quality teams.

naftiko: "0.5"
info:
  label: "Confluence SOP Retrieval"
  description: "Retrieves SOPs from Confluence for Medtronic quality teams."
  tags:
    - quality
    - documentation
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: sop-library
      port: 8080
      tools:
        - name: get-sop
          description: "Given page ID, return title. Use for SOP reference."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "Page ID."
          call: confluence.get-page
          with:
            page_id: "{{page_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.title"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://medtronic.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}?expand=version"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

When a CrowdStrike Falcon detection fires on a Medtronic endpoint, creates a ServiceNow security incident, posts a Datadog security event, and alerts the SOC via Teams.

naftiko: "0.5"
info:
  label: "CrowdStrike Endpoint Threat Detection Handler"
  description: "When a CrowdStrike Falcon detection fires on a Medtronic endpoint, creates a ServiceNow security incident, posts a Datadog security event, and alerts the SOC via Teams."
  tags:
    - security
    - crowdstrike
    - servicenow
    - datadog
    - microsoft-teams
    - threat-detection
capability:
  exposes:
    - type: mcp
      namespace: soc-ops
      port: 8080
      tools:
        - name: handle-endpoint-threat
          description: "Given a CrowdStrike detection ID, severity, affected hostname, and MITRE tactic, retrieve the detection details, create a ServiceNow security incident, log a Datadog security event, and alert the SOC Teams channel. Invoke immediately on any medium, high, or critical CrowdStrike detection across Medtronic's global endpoint fleet."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "CrowdStrike Falcon detection ID."
            - name: severity
              in: body
              type: string
              description: "Detection severity: critical, high, or medium."
            - name: affected_host
              in: body
              type: string
              description: "Hostname of the affected endpoint."
            - name: tactic
              in: body
              type: string
              description: "MITRE ATT&CK tactic associated with the detection."
          steps:
            - name: get-detection
              type: call
              call: "crowdstrike.get-detection"
              with:
                detection_id: "{{detection_id}}"
            - name: create-security-incident
              type: call
              call: "servicenow-soc.create-incident"
              with:
                short_description: "[{{severity}}] Endpoint threat: {{affected_host}} — {{tactic}}"
                category: "security_incident"
                urgency: "1"
            - name: post-datadog-event
              type: call
              call: "datadog-soc.create-event"
              with:
                title: "CrowdStrike Detection: {{affected_host}}"
                text: "Detection {{detection_id}} | Severity: {{severity}} | Tactic: {{tactic}} | ServiceNow: {{create-security-incident.number}}"
                alert_type: "error"
            - name: alert-soc
              type: call
              call: "msteams-soc.post-channel-message"
              with:
                channel_id: "security-operations-center"
                text: "THREAT DETECTED: {{affected_host}} | Severity: {{severity}} | Tactic: {{tactic}} | CrowdStrike: {{detection_id}} | ServiceNow: {{create-security-incident.number}}"
  consumes:
    - type: http
      namespace: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: detections
          path: "/detects/entities/detect/v2"
          operations:
            - name: get-detection
              method: GET
    - type: http
      namespace: servicenow-soc
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: datadog-soc
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-soc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Analyzes device complaint trends from Snowflake analytics.

naftiko: "0.5"
info:
  label: "Customer Complaint Trend Analysis"
  description: "Analyzes device complaint trends from Snowflake analytics."
  tags:
    - quality
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: complaint-analytics
      port: 8080
      tools:
        - name: analyze-trends
          description: "Given product line and period, return complaint trends. Use for quality analytics."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "Product line."
            - name: period
              in: body
              type: string
              description: "Period."
          call: snowflake.execute-query
          with:
            query_name: "complaint_trends"
            params: "{{product_line}},{{period}}"
          outputParameters:
            - name: total_complaints
              type: integer
              mapping: "$.data[0].total"
            - name: top_category
              type: string
              mapping: "$.data[0].top_category"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Deploys ML models for Medtronic R&D analytics.

naftiko: "0.5"
info:
  label: "Databricks ML Model Deployment Orchestration"
  description: "Deploys ML models for Medtronic R&D analytics."
  tags:
    - rd
    - ai
    - databricks
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ml-deployment
      port: 8080
      tools:
        - name: deploy
          description: "Given model and version, register, create change, and notify. Use for deployments."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "Model."
            - name: model_version
              in: body
              type: string
              description: "Version."
          steps:
            - name: register
              type: call
              call: databricks.register-model-version
              with:
                name: "{{model_name}}"
                version: "{{model_version}}"
            - name: change
              type: call
              call: servicenow.create-change
              with:
                short_description: "ML: {{model_name}} v{{model_version}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "data-science"
                text: "{{model_name}} v{{model_version}} deployed. Change: {{change.number}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://medtronic.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: models
          path: "/mlflow/model-versions/transition-stage"
          operations:
            - name: register-model-version
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the status of Databricks job runs for medical device R&D and signal processing models and alerts the data science team via Teams if any runs fail.

naftiko: "0.5"
info:
  label: "Databricks R&D Model Training Monitor"
  description: "Checks the status of Databricks job runs for medical device R&D and signal processing models and alerts the data science team via Teams if any runs fail."
  tags:
    - ai
    - data
    - databricks
    - microsoft-teams
    - ml-operations
    - rd
capability:
  exposes:
    - type: mcp
      namespace: rd-mlops
      port: 8080
      tools:
        - name: monitor-rd-model-runs
          description: "Given an Azure Databricks workspace and job ID, retrieve the latest job run status and alert the R&D data science Teams channel if the run failed. Use for daily monitoring of cardiac signal processing, device telemetry analysis, and predictive maintenance model training jobs."
          inputParameters:
            - name: databricks_host
              in: body
              type: string
              description: "Azure Databricks workspace hostname."
            - name: job_id
              in: body
              type: integer
              description: "The Databricks job ID to check for run status."
            - name: data_science_channel_id
              in: body
              type: string
              description: "Teams channel ID for the R&D data science team."
          steps:
            - name: get-job-run
              type: call
              call: "databricks.get-latest-run"
              with:
                job_id: "{{job_id}}"
            - name: alert-team
              type: call
              call: "msteams-rd.post-channel-message"
              with:
                channel_id: "{{data_science_channel_id}}"
                text: "R&D Model Job Alert: Job {{job_id}} on {{databricks_host}} — Status: {{get-job-run.state}}. Run ID: {{get-job-run.run_id}}. Please investigate if failed."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://adb-0000000000.0.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: job-runs
          path: "/jobs/runs/get-latest-by-job-id"
          operations:
            - name: get-latest-run
              method: GET
    - type: http
      namespace: msteams-rd
      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 Datadog for the current monitor states of a named host or service in Medtronic's production environment for use in operational triage.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Health Check"
  description: "Queries Datadog for the current monitor states of a named host or service in Medtronic's production environment for use in operational triage."
  tags:
    - observability
    - datadog
    - monitoring
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-host-health
          description: "Given a hostname or service tag, retrieve all active Datadog monitors and their current states. Use when investigating a production outage, during on-call triage, or to check the health of clinical data systems."
          inputParameters:
            - name: hostname
              in: body
              type: string
              description: "The fully qualified hostname or Datadog service tag to check monitor states for."
          call: "datadog.get-monitors"
          with:
            host: "{{hostname}}"
          outputParameters:
            - name: monitors
              type: array
              mapping: "$.monitors"
            - name: alerting_count
              type: number
              mapping: "$.counts.Alert"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor"
          operations:
            - name: get-monitors
              method: GET

Retrieves SLO compliance data for clinical and commercial systems from Datadog and posts a weekly summary to the IT leadership Teams channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Report"
  description: "Retrieves SLO compliance data for clinical and commercial systems from Datadog and posts a weekly summary to the IT leadership Teams channel."
  tags:
    - observability
    - datadog
    - slo
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: slo-reporting
      port: 8080
      tools:
        - name: publish-slo-report
          description: "Given a Datadog SLO tag filter and Teams channel ID, retrieve all SLO compliance statuses for the past 7 days and post a summary. Use for weekly IT reliability reviews and SLA reporting for clinical and commercial systems."
          inputParameters:
            - name: slo_tag_filter
              in: body
              type: string
              description: "Datadog tag filter to scope which SLOs to report on (e.g., team:clinical-it, env:production)."
            - name: teams_channel_id
              in: body
              type: string
              description: "Teams channel ID to post the SLO compliance summary to."
          steps:
            - name: get-slos
              type: call
              call: "datadog-slo.get-slos"
              with:
                tags_query: "{{slo_tag_filter}}"
            - name: post-report
              type: call
              call: "msteams-slo.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "SLO Compliance Report: {{get-slos.compliant_count}} SLOs meeting target, {{get-slos.breached_count}} breaching. Filter: {{slo_tag_filter}}."
  consumes:
    - type: http
      namespace: datadog-slo
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo"
          operations:
            - name: get-slos
              method: GET
    - type: http
      namespace: msteams-slo
      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 medical device complaint exceeds severity threshold, creates CAPA, notifies quality, and updates complaint.

naftiko: "0.5"
info:
  label: "Device Complaint to CAPA Orchestration"
  description: "When a medical device complaint exceeds severity threshold, creates CAPA, notifies quality, and updates complaint."
  tags:
    - quality
    - regulatory
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: complaint-capa
      port: 8080
      tools:
        - name: escalate-complaint
          description: "Given complaint ID, create CAPA, notify quality, and update. Use for high-severity complaints."
          inputParameters:
            - name: complaint_case_id
              in: body
              type: string
              description: "Complaint case ID."
          steps:
            - name: get-complaint
              type: call
              call: salesforce.get-case
              with:
                case_id: "{{complaint_case_id}}"
            - name: create-capa
              type: call
              call: servicenow.create-capa
              with:
                short_description: "CAPA from complaint: {{get-complaint.subject}}"
                severity: "{{get-complaint.severity}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "quality-leadership"
                text: "CAPA {{create-capa.number}} from complaint {{complaint_case_id}} - {{get-complaint.severity}}"
            - name: update
              type: call
              call: salesforce.update-case
              with:
                case_id: "{{complaint_case_id}}"
                capa_ref: "{{create-capa.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
            - name: update-case
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: capa
          path: "/table/u_capa"
          operations:
            - name: create-capa
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves development pipeline status for Medtronic diabetes management devices.

naftiko: "0.5"
info:
  label: "Diabetes Device Pipeline Status Lookup"
  description: "Retrieves development pipeline status for Medtronic diabetes management devices."
  tags:
    - rd
    - medical-device
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: pipeline
      port: 8080
      tools:
        - name: get-pipeline-status
          description: "Given device program ID, return development phase and milestones. Use for R&D pipeline visibility."
          inputParameters:
            - name: program_id
              in: body
              type: string
              description: "Program ID."
          call: snowflake.execute-query
          with:
            query_name: "device_pipeline_status"
            params: "{{program_id}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.data[0].phase"
            - name: next_milestone
              type: string
              mapping: "$.data[0].next_milestone"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Sends contracts for signature via DocuSign for Medtronic hospital agreements.

naftiko: "0.5"
info:
  label: "DocuSign Contract Execution Orchestration"
  description: "Sends contracts for signature via DocuSign for Medtronic hospital agreements."
  tags:
    - legal
    - sales
    - docusign
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: contracts
      port: 8080
      tools:
        - name: send-contract
          description: "Given opportunity and template, send, update CRM, and notify. Use for contracts."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Opportunity ID."
            - name: template_id
              in: body
              type: string
              description: "Template."
          steps:
            - name: get-opp
              type: call
              call: salesforce.get-opportunity
              with:
                opp_id: "{{opportunity_id}}"
            - name: send
              type: call
              call: docusign.create-envelope
              with:
                template_id: "{{template_id}}"
                signer_email: "{{get-opp.contact_email}}"
            - name: update
              type: call
              call: salesforce.update-opportunity
              with:
                opp_id: "{{opportunity_id}}"
                status: "Sent"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "legal"
                text: "Contract sent for {{get-opp.account_name}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opp_id}}"
          inputParameters:
            - name: opp_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/accounts/{{account_id}}/envelopes"
          operations:
            - name: create-envelope
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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

Processes employee transfers by updating Workday, Okta, and notifying managers.

naftiko: "0.5"
info:
  label: "Employee Transfer Orchestration"
  description: "Processes employee transfers by updating Workday, Okta, and notifying managers."
  tags:
    - hr
    - identity
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: employee-transfer
      port: 8080
      tools:
        - name: process-transfer
          description: "Given worker ID and target department, update systems and notify. Use for transfers."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Worker ID."
            - name: target_department
              in: body
              type: string
              description: "Target department."
          steps:
            - name: get-emp
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{worker_id}}"
            - name: update-okta
              type: call
              call: okta.update-user-groups
              with:
                user_email: "{{get-emp.work_email}}"
                department: "{{target_department}}"
            - name: transfer
              type: call
              call: servicenow.transfer-assets
              with:
                user_id: "{{worker_id}}"
                department: "{{target_department}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "hr-ops"
                text: "Transfer: {{get-emp.first_name}} {{get-emp.last_name}} to {{target_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: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://medtronic.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_email}}/groups"
          inputParameters:
            - name: user_email
              in: path
          operations:
            - name: update-user-groups
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: assets
          path: "/table/alm_asset"
          operations:
            - name: transfer-assets
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Handles cleanroom environmental excursions in medical device manufacturing.

naftiko: "0.5"
info:
  label: "Environmental Monitoring Alert Response"
  description: "Handles cleanroom environmental excursions in medical device manufacturing."
  tags:
    - manufacturing
    - quality
    - compliance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: env-monitoring
      port: 8080
      tools:
        - name: handle-excursion
          description: "Given sensor, parameter, and value, create incident, deviation, and alert. Use for cleanroom excursions."
          inputParameters:
            - name: sensor_id
              in: body
              type: string
              description: "Sensor."
            - name: parameter_name
              in: body
              type: string
              description: "Parameter."
            - name: measured_value
              in: body
              type: string
              description: "Value."
          steps:
            - name: incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Env: {{parameter_name}} at {{sensor_id}}"
                priority: "2"
            - name: deviation
              type: call
              call: servicenow.create-deviation
              with:
                description: "{{parameter_name}} = {{measured_value}} at {{sensor_id}}"
            - name: alert
              type: call
              call: msteams.send-message
              with:
                channel_id: "quality-alerts"
                text: "ENV: {{parameter_name}} at {{sensor_id}} = {{measured_value}}. Incident: {{incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.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
        - name: deviations
          path: "/table/u_deviation"
          operations:
            - name: create-deviation
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Manages equipment calibration for Medtronic manufacturing.

naftiko: "0.5"
info:
  label: "Equipment Calibration Orchestration"
  description: "Manages equipment calibration for Medtronic manufacturing."
  tags:
    - quality
    - manufacturing
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: calibration
      port: 8080
      tools:
        - name: schedule-calibration
          description: "Given equipment ID, check due date, create WO, and notify. Use for calibration."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "Equipment."
          steps:
            - name: check
              type: call
              call: sap-erp.get-calibration-status
              with:
                equipment: "{{equipment_id}}"
            - name: wo
              type: call
              call: servicenow.create-work-order
              with:
                short_description: "Calibration: {{equipment_id}}"
                due_date: "{{check.next_cal_date}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "calibration"
                text: "Calibration: {{equipment_id}}. Due: {{check.next_cal_date}}. WO: {{wo.number}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: equipment
          path: "/A_Equipment('{{equipment}}')/calibration"
          inputParameters:
            - name: equipment
              in: path
          operations:
            - name: get-calibration-status
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves FDA 510(k) premarket notification status for Medtronic medical devices.

naftiko: "0.5"
info:
  label: "FDA 510(k) Submission Status Lookup"
  description: "Retrieves FDA 510(k) premarket notification status for Medtronic medical devices."
  tags:
    - regulatory
    - medical-device
    - veeva-vault
capability:
  exposes:
    - type: mcp
      namespace: regulatory-submissions
      port: 8080
      tools:
        - name: get-510k-status
          description: "Given submission number, return review status. Use for regulatory tracking."
          inputParameters:
            - name: submission_number
              in: body
              type: string
              description: "510(k) submission number."
          call: veeva-vault.get-submission
          with:
            submission_id: "{{submission_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.status"
            - name: expected_date
              type: string
              mapping: "$.data.target_date"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: submissions
          path: "/objects/submission__c/{{submission_id}}"
          inputParameters:
            - name: submission_id
              in: path
          operations:
            - name: get-submission
              method: GET

Dispatches field service engineers for medical device repair at hospital sites.

naftiko: "0.5"
info:
  label: "Field Service Dispatch Orchestration"
  description: "Dispatches field service engineers for medical device repair at hospital sites."
  tags:
    - service
    - medical-device
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: field-service
      port: 8080
      tools:
        - name: dispatch
          description: "Given account and issue, create case, find engineer, dispatch, and notify. Use for device repair."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Account ID."
            - name: issue
              in: body
              type: string
              description: "Issue."
          steps:
            - name: case
              type: call
              call: salesforce.create-case
              with:
                account_id: "{{account_id}}"
                subject: "Repair: {{issue}}"
            - name: engineer
              type: call
              call: servicenow.find-available-resource
              with:
                skill: "medical_device_repair"
            - name: wo
              type: call
              call: servicenow.create-work-order
              with:
                case_ref: "{{case.case_number}}"
                assigned_to: "{{engineer.engineer_id}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "field-service"
                text: "Engineer {{engineer.engineer_name}} dispatched. Case: {{case.case_number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: resources
          path: "/table/cmn_schedule_span"
          operations:
            - name: find-available-resource
              method: GET
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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, posts a Datadog deployment event, and alerts the engineering Teams channel."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions failure event with repo, branch, commit SHA, workflow name, and run URL, create a Jira bug, post a Datadog deployment event, and alert the engineering Teams channel. Invoke on any protected-branch pipeline failure across Medtronic's product and platform repositories."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "GitHub repository in org/repo format."
            - name: branch
              in: body
              type: string
              description: "Branch name where the failure occurred."
            - name: commit_sha
              in: body
              type: string
              description: "Git commit SHA of the failing run."
            - name: run_url
              in: body
              type: string
              description: "Direct URL to the failing GitHub Actions run."
            - name: workflow_name
              in: body
              type: string
              description: "Name of the failing workflow."
          steps:
            - name: create-bug
              type: call
              call: "jira-eng.create-issue"
              with:
                project_key: "ENG"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}"
                description: "Branch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
            - name: post-datadog-event
              type: call
              call: "datadog-ci.create-event"
              with:
                title: "CI Failure: {{repository}}"
                text: "Workflow {{workflow_name}} failed on {{branch}} at {{commit_sha}}"
                alert_type: "error"
            - name: alert-engineering
              type: call
              call: "msteams-eng.post-channel-message"
              with:
                channel_id: "engineering-alerts"
                text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
  consumes:
    - type: http
      namespace: jira-eng
      baseUri: "https://medtronic.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: datadog-ci
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-eng
      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 GitHub repos for branch protection and security scanning.

naftiko: "0.5"
info:
  label: "GitHub Repository Compliance Check"
  description: "Checks GitHub repos for branch protection and security scanning."
  tags:
    - security
    - devops
    - github
capability:
  exposes:
    - type: mcp
      namespace: repo-compliance
      port: 8080
      tools:
        - name: check-compliance
          description: "Given repo name, return protection status. Use for governance."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "Repo name."
          call: github.get-repo-settings
          with:
            repo: "{{repo_name}}"
          outputParameters:
            - name: branch_protection
              type: boolean
              mapping: "$.data.branch_protection"
  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-settings
              method: GET

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

naftiko: "0.5"
info:
  label: "GitHub Security Vulnerability Triage"
  description: "Scans a GitHub repository for Dependabot alerts, creates Jira security tickets for critical and high severity vulnerabilities, and notifies the product security team via Teams."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: product-security
      port: 8080
      tools:
        - name: triage-repo-vulnerabilities
          description: "Given a GitHub repository, retrieve all open Dependabot security alerts at critical or high severity, create a Jira security ticket for each, and notify the product security Teams channel. Use for weekly vulnerability reviews on Medtronic's medical device software and embedded firmware repositories."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "GitHub repository in org/repo format to scan."
            - name: security_channel_id
              in: body
              type: string
              description: "Teams channel ID for the product security team."
          steps:
            - name: get-alerts
              type: call
              call: "github-security.get-dependabot-alerts"
              with:
                repo: "{{repository}}"
            - name: create-ticket
              type: call
              call: "jira-security.create-issue"
              with:
                project_key: "PSEC"
                issuetype: "Security"
                summary: "Dependabot vulnerabilities: {{repository}}"
                description: "Repository: {{repository}}\nTotal alerts: {{get-alerts.total_count}}\nCritical: {{get-alerts.critical_count}}"
            - name: notify-product-security
              type: call
              call: "msteams-psec.post-channel-message"
              with:
                channel_id: "{{security_channel_id}}"
                text: "Security Alert: {{get-alerts.total_count}} Dependabot vulnerabilities in {{repository}} ({{get-alerts.critical_count}} critical). Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: github-security
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{owner}/{repo}/dependabot/alerts"
          inputParameters:
            - name: owner
              in: path
            - name: repo
              in: path
          operations:
            - name: get-dependabot-alerts
              method: GET
    - type: http
      namespace: jira-security
      baseUri: "https://medtronic.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-psec
      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 GMP training compliance for Medtronic manufacturing departments.

naftiko: "0.5"
info:
  label: "GMP Training Compliance Check"
  description: "Checks GMP training compliance for Medtronic manufacturing departments."
  tags:
    - quality
    - compliance
    - workday
capability:
  exposes:
    - type: mcp
      namespace: training
      port: 8080
      tools:
        - name: check-gmp
          description: "Given department, return training completion rate. Use for compliance."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "Department."
          call: workday.get-training-compliance
          with:
            department: "{{department_code}}"
          outputParameters:
            - name: completion_rate
              type: number
              mapping: "$.data.completion_rate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: training
          path: "/training/compliance"
          operations:
            - name: get-training-compliance
              method: GET

Manages implantable device lot release by verifying QC, releasing batch, creating CoA, and notifying distribution.

naftiko: "0.5"
info:
  label: "Implant Device Lot Release Orchestration"
  description: "Manages implantable device lot release by verifying QC, releasing batch, creating CoA, and notifying distribution."
  tags:
    - quality
    - manufacturing
    - medical-device
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lot-release
      port: 8080
      tools:
        - name: release-lot
          description: "Given batch and product, verify QC, release, and notify. Use for device lot release."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "Batch."
            - name: product_code
              in: body
              type: string
              description: "Product."
          steps:
            - name: qc
              type: call
              call: sap-erp.get-inspection
              with:
                batch: "{{batch_number}}"
            - name: release
              type: call
              call: sap-erp.release-batch
              with:
                batch: "{{batch_number}}"
            - name: coa
              type: call
              call: servicenow.create-task
              with:
                short_description: "CoA: {{batch_number}} {{product_code}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "distribution"
                text: "Lot {{batch_number}} ({{product_code}}) released. CoA: {{coa.number}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspections
          path: "/A_InspectionResult"
          operations:
            - name: get-inspection
              method: GET
        - name: batches
          path: "/A_BatchRelease"
          operations:
            - name: release-batch
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers Informatica ETL jobs for Medtronic data integration.

naftiko: "0.5"
info:
  label: "Informatica Data Integration Job Trigger"
  description: "Triggers Informatica ETL jobs for Medtronic data integration."
  tags:
    - data
    - integration
    - informatica
capability:
  exposes:
    - type: mcp
      namespace: data-integration
      port: 8080
      tools:
        - name: trigger-job
          description: "Given task ID, trigger ETL job. Use for data integration."
          inputParameters:
            - name: task_id
              in: body
              type: string
              description: "Task ID."
          call: informatica.start-job
          with:
            taskId: "{{task_id}}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.runId"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://na1.dm-us.informaticacloud.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: jobs
          path: "/job"
          operations:
            - name: start-job
              method: POST

Creates bug reports in Jira for Medtronic engineering.

naftiko: "0.5"
info:
  label: "Jira Bug Report Creation"
  description: "Creates bug reports in Jira for Medtronic engineering."
  tags:
    - devops
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: issue-tracking
      port: 8080
      tools:
        - name: create-bug
          description: "Given project and summary, create bug. Use for defects."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Project."
            - name: summary
              in: body
              type: string
              description: "Summary."
          call: jira.create-issue
          with:
            project: "{{project_key}}"
            issuetype: "Bug"
            summary: "{{summary}}"
          outputParameters:
            - name: issue_key
              type: string
              mapping: "$.key"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://medtronic.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

Pulls the sprint status for the regulatory submissions Jira project and publishes a digest to the regulatory affairs Teams channel for weekly review.

naftiko: "0.5"
info:
  label: "Jira Regulatory Submission Sprint Digest"
  description: "Pulls the sprint status for the regulatory submissions Jira project and publishes a digest to the regulatory affairs Teams channel for weekly review."
  tags:
    - devops
    - jira
    - sprint
    - reporting
    - microsoft-teams
    - regulatory
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: digest-regulatory-sprint
          description: "Given a Jira board ID for the regulatory submissions project and an active sprint ID, retrieve all in-progress and blocked issues and post a digest to the regulatory affairs Teams channel. Use for weekly regulatory sprint reviews and FDA submission progress reporting."
          inputParameters:
            - name: board_id
              in: body
              type: integer
              description: "Jira board ID for the regulatory submissions project."
            - name: sprint_id
              in: body
              type: integer
              description: "Active sprint ID to generate the digest for."
            - name: reg_channel_id
              in: body
              type: string
              description: "Teams channel ID for the regulatory affairs team."
          steps:
            - name: get-sprint-issues
              type: call
              call: "jira-reg.get-sprint-issues"
              with:
                board_id: "{{board_id}}"
                sprint_id: "{{sprint_id}}"
            - name: post-digest
              type: call
              call: "msteams-reg.post-channel-message"
              with:
                channel_id: "{{reg_channel_id}}"
                text: "Regulatory Sprint Digest — Board {{board_id}} Sprint {{sprint_id}}: {{get-sprint-issues.in_progress_count}} in progress, {{get-sprint-issues.blocked_count}} blocked, {{get-sprint-issues.done_count}} done."
  consumes:
    - type: http
      namespace: jira-reg
      baseUri: "https://medtronic.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprint-issues
          path: "/board/{board_id}/sprint/{sprint_id}/issue"
          inputParameters:
            - name: board_id
              in: path
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint-issues
              method: GET
    - type: http
      namespace: msteams-reg
      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 employer brand metrics from LinkedIn.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Metrics"
  description: "Retrieves employer brand metrics from LinkedIn."
  tags:
    - hr
    - marketing
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: employer-brand
      port: 8080
      tools:
        - name: get-metrics
          description: "Return follower count. Use for brand tracking."
          inputParameters:
            - name: time_period
              in: body
              type: string
              description: "Period."
          call: linkedin.get-organization-stats
          with:
            period: "{{time_period}}"
          outputParameters:
            - name: followers
              type: integer
              mapping: "$.data.followerCount"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: stats
          path: "/organizationPageStatistics"
          operations:
            - name: get-organization-stats
              method: GET

Retrieves weekly LinkedIn company page and job posting engagement metrics for Medtronic and posts a talent brand digest to the HR marketing Teams channel.

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

Retrieves medical device manufacturing batch record from SAP.

naftiko: "0.5"
info:
  label: "Manufacturing Batch Record Status Check"
  description: "Retrieves medical device manufacturing batch record from SAP."
  tags:
    - manufacturing
    - quality
    - sap
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-batch
      port: 8080
      tools:
        - name: get-batch-status
          description: "Given batch number, return status and yield. Use for batch visibility."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "Batch number."
          call: sap-erp.get-batch-record
          with:
            batch_id: "{{batch_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.BatchStatus"
            - name: yield_percentage
              type: number
              mapping: "$.d.YieldPercent"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batch-records
          path: "/A_BatchRecord('{{batch_id}}')"
          inputParameters:
            - name: batch_id
              in: path
          operations:
            - name: get-batch-record
              method: GET

Handles manufacturing line downtime by creating incidents, alerting teams, and logging SAP downtime.

naftiko: "0.5"
info:
  label: "Manufacturing Line Downtime Response"
  description: "Handles manufacturing line downtime by creating incidents, alerting teams, and logging SAP downtime."
  tags:
    - manufacturing
    - it
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mfg-downtime
      port: 8080
      tools:
        - name: handle-downtime
          description: "Given line ID and failure, create incident, notify, and log. Use for line stoppages."
          inputParameters:
            - name: line_id
              in: body
              type: string
              description: "Line ID."
            - name: failure_reason
              in: body
              type: string
              description: "Failure."
          steps:
            - name: incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Line {{line_id}}: {{failure_reason}}"
                priority: "1"
            - name: alert
              type: call
              call: msteams.send-message
              with:
                channel_id: "manufacturing"
                text: "ALERT: Line {{line_id}} down. {{failure_reason}}. Incident: {{incident.number}}"
            - name: log
              type: call
              call: sap-erp.create-downtime-record
              with:
                work_center: "{{line_id}}"
                reason: "{{failure_reason}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.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.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_DOWNTIME_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: downtime
          path: "/A_DowntimeRecord"
          operations:
            - name: create-downtime-record
              method: POST

When a Datadog alert fires on a manufacturing or quality control system, creates a ServiceNow quality incident, assigns it to the quality engineering team, and notifies operations via Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Quality Incident Response"
  description: "When a Datadog alert fires on a manufacturing or quality control system, creates a ServiceNow quality incident, assigns it to the quality engineering team, and notifies operations via Teams."
  tags:
    - manufacturing
    - quality
    - datadog
    - servicenow
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: quality-ops
      port: 8080
      tools:
        - name: handle-quality-incident
          description: "Given a Datadog monitor alert for a manufacturing or quality control system, create a ServiceNow quality incident, assign it to the QE team, and post an alert to the operations Teams channel. Invoke when any OT/manufacturing system alert fires in Datadog for Medtronic production environments."
          inputParameters:
            - name: monitor_name
              in: body
              type: string
              description: "The Datadog monitor name that triggered the alert."
            - name: severity
              in: body
              type: string
              description: "Alert severity: critical or high."
            - name: manufacturing_line
              in: body
              type: string
              description: "Manufacturing line or quality control system identifier affected."
            - name: alert_url
              in: body
              type: string
              description: "Direct URL to the Datadog alert for investigation."
          steps:
            - name: create-quality-incident
              type: call
              call: "servicenow-quality.create-incident"
              with:
                short_description: "[{{severity}}] Manufacturing alert: {{monitor_name}} — Line {{manufacturing_line}}"
                category: "quality_incident"
                assigned_group: "Quality_Engineering"
                urgency: "1"
            - name: alert-ops-team
              type: call
              call: "msteams-manufacturing.post-channel-message"
              with:
                channel_id: "manufacturing-operations"
                text: "QUALITY INCIDENT {{create-quality-incident.number}}: {{monitor_name}} | Line: {{manufacturing_line}} | Severity: {{severity}} | Alert: {{alert_url}}"
  consumes:
    - type: http
      namespace: servicenow-quality
      baseUri: "https://medtronic.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-manufacturing
      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 marketing campaign performance from Marketo.

naftiko: "0.5"
info:
  label: "Marketo Campaign Performance Lookup"
  description: "Retrieves marketing campaign performance from Marketo."
  tags:
    - marketing
    - analytics
    - marketo
capability:
  exposes:
    - type: mcp
      namespace: campaigns
      port: 8080
      tools:
        - name: get-stats
          description: "Given campaign ID, return metrics. Use for campaign data."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "Campaign ID."
          call: marketo.get-campaign-stats
          with:
            id: "{{campaign_id}}"
          outputParameters:
            - name: sends
              type: integer
              mapping: "$.result.sends"
  consumes:
    - type: http
      namespace: marketo
      baseUri: "https://medtronic.mktorest.com/rest"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: campaigns
          path: "/v1/campaigns/{{id}}/stats.json"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-campaign-stats
              method: GET

Orchestrates UDI registration for Medtronic medical devices.

naftiko: "0.5"
info:
  label: "Medical Device UDI Registration Orchestration"
  description: "Orchestrates UDI registration for Medtronic medical devices."
  tags:
    - regulatory
    - manufacturing
    - sap
    - veeva-vault
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: udi-registration
      port: 8080
      tools:
        - name: register-udi
          description: "Given product code and description, create UDI, update SAP, and notify. Use for device UDI registration."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Product code."
            - name: device_description
              in: body
              type: string
              description: "Description."
          steps:
            - name: create-udi
              type: call
              call: veeva-vault.create-udi
              with:
                product_code: "{{product_code}}"
                description: "{{device_description}}"
            - name: update-sap
              type: call
              call: sap-erp.update-material
              with:
                material: "{{product_code}}"
                udi: "{{create-udi.udi_di}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "regulatory"
                text: "UDI registered: {{product_code}} - {{create-udi.udi_di}}"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: udi
          path: "/objects/udi__c"
          operations:
            - name: create-udi
              method: POST
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Material('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: update-material
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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

Assesses medical device launch readiness by checking regulatory, supply, and training.

naftiko: "0.5"
info:
  label: "New Product Launch Readiness Orchestration"
  description: "Assesses medical device launch readiness by checking regulatory, supply, and training."
  tags:
    - manufacturing
    - regulatory
    - sap
    - workday
    - veeva-vault
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: launch-readiness
      port: 8080
      tools:
        - name: assess-readiness
          description: "Given product code, check regulatory, supply, training, and report. Use for launch assessment."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Product."
          steps:
            - name: regulatory
              type: call
              call: veeva-vault.get-clearance-status
              with:
                product_code: "{{product_code}}"
            - name: supply
              type: call
              call: sap-erp.get-material-availability
              with:
                material: "{{product_code}}"
            - name: training
              type: call
              call: workday.get-training-status
              with:
                course: "launch-{{product_code}}"
            - name: report
              type: call
              call: msteams.send-message
              with:
                channel_id: "product-launches"
                text: "Launch readiness {{product_code}}: Regulatory: {{regulatory.status}}. Supply: {{supply.availability}}. Training: {{training.completion_rate}}%"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: clearance
          path: "/objects/clearance__c"
          operations:
            - name: get-clearance-status
              method: GET
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: availability
          path: "/A_MaterialAvailability('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-availability
              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: training
          path: "/training/compliance"
          operations:
            - name: get-training-status
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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

Retrieves Okta user status for Medtronic employees.

naftiko: "0.5"
info:
  label: "Okta User Status Check"
  description: "Retrieves Okta user status for Medtronic employees."
  tags:
    - security
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-status
          description: "Given email, return Okta status. Use for access verification."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: okta.get-user
          with:
            login: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://medtronic.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: get-user
              method: GET

Uses OpenAI to summarize clinical and regulatory documents.

naftiko: "0.5"
info:
  label: "OpenAI Clinical Document Summarization"
  description: "Uses OpenAI to summarize clinical and regulatory documents."
  tags:
    - clinical
    - ai
    - openai
capability:
  exposes:
    - type: mcp
      namespace: doc-summarization
      port: 8080
      tools:
        - name: summarize
          description: "Given document text, produce summary. Use for document overviews."
          inputParameters:
            - name: document_text
              in: body
              type: string
              description: "Text."
          call: openai.create-completion
          with:
            model: "gpt-4"
            prompt: "Summarize: {{document_text}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.choices[0].message.content"
  consumes:
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: create-completion
              method: POST

Retrieves current on-call engineer from PagerDuty.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Lookup"
  description: "Retrieves current on-call engineer from PagerDuty."
  tags:
    - it
    - observability
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: on-call
      port: 8080
      tools:
        - name: get-on-call
          description: "Given schedule ID, return on-call engineer. Use for escalation."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "Schedule ID."
          call: pagerduty.get-on-call
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: engineer
              type: string
              mapping: "$.oncalls[0].user.name"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: oncalls
          path: "/oncalls?schedule_ids[]={{schedule_id}}"
          inputParameters:
            - name: schedule_id
              in: query
          operations:
            - name: get-on-call
              method: GET

Retrieves firewall security policy rules from Palo Alto Networks Panorama for regulated network segments and posts a compliance summary to the IT security Teams channel.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Security Policy Audit"
  description: "Retrieves firewall security policy rules from Palo Alto Networks Panorama for regulated network segments and posts a compliance summary to the IT security Teams channel."
  tags:
    - security
    - network
    - palo-alto
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: audit-firewall-policies
          description: "Given a Palo Alto Networks Panorama device group, retrieve all active security policy rules and post a compliance summary to the IT security operations Teams channel. Use for quarterly HIPAA and SOX security control reviews and network access audits on clinical and manufacturing network segments."
          inputParameters:
            - name: device_group
              in: body
              type: string
              description: "Palo Alto Panorama device group to audit (e.g., clinical-network, manufacturing-ot, corporate)."
            - name: security_channel_id
              in: body
              type: string
              description: "Teams channel ID for the IT security operations team."
          steps:
            - name: get-policies
              type: call
              call: "paloalto.get-security-rules"
              with:
                device_group: "{{device_group}}"
            - name: post-audit-report
              type: call
              call: "msteams-netsec.post-channel-message"
              with:
                channel_id: "{{security_channel_id}}"
                text: "Firewall Policy Audit for device group {{device_group}}: {{get-policies.rule_count}} rules retrieved. Review for permissive or non-compliant rules per policy."
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.medtronic.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: security-rules
          path: "/Objects/SecurityRules"
          operations:
            - name: get-security-rules
              method: GET
    - type: http
      namespace: msteams-netsec
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates post-market surveillance reports for Medtronic medical devices.

naftiko: "0.5"
info:
  label: "Post-Market Surveillance Report Orchestration"
  description: "Generates post-market surveillance reports for Medtronic medical devices."
  tags:
    - regulatory
    - quality
    - safety
    - snowflake
    - veeva-vault
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pms
      port: 8080
      tools:
        - name: generate-pms
          description: "Given product and period, aggregate data and generate report. Use for PMS reports."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Product."
            - name: reporting_period
              in: body
              type: string
              description: "Period."
          steps:
            - name: complaints
              type: call
              call: snowflake.execute-query
              with:
                query_name: "pms_complaints"
                params: "{{product_code}},{{reporting_period}}"
            - name: adverse-events
              type: call
              call: snowflake.execute-query
              with:
                query_name: "pms_aes"
                params: "{{product_code}},{{reporting_period}}"
            - name: create-report
              type: call
              call: veeva-vault.create-document
              with:
                doc_type: "pms_report"
                product: "{{product_code}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "regulatory-safety"
                text: "PMS report: {{product_code}} ({{reporting_period}}). Complaints: {{complaints.total}}. AEs: {{adverse-events.total}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: documents
          path: "/objects/documents"
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Power BI dataset refresh for the commercial performance dashboard and notifies the commercial analytics team via Teams when complete.

naftiko: "0.5"
info:
  label: "Power BI Commercial Performance Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the commercial performance dashboard and notifies the commercial analytics team via Teams when complete."
  tags:
    - data
    - analytics
    - power-bi
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-commercial-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a refresh of the Medtronic commercial performance dataset and notify the analytics team in Teams. Use before quarterly business reviews, sales leadership meetings, and board reporting cycles."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Power BI workspace ID containing the commercial dashboard dataset."
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID to refresh."
            - name: notify_channel_id
              in: body
              type: string
              description: "Teams channel ID for the analytics team notification."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.trigger-refresh"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-team
              type: call
              call: "msteams-bi.post-channel-message"
              with:
                channel_id: "{{notify_channel_id}}"
                text: "Commercial performance dashboard refresh triggered for dataset {{dataset_id}}. Data will be available shortly."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-bi
      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 medical device product registration across international markets.

naftiko: "0.5"
info:
  label: "Product Registration Submission Orchestration"
  description: "Orchestrates medical device product registration across international markets."
  tags:
    - regulatory
    - quality
    - veeva-vault
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-registration
      port: 8080
      tools:
        - name: submit-registration
          description: "Given product and market, assemble docs, create submission, and notify. Use for device registration."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Product."
            - name: target_market
              in: body
              type: string
              description: "Market."
          steps:
            - name: gather
              type: call
              call: veeva-vault.query-documents
              with:
                product_code: "{{product_code}}"
            - name: submit
              type: call
              call: veeva-vault.create-submission
              with:
                product_code: "{{product_code}}"
                market: "{{target_market}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Registration: {{product_code}} for {{target_market}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "regulatory"
                text: "Registration: {{product_code}} for {{target_market}}. Task: {{task.number}}"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: documents
          path: "/query"
          operations:
            - name: query-documents
              method: POST
        - name: submissions
          path: "/objects/submission__c"
          operations:
            - name: create-submission
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves CAPA record from the Medtronic quality management system.

naftiko: "0.5"
info:
  label: "Quality CAPA Status Lookup"
  description: "Retrieves CAPA record from the Medtronic quality management system."
  tags:
    - quality
    - compliance
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: quality-capa
      port: 8080
      tools:
        - name: get-capa
          description: "Given CAPA number, return phase and due date. Use for CAPA tracking."
          inputParameters:
            - name: capa_number
              in: body
              type: string
              description: "CAPA number."
          call: servicenow.get-capa
          with:
            number: "{{capa_number}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.result.phase"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: capa
          path: "/table/u_capa?sysparm_query=number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-capa
              method: GET

Investigates quality deviations by pulling batch data, creating tasks, and notifying.

naftiko: "0.5"
info:
  label: "Quality Deviation Investigation Orchestration"
  description: "Investigates quality deviations by pulling batch data, creating tasks, and notifying."
  tags:
    - quality
    - manufacturing
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deviation-investigation
      port: 8080
      tools:
        - name: investigate
          description: "Given deviation number, pull data, create task, and notify. Use for deviation escalation."
          inputParameters:
            - name: deviation_number
              in: body
              type: string
              description: "Deviation number."
          steps:
            - name: get-dev
              type: call
              call: servicenow.get-deviation
              with:
                number: "{{deviation_number}}"
            - name: get-batch
              type: call
              call: sap-erp.get-batch-record
              with:
                batch_id: "{{get-dev.batch_number}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Investigate: {{deviation_number}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "quality"
                text: "Investigation: {{deviation_number}}. Batch: {{get-dev.batch_number}}. Task: {{task.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: deviations
          path: "/table/u_deviation"
          operations:
            - name: get-deviation
              method: GET
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/A_BatchRecord('{{batch_id}}')"
          inputParameters:
            - name: batch_id
              in: path
          operations:
            - name: get-batch-record
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Assembles QBR data across Medtronic divisions from SAP, Salesforce, Workday, and Snowflake.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Data Orchestration"
  description: "Assembles QBR data across Medtronic divisions from SAP, Salesforce, Workday, and Snowflake."
  tags:
    - finance
    - sales
    - hr
    - sap
    - salesforce
    - workday
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: qbr
      port: 8080
      tools:
        - name: assemble-qbr
          description: "Given division and quarter, pull data and generate report. Use for QBR prep."
          inputParameters:
            - name: division
              in: body
              type: string
              description: "Division."
            - name: quarter
              in: body
              type: string
              description: "Quarter."
          steps:
            - name: financials
              type: call
              call: sap-erp.get-pl-summary
              with:
                unit: "{{division}}"
                quarter: "{{quarter}}"
            - name: pipeline
              type: call
              call: salesforce.get-pipeline-summary
              with:
                unit: "{{division}}"
            - name: headcount
              type: call
              call: workday.get-headcount
              with:
                unit: "{{division}}"
            - name: report
              type: call
              call: snowflake.execute-query
              with:
                query_name: "qbr_report"
                params: "{{division}},{{quarter}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/FI_PL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pl
          path: "/A_PLSummary"
          operations:
            - name: get-pl-summary
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: pipeline
          path: "/analytics/reports/pipeline_summary"
          operations:
            - name: get-pipeline-summary
              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: headcount
          path: "/headcount"
          operations:
            - name: get-headcount
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Extracts division-level actuals and forecasts from SAP S/4HANA and triggers a Power BI dataset refresh for CFO and finance leadership review.

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

Manages medical device recall notifications by identifying affected lots, notifying hospitals, and creating tracking records.

naftiko: "0.5"
info:
  label: "Recall Management Notification Orchestration"
  description: "Manages medical device recall notifications by identifying affected lots, notifying hospitals, and creating tracking records."
  tags:
    - regulatory
    - quality
    - safety
    - sap
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: recall-management
      port: 8080
      tools:
        - name: initiate-recall
          description: "Given product code and recall reason, identify lots, notify customers, and create tracking. Use for device recalls."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Product."
            - name: recall_reason
              in: body
              type: string
              description: "Reason."
          steps:
            - name: get-lots
              type: call
              call: sap-erp.query-affected-lots
              with:
                material: "{{product_code}}"
            - name: create-recall-record
              type: call
              call: servicenow.create-task
              with:
                short_description: "Recall: {{product_code}} - {{recall_reason}}"
                category: "recall_management"
                priority: "1"
            - name: notify-customers
              type: call
              call: salesforce.create-campaign
              with:
                name: "Recall notification: {{product_code}}"
                type: "recall"
            - name: alert-team
              type: call
              call: msteams.send-message
              with:
                channel_id: "quality-safety"
                text: "RECALL: {{product_code}} - {{recall_reason}}. Lots: {{get-lots.count}}. Task: {{create-recall-record.number}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: lots
          path: "/A_Batch"
          operations:
            - name: query-affected-lots
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Prepares for FDA audits by gathering CAPAs, deviations, training data, and generating readiness reports.

naftiko: "0.5"
info:
  label: "Regulatory Audit Preparation Orchestration"
  description: "Prepares for FDA audits by gathering CAPAs, deviations, training data, and generating readiness reports."
  tags:
    - regulatory
    - quality
    - compliance
    - servicenow
    - workday
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: audit-prep
      port: 8080
      tools:
        - name: prepare-audit
          description: "Given audit type and facility, gather data and generate report. Use for audit preparation."
          inputParameters:
            - name: audit_type
              in: body
              type: string
              description: "Audit type."
            - name: facility_code
              in: body
              type: string
              description: "Facility."
          steps:
            - name: capas
              type: call
              call: servicenow.query-capas
              with:
                facility: "{{facility_code}}"
            - name: deviations
              type: call
              call: servicenow.query-deviations
              with:
                facility: "{{facility_code}}"
            - name: training
              type: call
              call: workday.get-training-status
              with:
                facility: "{{facility_code}}"
            - name: report
              type: call
              call: snowflake.execute-query
              with:
                query_name: "audit_readiness"
                params: "{{facility_code}},{{audit_type}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: capas
          path: "/table/u_capa"
          operations:
            - name: query-capas
              method: GET
        - name: deviations
          path: "/table/u_deviation"
          operations:
            - name: query-deviations
              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: training
          path: "/training/compliance"
          operations:
            - name: get-training-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Retrieves a Salesforce account for Medtronic hospital customers.

naftiko: "0.5"
info:
  label: "Salesforce Account Lookup"
  description: "Retrieves a Salesforce account for Medtronic hospital customers."
  tags:
    - sales
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-accounts
      port: 8080
      tools:
        - name: get-account
          description: "Given account ID, return name and revenue. Use for account details."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Account ID."
          call: salesforce.get-account
          with:
            id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://medtronic.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-account
              method: GET

Enriches a new Salesforce lead from a hospital or health system with facility size and specialty data, assigns it to the correct territory rep, and notifies them via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Medical Device Lead Enrichment"
  description: "Enriches a new Salesforce lead from a hospital or health system with facility size and specialty data, assigns it to the correct territory rep, and notifies them via Teams."
  tags:
    - crm
    - sales
    - salesforce
    - microsoft-teams
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: sales-ops
      port: 8080
      tools:
        - name: enrich-and-assign-lead
          description: "Given a Salesforce lead ID from a hospital, IDN, or surgeon contact, retrieve the lead details, update ownership to the correct territory rep, and notify them via Teams. Use when a new healthcare provider lead is created in Salesforce from a trade show, referral, or web form."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID to enrich and assign."
          steps:
            - name: get-lead
              type: call
              call: "salesforce-leads.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: update-lead
              type: call
              call: "salesforce-leads.update-lead"
              with:
                lead_id: "{{lead_id}}"
                status: "Working"
            - name: notify-rep
              type: call
              call: "msteams-sales.send-message"
              with:
                recipient_upn: "{{get-lead.owner_email}}"
                text: "New lead assigned: {{get-lead.company}} — {{get-lead.first_name}} {{get-lead.last_name}} ({{get-lead.title}}) | Product interest: {{get-lead.product_interest}} | Salesforce ID: {{lead_id}}"
  consumes:
    - type: http
      namespace: salesforce-leads
      baseUri: "https://medtronic.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{lead_id}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: get-lead
              method: GET
            - name: update-lead
              method: PATCH
    - type: http
      namespace: msteams-sales
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

When a Salesforce opportunity for a new device is marked Closed Won, creates a Jira epic for the clinical and regulatory team and notifies the clinical affairs Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity to Clinical Trial Coordination"
  description: "When a Salesforce opportunity for a new device is marked Closed Won, creates a Jira epic for the clinical and regulatory team and notifies the clinical affairs Teams channel."
  tags:
    - crm
    - sales
    - salesforce
    - jira
    - microsoft-teams
    - clinical-affairs
capability:
  exposes:
    - type: mcp
      namespace: clinical-coordination
      port: 8080
      tools:
        - name: sync-opportunity-to-clinical
          description: "Given a Salesforce opportunity ID at Closed Won stage, create a Jira epic for the clinical affairs team to coordinate next steps, and notify the clinical channel in Teams. Use when a hospital system or key account commits to a new Medtronic therapy or device platform."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID at Closed Won stage."
            - name: clinical_channel_id
              in: body
              type: string
              description: "Teams channel ID for the clinical affairs team."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce-opps.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-epic
              type: call
              call: "jira-clinical.create-issue"
              with:
                project_key: "CLIN"
                issuetype: "Epic"
                summary: "Clinical coordination: {{get-opportunity.account_name}} — {{get-opportunity.name}}"
                description: "Salesforce: {{opportunity_id}}\nAccount: {{get-opportunity.account_name}}\nDevice: {{get-opportunity.product_name}}\nContract Value: {{get-opportunity.amount}}"
            - name: notify-clinical-team
              type: call
              call: "msteams-clinical.post-channel-message"
              with:
                channel_id: "{{clinical_channel_id}}"
                text: "New account commitment: {{get-opportunity.account_name}} — {{get-opportunity.product_name}} (${{get-opportunity.amount}}). Clinical epic: {{create-epic.key}}"
  consumes:
    - type: http
      namespace: salesforce-opps
      baseUri: "https://medtronic.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{opportunity_id}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: jira-clinical
      baseUri: "https://medtronic.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-clinical
      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 SAP Ariba for supplier contracts expiring within a specified number of days and posts a prioritized renewal list to the procurement Teams channel.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Expiry Alert"
  description: "Queries SAP Ariba for supplier contracts expiring within a specified number of days and posts a prioritized renewal list to the procurement Teams channel."
  tags:
    - procurement
    - sap-ariba
    - contract-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: contract-renewals
      port: 8080
      tools:
        - name: alert-expiring-contracts
          description: "Query SAP Ariba for all supplier contracts expiring within a specified number of days and post a summary to the procurement Teams channel. Use for monthly contract renewal planning with direct material suppliers, CROs, and technology vendors."
          inputParameters:
            - name: days_until_expiry
              in: body
              type: integer
              description: "Number of days ahead to look for expiring contracts (e.g., 90)."
            - name: teams_channel_id
              in: body
              type: string
              description: "Procurement Teams channel ID to post the expiry alert to."
          steps:
            - name: get-expiring-contracts
              type: call
              call: "ariba-contracts.get-contracts"
              with:
                expiry_days: "{{days_until_expiry}}"
            - name: post-alert
              type: call
              call: "msteams-contracts.post-channel-message"
              with:
                channel_id: "{{teams_channel_id}}"
                text: "Contract Expiry Alert: {{get-expiring-contracts.count}} supplier contracts expire within {{days_until_expiry}} days. Please review and initiate renewals in SAP Ariba."
  consumes:
    - type: http
      namespace: ariba-contracts
      baseUri: "https://openapi.ariba.com/api/contract-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: contracts
          path: "/contracts"
          operations:
            - name: get-contracts
              method: GET
    - type: http
      namespace: msteams-contracts
      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 contract renewals for medical device component suppliers.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Renewal Orchestration"
  description: "Manages contract renewals for medical device component suppliers."
  tags:
    - procurement
    - sap-ariba
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: contract-renewal
      port: 8080
      tools:
        - name: process-renewal
          description: "Given contract ID, check terms, create task, and notify. Use for renewals."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "Contract ID."
          steps:
            - name: get-contract
              type: call
              call: ariba.get-contract
              with:
                id: "{{contract_id}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Renew: {{get-contract.title}}"
                due_date: "{{get-contract.expiry_date}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "procurement"
                text: "Contract {{contract_id}} expiring. Task: {{task.number}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/contract-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: contracts
          path: "/contracts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-contract
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Submits a procurement requisition for medical device components or raw materials in SAP Ariba and notifies the requester via Teams when submitted for approval.

naftiko: "0.5"
info:
  label: "SAP Ariba Medical Component Procurement Requisition"
  description: "Submits a procurement requisition for medical device components or raw materials in SAP Ariba and notifies the requester via Teams when submitted for approval."
  tags:
    - procurement
    - sap-ariba
    - supply-chain
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ariba-procurement
      port: 8080
      tools:
        - name: submit-component-requisition
          description: "Given a component description, cost center, quantity, and amount, create a procurement requisition in SAP Ariba for medical device components or manufacturing materials and notify the requester via Teams. Use for direct materials, clinical supplies, and R&D procurement requests."
          inputParameters:
            - name: item_description
              in: body
              type: string
              description: "Description of the medical component or material being requested."
            - name: cost_center
              in: body
              type: string
              description: "SAP cost center to charge the purchase against."
            - name: quantity
              in: body
              type: number
              description: "Quantity of units required."
            - name: estimated_amount
              in: body
              type: number
              description: "Estimated total cost in USD."
            - name: requester_upn
              in: body
              type: string
              description: "UPN of the employee submitting the requisition."
          steps:
            - name: create-requisition
              type: call
              call: "ariba.create-requisition"
              with:
                description: "{{item_description}}"
                cost_center: "{{cost_center}}"
                quantity: "{{quantity}}"
                estimated_amount: "{{estimated_amount}}"
                requester: "{{requester_upn}}"
            - name: notify-requester
              type: call
              call: "msteams-ariba.send-message"
              with:
                recipient_upn: "{{requester_upn}}"
                text: "Requisition submitted: {{create-requisition.requisition_id}} for {{item_description}} ({{quantity}} units, ${{estimated_amount}}). Pending approval in SAP Ariba."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-requisitions/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: msteams-ariba
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Creates sourcing events in SAP Ariba for Medtronic procurement.

naftiko: "0.5"
info:
  label: "SAP Ariba Sourcing Event Creation"
  description: "Creates sourcing events in SAP Ariba for Medtronic procurement."
  tags:
    - procurement
    - sap-ariba
capability:
  exposes:
    - type: mcp
      namespace: sourcing
      port: 8080
      tools:
        - name: create-event
          description: "Given category and description, create event. Use for bidding."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Category."
            - name: description
              in: body
              type: string
              description: "Description."
          call: ariba.create-event
          with:
            category: "{{category}}"
            description: "{{description}}"
          outputParameters:
            - name: event_id
              type: string
              mapping: "$.data.eventId"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/sourcing-projects/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

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

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

Retrieves travel requests from SAP Concur.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Request Lookup"
  description: "Retrieves travel requests from SAP Concur."
  tags:
    - finance
    - travel
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: travel
      port: 8080
      tools:
        - name: get-request
          description: "Given request ID, return destination and status. Use for travel."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "Request ID."
          call: concur.get-request
          with:
            id: "{{request_id}}"
          outputParameters:
            - name: destination
              type: string
              mapping: "$.MainDestination"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: requests
          path: "/travelrequest/requests/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-request
              method: GET

Retrieves budget vs actual for Medtronic cost centers.

naftiko: "0.5"
info:
  label: "SAP Cost Center Budget Lookup"
  description: "Retrieves budget vs actual for Medtronic cost centers."
  tags:
    - finance
    - erp
    - sap
capability:
  exposes:
    - type: mcp
      namespace: budget
      port: 8080
      tools:
        - name: get-budget
          description: "Given cost center and period, return budget data. Use for finance."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "Cost center."
            - name: fiscal_period
              in: body
              type: string
              description: "Period."
          call: sap-erp.get-budget
          with:
            cost_center: "{{cost_center}}"
            period: "{{fiscal_period}}"
          outputParameters:
            - name: planned
              type: number
              mapping: "$.d.PlannedAmount"
            - name: actual
              type: number
              mapping: "$.d.ActualAmount"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/FI_CO_BUDGET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: budgets
          path: "/A_CostCenterBudget(CostCenter='{{cost_center}}',Period='{{period}}')"
          inputParameters:
            - name: cost_center
              in: path
            - name: period
              in: path
          operations:
            - name: get-budget
              method: GET

Posts goods receipt in SAP for medical device components.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt Posting"
  description: "Posts goods receipt in SAP for medical device components."
  tags:
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: goods-receipt
      port: 8080
      tools:
        - name: post-gr
          description: "Given delivery number, post receipt. Use for material receipt."
          inputParameters:
            - name: delivery_number
              in: body
              type: string
              description: "Delivery number."
          call: sap-erp.post-gr
          with:
            delivery: "{{delivery_number}}"
          outputParameters:
            - name: material_document
              type: string
              mapping: "$.d.MaterialDocument"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_GR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: goods-receipts
          path: "/A_GoodsReceipt"
          operations:
            - name: post-gr
              method: POST

Queries SAP for medical device component inventory levels.

naftiko: "0.5"
info:
  label: "SAP Inventory Level Check"
  description: "Queries SAP for medical device component inventory levels."
  tags:
    - supply-chain
    - manufacturing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-inventory
          description: "Given material and plant, return stock. Use for inventory visibility."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "Material number."
            - name: plant_code
              in: body
              type: string
              description: "Plant code."
          call: sap-erp.get-material-stock
          with:
            material: "{{material_number}}"
            plant: "{{plant_code}}"
          outputParameters:
            - name: unrestricted_stock
              type: number
              mapping: "$.d.UnrestrictedStock"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-stock
          path: "/A_MaterialStock(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-material-stock
              method: GET

Creates preventive maintenance orders for medical device manufacturing equipment.

naftiko: "0.5"
info:
  label: "SAP Maintenance Order Creation"
  description: "Creates preventive maintenance orders for medical device manufacturing equipment."
  tags:
    - manufacturing
    - maintenance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: plant-maintenance
      port: 8080
      tools:
        - name: create-pm-order
          description: "Given equipment ID and type, create PM order. Use for equipment servicing."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "Equipment ID."
            - name: maintenance_type
              in: body
              type: string
              description: "Type."
          call: sap-erp.create-pm-order
          with:
            equipment: "{{equipment_id}}"
            order_type: "{{maintenance_type}}"
          outputParameters:
            - name: order_number
              type: string
              mapping: "$.d.MaintenanceOrder"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: create-pm-order
              method: POST

Retrieves material master data for medical device components.

naftiko: "0.5"
info:
  label: "SAP Material Master Lookup"
  description: "Retrieves material master data for medical device components."
  tags:
    - supply-chain
    - erp
    - sap
capability:
  exposes:
    - type: mcp
      namespace: material-master
      port: 8080
      tools:
        - name: get-material
          description: "Given material number, return description. Use for material details."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "Material number."
          call: sap-erp.get-material
          with:
            material: "{{material_number}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.d.MaterialDescription"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Material('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material
              method: GET

Retrieves medical device production order status from SAP.

naftiko: "0.5"
info:
  label: "SAP Production Order Status Lookup"
  description: "Retrieves medical device production order status from SAP."
  tags:
    - manufacturing
    - erp
    - sap
capability:
  exposes:
    - type: mcp
      namespace: production-orders
      port: 8080
      tools:
        - name: get-production-order
          description: "Given order number, return status and quantities. Use for production tracking."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "Order number."
          call: sap-erp.get-prod-order
          with:
            order: "{{order_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OrderStatus"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder('{{order}}')"
          inputParameters:
            - name: order
              in: path
          operations:
            - name: get-prod-order
              method: GET

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

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Retrieves a SAP purchase order by number and returns header status, vendor details, and total value for procurement and finance review."
  tags:
    - procurement
    - erp
    - sap
    - finance
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, return the PO status, vendor name, total value, and currency. Use for procurement approvals, component vendor invoice reconciliation, and accounts payable processing across Medtronic's global supply chain."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (e.g., 4500123456)."
          call: "sap-erp.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-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 quality inspection lot details for medical device components.

naftiko: "0.5"
info:
  label: "SAP Quality Inspection Lot Lookup"
  description: "Retrieves quality inspection lot details for medical device components."
  tags:
    - quality
    - manufacturing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: quality-inspection
      port: 8080
      tools:
        - name: get-lot
          description: "Given lot number, return inspection status. Use for QC review."
          inputParameters:
            - name: inspection_lot
              in: body
              type: string
              description: "Lot number."
          call: sap-erp.get-inspection
          with:
            lot: "{{inspection_lot}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.InspectionLotStatus"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: lots
          path: "/A_InspectionLot('{{lot}}')"
          inputParameters:
            - name: lot
              in: path
          operations:
            - name: get-inspection
              method: GET

Queries SAP for vendor payment status.

naftiko: "0.5"
info:
  label: "SAP Vendor Payment Status Lookup"
  description: "Queries SAP for vendor payment status."
  tags:
    - finance
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: get-payment
          description: "Given invoice, return payment status. Use for AP verification."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "Invoice number."
          call: sap-erp.get-invoice-payment
          with:
            invoice: "{{invoice_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.PaymentStatus"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/FI_AP_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_Invoice('{{invoice}}')/payments"
          inputParameters:
            - name: invoice
              in: path
          operations:
            - name: get-invoice-payment
              method: GET

Creates security incident, isolates endpoint, and notifies SOC.

naftiko: "0.5"
info:
  label: "Security Incident Response Orchestration"
  description: "Creates security incident, isolates endpoint, and notifies SOC."
  tags:
    - security
    - it
    - crowdstrike
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-response
      port: 8080
      tools:
        - name: respond
          description: "Given detection ID and hostname, create incident, isolate, and notify. Use for security threats."
          inputParameters:
            - name: detection_id
              in: body
              type: string
              description: "Detection ID."
            - name: hostname
              in: body
              type: string
              description: "Hostname."
          steps:
            - name: incident
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Security: {{hostname}}"
                category: "security"
                priority: "1"
            - name: isolate
              type: call
              call: crowdstrike.contain-host
              with:
                hostname: "{{hostname}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "soc"
                text: "CRITICAL: {{incident.number}} - {{hostname}} isolated."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.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: crowdstrike
      baseUri: "https://api.crowdstrike.com"
      authentication:
        type: bearer
        token: "$secrets.crowdstrike_token"
      resources:
        - name: hosts
          path: "/devices/entities/host-actions/v2"
          operations:
            - name: contain-host
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves ServiceNow incident status and assignment.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves ServiceNow incident status and assignment."
  tags:
    - it
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-incidents
      port: 8080
      tools:
        - name: get-incident
          description: "Given incident number, return state and priority. Use for ticket tracking."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: servicenow.get-incident
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET

Submits an IT change request in ServiceNow for regulated system changes, assigns it to the CAB, and notifies approvers via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow IT Change Management Submission"
  description: "Submits an IT change request in ServiceNow for regulated system changes, assigns it to the CAB, and notifies approvers via Teams."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - gxp
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: submit-regulated-change
          description: "Given a change title, description, risk level, and implementation window, create a ServiceNow change request for a GxP or regulated system change and notify the Change Advisory Board in Teams. Use for changes to ERP, clinical data, manufacturing execution, and quality management systems."
          inputParameters:
            - name: change_title
              in: body
              type: string
              description: "Short title describing the regulated system change."
            - name: change_description
              in: body
              type: string
              description: "Full description including rationale, test evidence, and rollback plan."
            - name: risk_level
              in: body
              type: string
              description: "Change risk level: low, medium, or high."
            - name: regulated_system
              in: body
              type: string
              description: "Name of the regulated system being changed (e.g., SAP ERP, MES, LIMS)."
            - name: implementation_window
              in: body
              type: string
              description: "Planned implementation date and window in ISO 8601 format."
          steps:
            - name: create-change
              type: call
              call: "servicenow-changes.create-change"
              with:
                short_description: "{{change_title}}"
                description: "System: {{regulated_system}}\n{{change_description}}"
                risk: "{{risk_level}}"
                start_date: "{{implementation_window}}"
            - name: notify-cab
              type: call
              call: "msteams-cab.post-channel-message"
              with:
                channel_id: "change-advisory-board"
                text: "New regulated change request: {{create-change.number}} — {{change_title}} | System: {{regulated_system}} | Risk: {{risk_level}} | Window: {{implementation_window}}"
  consumes:
    - type: http
      namespace: servicenow-changes
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-cab
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Searches Medtronic SharePoint document libraries.

naftiko: "0.5"
info:
  label: "SharePoint Document Search"
  description: "Searches Medtronic SharePoint document libraries."
  tags:
    - documentation
    - collaboration
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: doc-search
      port: 8080
      tools:
        - name: search
          description: "Given query, return matching documents. Use for search."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Keywords."
          call: sharepoint.search
          with:
            querytext: "{{query}}"
          outputParameters:
            - name: count
              type: integer
              mapping: "$.PrimaryQueryResult.RelevantResults.TotalRows"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://medtronic.sharepoint.com/_api"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: search
          path: "/search/query?querytext='{{querytext}}'"
          inputParameters:
            - name: querytext
              in: query
          operations:
            - name: search
              method: GET

Monitors scheduled Snowflake tasks for clinical trial and patient data pipelines and creates a ServiceNow incident if any critical tasks fail.

naftiko: "0.5"
info:
  label: "Snowflake Clinical Data Pipeline Monitor"
  description: "Monitors scheduled Snowflake tasks for clinical trial and patient data pipelines and creates a ServiceNow incident if any critical tasks fail."
  tags:
    - data
    - analytics
    - snowflake
    - servicenow
    - clinical
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: clinical-data-ops
      port: 8080
      tools:
        - name: monitor-clinical-pipeline
          description: "Given a Snowflake database and schema for clinical data pipelines, check for failed or overdue tasks and create a ServiceNow incident automatically. Use for daily monitoring of clinical trial data feeds, post-market surveillance pipelines, and patient outcomes reporting."
          inputParameters:
            - name: snowflake_database
              in: body
              type: string
              description: "The Snowflake database containing clinical data pipeline tasks."
            - name: snowflake_schema
              in: body
              type: string
              description: "The Snowflake schema containing the pipeline tasks to check."
          steps:
            - name: get-task-status
              type: call
              call: "snowflake.get-task-history"
              with:
                database: "{{snowflake_database}}"
                schema: "{{snowflake_schema}}"
            - name: create-incident
              type: call
              call: "servicenow-data.create-incident"
              with:
                short_description: "Clinical data pipeline failure: {{snowflake_database}}.{{snowflake_schema}}"
                category: "data_pipeline"
                urgency: "1"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: task-history
          path: "/databases/{database}/schemas/{schema}/tasks"
          inputParameters:
            - name: database
              in: path
            - name: schema
              in: path
          operations:
            - name: get-task-history
              method: GET
    - type: http
      namespace: servicenow-data
      baseUri: "https://medtronic.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

Monitors device stability studies by checking timepoint results and notifying teams.

naftiko: "0.5"
info:
  label: "Stability Study Monitoring Orchestration"
  description: "Monitors device stability studies by checking timepoint results and notifying teams."
  tags:
    - quality
    - rd
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: stability
      port: 8080
      tools:
        - name: check-stability
          description: "Given protocol and timepoint, check results and notify. Use for stability reviews."
          inputParameters:
            - name: protocol_id
              in: body
              type: string
              description: "Protocol."
            - name: timepoint
              in: body
              type: string
              description: "Timepoint months."
          steps:
            - name: results
              type: call
              call: snowflake.execute-query
              with:
                query_name: "stability_results"
                params: "{{protocol_id}},{{timepoint}}"
            - name: trends
              type: call
              call: snowflake.execute-query
              with:
                query_name: "stability_trends"
                params: "{{protocol_id}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "stability"
                text: "Stability {{protocol_id}} T={{timepoint}}mo: Pass: {{results.all_pass}}. Trend: {{trends.trend_flag}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates supplier quality scorecards for medical device component suppliers.

naftiko: "0.5"
info:
  label: "Supplier Quality Scorecard Generation"
  description: "Generates supplier quality scorecards for medical device component suppliers."
  tags:
    - quality
    - procurement
    - sap
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: supplier-quality
      port: 8080
      tools:
        - name: generate-scorecard
          description: "Given supplier ID, gather quality data and score. Use for supplier evaluation."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "Vendor number."
          steps:
            - name: rejections
              type: call
              call: sap-erp.get-supplier-rejections
              with:
                vendor_id: "{{supplier_id}}"
            - name: audits
              type: call
              call: servicenow.query-supplier-audits
              with:
                supplier_id: "{{supplier_id}}"
            - name: score
              type: call
              call: snowflake.execute-query
              with:
                query_name: "supplier_scorecard"
                params: "{{supplier_id}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_VENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: rejections
          path: "/A_VendorRejection(Vendor='{{vendor_id}}')"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-supplier-rejections
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: audits
          path: "/table/u_supplier_audit"
          operations:
            - name: query-supplier-audits
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Responds to supply chain disruptions for medical device components.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Response Orchestration"
  description: "Responds to supply chain disruptions for medical device components."
  tags:
    - supply-chain
    - procurement
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-disruption
      port: 8080
      tools:
        - name: respond
          description: "Given supplier and disruption type, identify POs, create tasks, and notify. Use for disruptions."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "Vendor number."
            - name: disruption_type
              in: body
              type: string
              description: "Type."
          steps:
            - name: pos
              type: call
              call: sap-erp.query-open-pos
              with:
                vendor_id: "{{supplier_id}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Alt sourcing: {{disruption_type}} {{supplier_id}}"
                priority: "1"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "supply-chain"
                text: "DISRUPTION: {{supplier_id}}. POs: {{pos.count}}. Task: {{task.number}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-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: pos
          path: "/A_PurchaseOrder"
          operations:
            - name: query-open-pos
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates software release for Medtronic Hugo surgical robot by validating, creating regulatory tasks, and notifying engineering.

naftiko: "0.5"
info:
  label: "Surgical Robot Software Release Orchestration"
  description: "Orchestrates software release for Medtronic Hugo surgical robot by validating, creating regulatory tasks, and notifying engineering."
  tags:
    - rd
    - regulatory
    - medical-device
    - github
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: robot-software
      port: 8080
      tools:
        - name: release-software
          description: "Given version and branch, validate, create regulatory task, and notify. Use for Hugo robot software."
          inputParameters:
            - name: software_version
              in: body
              type: string
              description: "Version."
            - name: release_branch
              in: body
              type: string
              description: "Branch."
          steps:
            - name: validate
              type: call
              call: github.create-workflow-dispatch
              with:
                repo: "medtronic/hugo-software"
                workflow: "validation.yml"
                ref: "{{release_branch}}"
            - name: regulatory
              type: call
              call: servicenow.create-task
              with:
                short_description: "Regulatory: Hugo software {{software_version}}"
                category: "regulatory_review"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "hugo-engineering"
                text: "Hugo software {{software_version}} release initiated. Regulatory: {{regulatory.number}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/{{repo}}/actions/workflows/{{workflow}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow
              in: path
          operations:
            - name: create-workflow-dispatch
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers Tableau quality dashboard refresh.

naftiko: "0.5"
info:
  label: "Tableau Quality Dashboard Refresh"
  description: "Triggers Tableau quality dashboard refresh."
  tags:
    - quality
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: quality-analytics
      port: 8080
      tools:
        - name: refresh
          description: "Given workbook, trigger refresh. Use for quality metrics."
          inputParameters:
            - name: workbook_name
              in: body
              type: string
              description: "Workbook."
          call: tableau.trigger-refresh
          with:
            workbook: "{{workbook_name}}"
          outputParameters:
            - name: job_id
              type: string
              mapping: "$.job.id"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://medtronic.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/{{site_id}}/workbooks/{{workbook}}/refresh"
          inputParameters:
            - name: workbook
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Triggers a Terraform Cloud workspace run to provision new clinical or R&D cloud infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams.

naftiko: "0.5"
info:
  label: "Terraform Cloud Infrastructure Provisioning"
  description: "Triggers a Terraform Cloud workspace run to provision new clinical or R&D cloud infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams."
  tags:
    - cloud
    - infrastructure
    - terraform
    - servicenow
    - microsoft-teams
    - provisioning
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: provision-cloud-infrastructure
          description: "Given a Terraform Cloud workspace ID, environment, and workload type, trigger a Terraform run, create a ServiceNow change record, and notify the infrastructure team. Use when provisioning new environments for R&D, clinical trials, or commercial system expansions."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Terraform Cloud workspace ID for the infrastructure configuration."
            - name: environment
              in: body
              type: string
              description: "Target environment: dev, staging, or production."
            - name: workload_type
              in: body
              type: string
              description: "Workload type being provisioned (e.g., clinical-data, rd-compute, commercial-crm)."
          steps:
            - name: trigger-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "Provisioning {{workload_type}} infrastructure in {{environment}}"
            - name: create-change
              type: call
              call: "servicenow-infra.create-change"
              with:
                short_description: "Infrastructure provisioning: {{workload_type}} — {{environment}}"
                category: "cloud_provisioning"
            - name: notify-infra
              type: call
              call: "msteams-infra.post-channel-message"
              with:
                channel_id: "infrastructure-deployments"
                text: "Terraform run triggered for {{workload_type}} ({{environment}}). Change: {{create-change.number}}. Run: {{trigger-run.run_id}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: servicenow-infra
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-infra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{team_id}/channels/{channel_id}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Provisions cloud environments for Medtronic engineering with Terraform.

naftiko: "0.5"
info:
  label: "Terraform Environment Provisioning Orchestration"
  description: "Provisions cloud environments for Medtronic engineering with Terraform."
  tags:
    - devops
    - cloud
    - terraform
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: env-provisioning
      port: 8080
      tools:
        - name: provision
          description: "Given name and workspace, provision, monitor, and notify. Use for new environments."
          inputParameters:
            - name: environment_name
              in: body
              type: string
              description: "Name."
            - name: workspace_id
              in: body
              type: string
              description: "Workspace."
          steps:
            - name: terraform
              type: call
              call: terraform.create-run
              with:
                workspace_id: "{{workspace_id}}"
            - name: monitor
              type: call
              call: datadog.create-monitor
              with:
                name: "{{environment_name}}"
            - name: cmdb
              type: call
              call: servicenow.create-ci
              with:
                name: "{{environment_name}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "devops"
                text: "Env {{environment_name}} started."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/workspaces/{{workspace_id}}/runs"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: create-run
              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: monitors
          path: "/monitor"
          operations:
            - name: create-monitor
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: create-ci
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves regulatory documents from Veeva Vault for Medtronic devices.

naftiko: "0.5"
info:
  label: "Veeva Vault Document Retrieval"
  description: "Retrieves regulatory documents from Veeva Vault for Medtronic devices."
  tags:
    - regulatory
    - quality
    - veeva-vault
capability:
  exposes:
    - type: mcp
      namespace: vault-docs
      port: 8080
      tools:
        - name: get-document
          description: "Given document number, return metadata. Use for document retrieval."
          inputParameters:
            - name: document_number
              in: body
              type: string
              description: "Document number."
          call: veeva-vault.get-document
          with:
            doc_number: "{{document_number}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.data.name__v"
  consumes:
    - type: http
      namespace: veeva-vault
      baseUri: "https://medtronic-regulatory.veevavault.com/api/v24.1"
      authentication:
        type: bearer
        token: "$secrets.veeva_vault_token"
      resources:
        - name: documents
          path: "/objects/documents/{{doc_number}}"
          inputParameters:
            - name: doc_number
              in: path
          operations:
            - name: get-document
              method: GET

Retrieves a vendor invoice in SAP S/4HANA, validates it against the corresponding PO, and triggers the payment approval workflow.

naftiko: "0.5"
info:
  label: "Vendor Invoice Three-Way Match and Payment Approval"
  description: "Retrieves a vendor invoice in SAP S/4HANA, validates it against the corresponding PO, and triggers the payment approval workflow."
  tags:
    - finance
    - erp
    - sap
    - accounts-payable
    - invoice
capability:
  exposes:
    - type: mcp
      namespace: accounts-payable
      port: 8080
      tools:
        - name: process-vendor-invoice
          description: "Given a vendor invoice number and PO number, retrieve the invoice from SAP, validate the amount against the PO total, and trigger the payment approval workflow. Use for accounts payable processing and three-way invoice matching for medical device component suppliers."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "Vendor invoice number to process."
            - name: po_number
              in: body
              type: string
              description: "SAP purchase order number for three-way match validation."
          steps:
            - name: get-invoice
              type: call
              call: "sap-fi.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: get-po
              type: call
              call: "sap-mm.get-po"
              with:
                po_number: "{{po_number}}"
            - name: approve-invoice
              type: call
              call: "sap-fi.approve-invoice"
              with:
                invoice_id: "{{get-invoice.invoice_id}}"
  consumes:
    - type: http
      namespace: sap-fi
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice('{invoice_number}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
            - name: approve-invoice
              method: POST
    - type: http
      namespace: sap-mm
      baseUri: "https://medtronic-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

Assesses vendor risk for medical device component suppliers.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Orchestration"
  description: "Assesses vendor risk for medical device component suppliers."
  tags:
    - procurement
    - compliance
    - sap
    - servicenow
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: vendor-risk
      port: 8080
      tools:
        - name: assess-risk
          description: "Given vendor ID, collect data and score. Use for vendor evaluation."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor."
          steps:
            - name: financials
              type: call
              call: sap-erp.get-vendor-master
              with:
                vendor_id: "{{vendor_id}}"
            - name: compliance
              type: call
              call: servicenow.query-vendor-compliance
              with:
                vendor_id: "{{vendor_id}}"
            - name: score
              type: call
              call: snowflake.execute-query
              with:
                query_name: "vendor_risk"
                params: "{{vendor_id}}"
  consumes:
    - type: http
      namespace: sap-erp
      baseUri: "https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_VENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/A_Vendor('{{vendor_id}}')"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-master
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: compliance
          path: "/table/u_vendor_compliance"
          operations:
            - name: query-vendor-compliance
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://medtronic.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Retrieves employee benefits enrollment status.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Status"
  description: "Retrieves employee benefits enrollment status."
  tags:
    - hr
    - benefits
    - workday
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: get-benefits
          description: "Given worker ID, return benefits elections. Use for benefits info."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Worker ID."
          call: workday.get-benefits
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: medical_plan
              type: string
              mapping: "$.data.medical_plan"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/workers/{{worker_id}}/benefits"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-benefits
              method: GET

Launches comp review cycle across Medtronic divisions.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Orchestration"
  description: "Launches comp review cycle across Medtronic divisions."
  tags:
    - hr
    - finance
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: comp-review
      port: 8080
      tools:
        - name: launch-comp-review
          description: "Given department and cycle, pull data, generate recs, and notify. Use for comp reviews."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "Department."
            - name: cycle_name
              in: body
              type: string
              description: "Cycle."
          steps:
            - name: performance
              type: call
              call: workday.get-performance-ratings
              with:
                department: "{{department_code}}"
            - name: recs
              type: call
              call: workday.create-comp-recommendations
              with:
                department: "{{department_code}}"
                cycle: "{{cycle_name}}"
            - name: task
              type: call
              call: servicenow.create-task
              with:
                short_description: "Comp review: {{department_code}}"
            - name: notify
              type: call
              call: msteams.send-message
              with:
                channel_id: "hr-comp"
                text: "Comp '{{cycle_name}}' for {{department_code}}. Task: {{task.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: performance
          path: "/performance/ratings"
          operations:
            - name: get-performance-ratings
              method: GET
        - name: compensation
          path: "/compensation/recommendations"
          operations:
            - name: create-comp-recommendations
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://medtronic.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msteams_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves employee profile from Workday by worker ID.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves employee profile from Workday by worker ID."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-profile
      port: 8080
      tools:
        - name: get-profile
          description: "Given worker ID, return name and department. Use for employee details."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Worker ID."
          call: workday.get-worker
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.data.full_name"
            - name: department
              type: string
              mapping: "$.data.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: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Returns current headcount by Medtronic division, job family, and region from Workday for use in workforce planning and finance reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot by Division"
  description: "Returns current headcount by Medtronic division, job family, and region from Workday for use in workforce planning and finance reporting."
  tags:
    - hr
    - finance
    - workday
    - headcount
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: workforce-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns a breakdown of Medtronic employees by division, job family, and region from Workday. Use for quarterly workforce planning, FDA staffing compliance, and executive headcount reporting."
          inputParameters:
            - name: division
              in: body
              type: string
              description: "Optional Medtronic division to filter results. Leave blank for global headcount."
          call: "workday-hc.headcount-export"
          with:
            division: "{{division}}"
          outputParameters:
            - name: total_headcount
              type: number
              mapping: "$.total"
            - name: by_division
              type: array
              mapping: "$.divisions"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/medtronic/workers/export"
          operations:
            - name: headcount-export
              method: GET

Retrieves open job requisitions from Workday.

naftiko: "0.5"
info:
  label: "Workday Open Requisition Report"
  description: "Retrieves open job requisitions from Workday."
  tags:
    - hr
    - recruiting
    - workday
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: get-reqs
          description: "Given department, return open req count. Use for recruiting."
          inputParameters:
            - name: department_code
              in: body
              type: string
              description: "Department."
          call: workday.get-requisitions
          with:
            department: "{{department_code}}"
          outputParameters:
            - name: count
              type: integer
              mapping: "$.data.total"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/requisitions"
          operations:
            - name: get-requisitions
              method: GET

Creates a new job requisition in Workday for an approved headcount, assigns it to a recruiter, and notifies the hiring manager via Teams.

naftiko: "0.5"
info:
  label: "Workday Recruiting Requisition Assignment"
  description: "Creates a new job requisition in Workday for an approved headcount, assigns it to a recruiter, and notifies the hiring manager via Teams."
  tags:
    - hr
    - recruiting
    - workday
    - microsoft-teams
    - talent-acquisition
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: open-job-requisition
          description: "Given a job title, division, job family, and hiring manager UPN, create a new requisition in Workday and notify the hiring manager via Teams. Use when headcount is approved for clinical, engineering, or commercial roles across Medtronic's global divisions."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "Title of the role to be hired."
            - name: division
              in: body
              type: string
              description: "Medtronic division the role belongs to."
            - name: job_family
              in: body
              type: string
              description: "Medtronic job family classification."
            - name: hiring_manager_upn
              in: body
              type: string
              description: "UPN of the hiring manager."
          steps:
            - name: create-req
              type: call
              call: "workday-talent.create-requisition"
              with:
                job_title: "{{job_title}}"
                division: "{{division}}"
                job_family: "{{job_family}}"
                hiring_manager: "{{hiring_manager_upn}}"
            - name: notify-hiring-manager
              type: call
              call: "msteams-recruiting.send-message"
              with:
                recipient_upn: "{{hiring_manager_upn}}"
                text: "Job requisition opened: {{job_title}} in {{division}} ({{job_family}}). Req ID: {{create-req.requisition_id}}. Talent acquisition will be in touch shortly."
  consumes:
    - type: http
      namespace: workday-talent
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/medtronic/jobRequisitions"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: msteams-recruiting
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{upn}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Submits a time-off request in Workday and notifies the employee's manager via Teams for approval.

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