Medtronic Capabilities
Naftiko 0.5 capability definitions for Medtronic - 100 capabilities showing integration workflows and service orchestrations.
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