Lenovo Capabilities
Naftiko 0.5 capability definitions for Lenovo - 100 capabilities showing integration workflows and service orchestrations.
Optimizes accessory attachment rates by analyzing attach data from Shopify, running recommendations in Snowflake, updating product bundles, and notifying e-commerce teams.
naftiko: "0.5"
info:
label: "Accessory Attachment Rate Optimization Pipeline"
description: "Optimizes accessory attachment rates by analyzing attach data from Shopify, running recommendations in Snowflake, updating product bundles, and notifying e-commerce teams."
tags:
- e-commerce
- accessories
- shopify
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: accessory-ops
port: 8080
tools:
- name: accessory-attachment-rate-optimization
description: "Optimizes accessory attachment rates."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Accessory Attachment Rate Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves the status of firmware and software build pipelines from Azure DevOps.
naftiko: "0.5"
info:
label: "Azure DevOps Build Pipeline Status"
description: "Retrieves the status of firmware and software build pipelines from Azure DevOps."
tags:
- ci-cd
- azure-devops
capability:
exposes:
- type: mcp
namespace: ci-cd
port: 8080
tools:
- name: azure_devops_build_pipeline_status
description: "Retrieves the status of firmware and software build pipelines from Azure DevOps.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "azure-devops.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azure-devops
baseUri: "https://lenovo-azure-devops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
When a Salesforce opportunity is created by a channel partner, enriches the record with HubSpot partner data, creates a Jira task for deal desk review, and notifies the channel manager in Slack.
naftiko: "0.5"
info:
label: "Channel Partner Deal Registration"
description: "When a Salesforce opportunity is created by a channel partner, enriches the record with HubSpot partner data, creates a Jira task for deal desk review, and notifies the channel manager in Slack."
tags:
- channel-management
- sales
- salesforce
- hubspot
- jira
- slack
capability:
exposes:
- type: mcp
namespace: channel-deals
port: 8080
tools:
- name: register-partner-deal
description: "Given a Salesforce opportunity ID and partner email, enrich the opportunity with partner data, create a deal desk review task, and notify the channel manager."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
- name: partner_email
in: body
type: string
description: "The email address of the registering partner contact."
- name: channel_manager_channel
in: body
type: string
description: "Slack channel ID for channel management team."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: get-partner
type: call
call: "hubspot.get-contact"
with:
contact_email: "{{partner_email}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project: "DEALS"
summary: "Deal desk review: {{get-opportunity.account_name}} — ${{get-opportunity.amount}}"
description: "Partner: {{get-partner.company}} ({{partner_email}}). Opportunity: {{opportunity_id}}. Stage: {{get-opportunity.stage}}. Amount: ${{get-opportunity.amount}}. Close date: {{get-opportunity.close_date}}."
issue_type: "Task"
priority: "High"
- name: notify-channel-manager
type: call
call: "slack.post-message"
with:
channel: "{{channel_manager_channel}}"
text: "New Deal Registration: {{get-opportunity.account_name}} | Partner: {{get-partner.company}} | Amount: ${{get-opportunity.amount}} | Review: {{create-review-task.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.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: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_email}}?idProperty=email"
inputParameters:
- name: contact_email
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: jira
baseUri: "https://lenovo-eng.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Enables channel partners by creating training assignments in the LMS, distributing marketing materials via SharePoint, updating certifications in Salesforce, and notifying partner managers.
naftiko: "0.5"
info:
label: "Channel Partner Enablement Orchestrator"
description: "Enables channel partners by creating training assignments in the LMS, distributing marketing materials via SharePoint, updating certifications in Salesforce, and notifying partner managers."
tags:
- channel
- enablement
- salesforce
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: channel-ops
port: 8080
tools:
- name: channel-partner-enablement
description: "Enables channel partners."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Channel Partner Enablement Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves quarterly quota targets from Salesforce for a partner account, looks up partner performance in HubSpot deals, and posts a performance summary to the channel management Slack channel.
naftiko: "0.5"
info:
label: "Channel Partner Quota Sync"
description: "Retrieves quarterly quota targets from Salesforce for a partner account, looks up partner performance in HubSpot deals, and posts a performance summary to the channel management Slack channel."
tags:
- channel-management
- sales
- salesforce
- hubspot
- slack
capability:
exposes:
- type: mcp
namespace: channel-quota
port: 8080
tools:
- name: sync-partner-quota
description: "Given a Salesforce partner account ID, retrieve quota data, pull HubSpot deal totals, and post a performance summary."
inputParameters:
- name: partner_account_id
in: body
type: string
description: "The Salesforce partner account ID."
- name: quarter
in: body
type: string
description: "The fiscal quarter (e.g., Q1-FY26)."
- name: channel_mgmt_channel
in: body
type: string
description: "Slack channel ID for channel management."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{partner_account_id}}"
- name: get-partner-deals
type: call
call: "hubspot.search-deals"
with:
filter_property: "partner_account"
filter_value: "{{get-account.Name}}"
- name: post-summary
type: call
call: "slack.post-message"
with:
channel: "{{channel_mgmt_channel}}"
text: "Partner Quota Report ({{quarter}}): {{get-account.Name}} | Quota: ${{get-account.quota_target}} | Closed Won: ${{get-partner-deals.total_amount}} | Pipeline: ${{get-partner-deals.pipeline_amount}} | Attainment: {{get-partner-deals.attainment_pct}}%"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals/search"
operations:
- name: search-deals
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors competitive pricing by collecting market data, analyzing trends in Snowflake, generating pricing recommendations, and alerting product pricing teams.
naftiko: "0.5"
info:
label: "Competitive Pricing Intelligence Pipeline"
description: "Monitors competitive pricing by collecting market data, analyzing trends in Snowflake, generating pricing recommendations, and alerting product pricing teams."
tags:
- pricing
- competitive-intelligence
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: competitive-ops
port: 8080
tools:
- name: competitive-pricing-intelligence
description: "Monitors competitive pricing."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Competitive Pricing Intelligence Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
For ISO compliance audits, pulls the relevant Confluence policy pages, retrieves SAP quality records, and compiles a summary in a SharePoint audit folder with Slack notification to the compliance team.
naftiko: "0.5"
info:
label: "Compliance Audit Documentation Collector"
description: "For ISO compliance audits, pulls the relevant Confluence policy pages, retrieves SAP quality records, and compiles a summary in a SharePoint audit folder with Slack notification to the compliance team."
tags:
- compliance
- quality
- confluence
- sap
- sap-s4hana
- sharepoint
- slack
capability:
exposes:
- type: mcp
namespace: compliance-audit
port: 8080
tools:
- name: collect-audit-docs
description: "Given a Confluence policy page ID, SAP plant code, and audit reference, collect documentation across systems and notify the compliance team."
inputParameters:
- name: policy_page_id
in: body
type: string
description: "The Confluence policy page ID."
- name: plant_code
in: body
type: string
description: "The SAP plant code being audited."
- name: audit_reference
in: body
type: string
description: "The audit reference number."
- name: compliance_channel
in: body
type: string
description: "Slack channel ID for the compliance team."
steps:
- name: get-policy
type: call
call: "confluence.get-page"
with:
page_id: "{{policy_page_id}}"
- name: get-quality-records
type: call
call: "sap.get-quality-records"
with:
plant_code: "{{plant_code}}"
- name: create-audit-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "compliance_site"
folder_path: "Audits/{{audit_reference}}"
- name: notify-compliance
type: call
call: "slack.post-message"
with:
channel: "{{compliance_channel}}"
text: "Audit Docs Collected: {{audit_reference}} | Plant: {{plant_code}} | Policy: {{get-policy.title}} | Quality records: {{get-quality-records.record_count}} | Folder: {{create-audit-folder.url}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.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=body.storage,version"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_QUALITYINFORECORD_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: quality-records
path: "/A_QualityInfoRecord?$filter=Plant eq '{{plant_code}}'"
inputParameters:
- name: plant_code
in: path
operations:
- name: get-quality-records
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Manages regulatory compliance submissions by gathering test results from the lab system, compiling documentation in SharePoint, submitting to regulatory bodies, and tracking status.
naftiko: "0.5"
info:
label: "Compliance Regulatory Submission Orchestrator"
description: "Manages regulatory compliance submissions by gathering test results from the lab system, compiling documentation in SharePoint, submitting to regulatory bodies, and tracking status."
tags:
- compliance
- regulatory
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: compliance-regulatory-submission
description: "Manages regulatory compliance submissions."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Compliance Regulatory Submission Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Mitigates component shortages by identifying at-risk parts in SAP, sourcing alternatives from the AVL, adjusting production plans, and notifying engineering teams.
naftiko: "0.5"
info:
label: "Component Shortage Mitigation Orchestrator"
description: "Mitigates component shortages by identifying at-risk parts in SAP, sourcing alternatives from the AVL, adjusting production plans, and notifying engineering teams."
tags:
- supply-chain
- shortage
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: component-ops
port: 8080
tools:
- name: component-shortage-mitigation
description: "Mitigates component shortages."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Component Shortage Mitigation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Searches Confluence for product technical documentation, specifications, and engineering notes.
naftiko: "0.5"
info:
label: "Confluence Product Documentation Search"
description: "Searches Confluence for product technical documentation, specifications, and engineering notes."
tags:
- documentation
- confluence
capability:
exposes:
- type: mcp
namespace: documentation
port: 8080
tools:
- name: confluence_product_documentation_search
description: "Searches Confluence for product technical documentation."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "confluence.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: confluence
baseUri: "https://lenovo-confluence.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a Confluence page by ID from the Lenovo product documentation space. Returns page title, body content excerpt, and last modified date. Used by product managers reviewing hardware specifications.
naftiko: "0.5"
info:
label: "Confluence Product Spec Lookup"
description: "Retrieves a Confluence page by ID from the Lenovo product documentation space. Returns page title, body content excerpt, and last modified date. Used by product managers reviewing hardware specifications."
tags:
- documentation
- confluence
- product-lifecycle
capability:
exposes:
- type: mcp
namespace: docs-specs
port: 8080
tools:
- name: get-product-spec-page
description: "Look up a Confluence page by page ID. Returns title, excerpt of body content, and last modified date."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: body_excerpt
type: string
mapping: "$.body.storage.value"
- name: last_modified
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.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=body.storage,version"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
When a Salesforce service contract approaches renewal, retrieves the contract details, checks the customer's open ServiceNow cases, and alerts the account manager in Slack with renewal context.
naftiko: "0.5"
info:
label: "Contract Renewal Pipeline"
description: "When a Salesforce service contract approaches renewal, retrieves the contract details, checks the customer's open ServiceNow cases, and alerts the account manager in Slack with renewal context."
tags:
- sales
- customer-service
- salesforce
- servicenow
- slack
- contract-management
capability:
exposes:
- type: mcp
namespace: sales-renewals
port: 8080
tools:
- name: process-contract-renewal
description: "Given a Salesforce contract ID and account ID, pull contract and support case context, then notify the account manager."
inputParameters:
- name: contract_id
in: body
type: string
description: "The Salesforce contract ID."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: am_channel
in: body
type: string
description: "The Slack channel or DM for the account manager."
steps:
- name: get-contract
type: call
call: "salesforce.get-contract"
with:
contract_id: "{{contract_id}}"
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: get-open-cases
type: call
call: "servicenow.get-cases"
with:
account_name: "{{get-account.Name}}"
- name: notify-am
type: call
call: "slack.post-message"
with:
channel: "{{am_channel}}"
text: "Renewal Due: {{get-account.Name}} | Contract: {{contract_id}} | End date: {{get-contract.end_date}} | Value: ${{get-contract.contract_value}} | Open cases: {{get-open-cases.count}} | Health: {{get-account.health_score}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/sobjects/Contract/{{contract_id}}"
inputParameters:
- name: contract_id
in: path
operations:
- name: get-contract
method: GET
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case?sysparm_query=account.name={{account_name}}^state!=6"
inputParameters:
- name: account_name
in: path
operations:
- name: get-cases
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Zendesk ticket is escalated to priority, looks up the customer's Salesforce account health, creates a ServiceNow P2 incident, and alerts the customer success Slack channel with full context.
naftiko: "0.5"
info:
label: "Customer Escalation Handler"
description: "When a Zendesk ticket is escalated to priority, looks up the customer's Salesforce account health, creates a ServiceNow P2 incident, and alerts the customer success Slack channel with full context."
tags:
- support
- customer-service
- zendesk
- salesforce
- servicenow
- slack
- escalation
capability:
exposes:
- type: mcp
namespace: support-escalation
port: 8080
tools:
- name: handle-escalation
description: "Given a Zendesk ticket ID and Salesforce account ID, pull context from both systems, create a ServiceNow incident, and alert the team."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: cs_channel
in: body
type: string
description: "Slack channel ID for customer success."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Escalation: {{get-ticket.subject}} — {{get-account.Name}}"
urgency: "2"
impact: "2"
category: "customer_escalation"
description: "Zendesk #{{ticket_id}}: {{get-ticket.subject}}. Account: {{get-account.Name}}. Tier: {{get-account.support_tier}}. ARR: ${{get-account.annual_revenue}}."
- name: alert-cs
type: call
call: "slack.post-message"
with:
channel: "{{cs_channel}}"
text: "ESCALATION: {{get-account.Name}} ({{get-account.support_tier}}) | Issue: {{get-ticket.subject}} | Zendesk: #{{ticket_id}} | SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Calculates enterprise customer health scores by pulling usage data from telemetry, support cases from ServiceNow, sales data from Salesforce, and generating scores in Snowflake.
naftiko: "0.5"
info:
label: "Customer Health Score Pipeline"
description: "Calculates enterprise customer health scores by pulling usage data from telemetry, support cases from ServiceNow, sales data from Salesforce, and generating scores in Snowflake."
tags:
- customer-success
- health-score
- servicenow
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: customer-health-score
description: "Calculates enterprise customer health scores."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Customer Health Score Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Onboards enterprise customers by creating accounts in Salesforce, provisioning support in ServiceNow, setting up portals in SharePoint, and welcoming via Teams.
naftiko: "0.5"
info:
label: "Customer Onboarding Enterprise Orchestrator"
description: "Onboards enterprise customers by creating accounts in Salesforce, provisioning support in ServiceNow, setting up portals in SharePoint, and welcoming via Teams."
tags:
- customer-success
- onboarding
- salesforce
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-ops
port: 8080
tools:
- name: customer-onboarding-enterprise
description: "Onboards enterprise customers."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Customer Onboarding Enterprise Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
After a Zendesk ticket is resolved, sends a CSAT survey via SendGrid, logs the survey dispatch in Salesforce, and posts survey metrics to the customer success Slack channel.
naftiko: "0.5"
info:
label: "Customer Satisfaction Survey Orchestrator"
description: "After a Zendesk ticket is resolved, sends a CSAT survey via SendGrid, logs the survey dispatch in Salesforce, and posts survey metrics to the customer success Slack channel."
tags:
- support
- customer-service
- zendesk
- sendgrid
- salesforce
- slack
- csat
capability:
exposes:
- type: mcp
namespace: support-csat
port: 8080
tools:
- name: send-csat-survey
description: "Given a Zendesk ticket ID and Salesforce account ID, send a satisfaction survey to the customer and log it."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The resolved Zendesk ticket ID."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: cs_channel
in: body
type: string
description: "Slack channel ID for customer success."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
- name: send-survey
type: call
call: "sendgrid.send-email"
with:
to: "{{get-ticket.requester_email}}"
subject: "How was your Lenovo support experience?"
body: "Hi {{get-ticket.requester}}, your recent support request ({{get-ticket.subject}}) has been resolved. Please take a moment to rate your experience: [Survey Link]"
- name: log-in-salesforce
type: call
call: "salesforce.create-task"
with:
account_id: "{{account_id}}"
subject: "CSAT survey sent — Zendesk #{{ticket_id}}"
description: "Survey sent to {{get-ticket.requester_email}} for ticket: {{get-ticket.subject}}."
- name: notify-cs
type: call
call: "slack.post-message"
with:
channel: "{{cs_channel}}"
text: "CSAT Survey Sent: {{get-ticket.requester}} | Ticket: #{{ticket_id}} | Issue: {{get-ticket.subject}} | Account: {{account_id}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Plans data center capacity by pulling utilization from Datadog, forecasting needs in Snowflake, creating capacity plans in SharePoint, and notifying infrastructure teams.
naftiko: "0.5"
info:
label: "Data Center Capacity Planning Pipeline"
description: "Plans data center capacity by pulling utilization from Datadog, forecasting needs in Snowflake, creating capacity plans in SharePoint, and notifying infrastructure teams."
tags:
- infrastructure
- capacity-planning
- datadog
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: data-center-capacity-planning
description: "Plans data center capacity."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Data Center Capacity Planning Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new ThinkSystem server is deployed in a data center, registers it in Datadog for monitoring, creates a ServiceNow CI record, and notifies the infrastructure Slack channel.
naftiko: "0.5"
info:
label: "Data Center Server Provisioning"
description: "When a new ThinkSystem server is deployed in a data center, registers it in Datadog for monitoring, creates a ServiceNow CI record, and notifies the infrastructure Slack channel."
tags:
- infrastructure
- operations
- datadog
- servicenow
- slack
- server-provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: provision-server
description: "Given server hostname, serial number, and data center location, register in Datadog, create a ServiceNow CI, and notify the team."
inputParameters:
- name: hostname
in: body
type: string
description: "The server hostname."
- name: serial_number
in: body
type: string
description: "The ThinkSystem serial number."
- name: datacenter
in: body
type: string
description: "The data center location code."
- name: infra_channel
in: body
type: string
description: "Slack channel ID for infrastructure."
steps:
- name: register-datadog
type: call
call: "datadog.create-host-tags"
with:
hostname: "{{hostname}}"
tags: "serial:{{serial_number}},dc:{{datacenter}},vendor:lenovo"
- name: create-ci
type: call
call: "servicenow.create-ci"
with:
name: "{{hostname}}"
serial_number: "{{serial_number}}"
location: "{{datacenter}}"
category: "Server"
manufacturer: "Lenovo"
- name: notify-infra
type: call
call: "slack.post-message"
with:
channel: "{{infra_channel}}"
text: "Server Provisioned: {{hostname}} | S/N: {{serial_number}} | DC: {{datacenter}} | Datadog: registered | SNOW CI: {{create-ci.sys_id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: host-tags
path: "/tags/hosts/{{hostname}}"
inputParameters:
- name: hostname
in: path
operations:
- name: create-host-tags
method: POST
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci_server"
operations:
- name: create-ci
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Optimizes data center thermal management by collecting temperature data from IoT sensors, analyzing in Snowflake, adjusting cooling parameters, and reporting efficiency gains.
naftiko: "0.5"
info:
label: "Data Center Thermal Optimization Pipeline"
description: "Optimizes data center thermal management by collecting temperature data from IoT sensors, analyzing in Snowflake, adjusting cooling parameters, and reporting efficiency gains."
tags:
- data-center
- thermal
- azure-iot
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: data-center-thermal-optimization
description: "Optimizes data center thermal management."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Data Center Thermal Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Monitors factory IT system health metrics from Datadog including uptime, latency, and error rates.
naftiko: "0.5"
info:
label: "Datadog Factory System Health"
description: "Monitors factory IT system health metrics from Datadog including uptime, latency, and error rates."
tags:
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: datadog_factory_system_health
description: "Monitors factory IT system health metrics from Datadog including uptime."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "datadog.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: datadog
baseUri: "https://lenovo-datadog.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Queries Datadog for the latest host metrics of a Lenovo server by hostname. Returns CPU, memory, and disk utilization. Used by data center operations to verify ThinkSystem server health.
naftiko: "0.5"
info:
label: "Datadog Server Health Check"
description: "Queries Datadog for the latest host metrics of a Lenovo server by hostname. Returns CPU, memory, and disk utilization. Used by data center operations to verify ThinkSystem server health."
tags:
- operations
- observability
- datadog
- infrastructure
capability:
exposes:
- type: mcp
namespace: ops-monitoring
port: 8080
tools:
- name: get-host-metrics
description: "Query Datadog for latest host metrics by hostname. Returns CPU usage, memory usage, and disk utilization percentages."
inputParameters:
- name: hostname
in: body
type: string
description: "The Datadog hostname for the server."
call: "datadog.get-host-metrics"
with:
hostname: "{{hostname}}"
outputParameters:
- name: cpu_usage
type: string
mapping: "$.host_list[0].metrics.cpu"
- name: memory_usage
type: string
mapping: "$.host_list[0].metrics.iowait"
- name: disk_usage
type: string
mapping: "$.host_list[0].metrics.load"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: hosts
path: "/hosts?filter={{hostname}}"
inputParameters:
- name: hostname
in: path
operations:
- name: get-host-metrics
method: GET
Pulls demand forecast data from Salesforce pipeline, checks current SAP inventory positions, and creates a production planning recommendation posted to the supply chain Slack channel with a Confluence summary page.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Plan"
description: "Pulls demand forecast data from Salesforce pipeline, checks current SAP inventory positions, and creates a production planning recommendation posted to the supply chain Slack channel with a Confluence summary page."
tags:
- supply-chain
- manufacturing
- salesforce
- sap
- sap-s4hana
- confluence
- slack
- demand-planning
capability:
exposes:
- type: mcp
namespace: supply-demand
port: 8080
tools:
- name: generate-production-plan
description: "Given a Salesforce forecast report ID, material number, and plant code, analyze demand vs inventory and publish a recommendation."
inputParameters:
- name: forecast_report_id
in: body
type: string
description: "The Salesforce analytics report ID for demand forecast."
- name: material_number
in: body
type: string
description: "The SAP material number to plan for."
- name: plant_code
in: body
type: string
description: "The SAP plant code."
- name: planning_page_parent_id
in: body
type: string
description: "The Confluence parent page ID for planning docs."
- name: supply_chain_channel
in: body
type: string
description: "Slack channel ID for supply chain."
steps:
- name: get-forecast
type: call
call: "salesforce.get-report"
with:
report_id: "{{forecast_report_id}}"
- name: get-inventory
type: call
call: "sap.get-stock"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
- name: create-plan-page
type: call
call: "confluence.create-page"
with:
parent_id: "{{planning_page_parent_id}}"
title: "Production Plan: {{material_number}} at {{plant_code}}"
body: "Forecasted demand: {{get-forecast.total_units}}. Current stock: {{get-inventory.unrestricted_stock}}. Quality hold: {{get-inventory.quality_stock}}. Recommended production: {{get-forecast.total_units}} minus {{get-inventory.unrestricted_stock}} units."
- name: notify-supply-chain
type: call
call: "slack.post-message"
with:
channel: "{{supply_chain_channel}}"
text: "Production Plan: {{material_number}} at {{plant_code}} | Demand: {{get-forecast.total_units}} | Stock: {{get-inventory.unrestricted_stock}} | Plan: {{create-plan-page.url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: reports
path: "/analytics/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant_code}}')"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Shopify order is placed, looks up the SAP delivery note, retrieves shipping tracking from the carrier API, and updates the Shopify order with fulfillment data and notifies the customer via SendGrid.
naftiko: "0.5"
info:
label: "E-Commerce Order Fulfillment Tracker"
description: "When a Shopify order is placed, looks up the SAP delivery note, retrieves shipping tracking from the carrier API, and updates the Shopify order with fulfillment data and notifies the customer via SendGrid."
tags:
- e-commerce
- shopify
- sap
- sap-s4hana
- logistics
- sendgrid
capability:
exposes:
- type: mcp
namespace: ecommerce-fulfillment
port: 8080
tools:
- name: track-order-fulfillment
description: "Given a Shopify order ID and SAP delivery number, retrieve shipping status and update Shopify fulfillment. Notify the customer via email."
inputParameters:
- name: order_id
in: body
type: string
description: "The Shopify order ID."
- name: delivery_number
in: body
type: string
description: "The SAP outbound delivery number."
- name: customer_email
in: body
type: string
description: "The customer email address."
steps:
- name: get-order
type: call
call: "shopify.get-order"
with:
order_id: "{{order_id}}"
- name: get-delivery
type: call
call: "sap.get-delivery"
with:
delivery_number: "{{delivery_number}}"
- name: update-fulfillment
type: call
call: "shopify.create-fulfillment"
with:
order_id: "{{order_id}}"
tracking_number: "{{get-delivery.tracking_number}}"
tracking_company: "{{get-delivery.carrier}}"
- name: notify-customer
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Your Lenovo order has shipped!"
body: "Hi, your order #{{order_id}} has been shipped. Tracking: {{get-delivery.tracking_number}}. Estimated delivery: {{get-delivery.goods_issue_date}}."
consumes:
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: orders
path: "/orders/{{order_id}}.json"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- name: fulfillments
path: "/orders/{{order_id}}/fulfillments.json"
inputParameters:
- name: order_id
in: path
operations:
- name: create-fulfillment
method: POST
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
When a Shopify return request is submitted, validates the order details, creates a Zendesk ticket for customer service, opens a ServiceNow logistics task for return shipment, and emails the customer return instructions via SendGrid.
naftiko: "0.5"
info:
label: "E-Commerce Return Processor"
description: "When a Shopify return request is submitted, validates the order details, creates a Zendesk ticket for customer service, opens a ServiceNow logistics task for return shipment, and emails the customer return instructions via SendGrid."
tags:
- e-commerce
- shopify
- zendesk
- servicenow
- sendgrid
- returns
capability:
exposes:
- type: mcp
namespace: ecommerce-returns
port: 8080
tools:
- name: process-return
description: "Given a Shopify order ID, customer email, and return reason, create a Zendesk ticket, ServiceNow logistics task, and email return instructions."
inputParameters:
- name: order_id
in: body
type: string
description: "The Shopify order ID."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: return_reason
in: body
type: string
description: "The reason for the return."
steps:
- name: get-order
type: call
call: "shopify.get-order"
with:
order_id: "{{order_id}}"
- name: create-zendesk-ticket
type: call
call: "zendesk.create-ticket"
with:
subject: "Return request: Order #{{order_id}}"
description: "Customer {{customer_email}} requesting return for order #{{order_id}}. Total: {{get-order.total_price}}. Reason: {{return_reason}}."
requester_email: "{{customer_email}}"
priority: "normal"
- name: create-logistics-task
type: call
call: "servicenow.create-task"
with:
short_description: "Return shipment: Order #{{order_id}}"
description: "Process return shipment for order #{{order_id}}. Customer: {{customer_email}}. Zendesk: {{create-zendesk-ticket.id}}."
assigned_group: "Logistics_Returns"
category: "return_shipment"
- name: email-instructions
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Your Lenovo Return — Order #{{order_id}}"
body: "Hi, your return for order #{{order_id}} has been initiated. Reference: {{create-zendesk-ticket.id}}. Please pack the item securely and a prepaid shipping label will be emailed within 24 hours."
consumes:
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: orders
path: "/orders/{{order_id}}.json"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets.json"
operations:
- name: create-ticket
method: POST
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Manages edge computing device fleets by monitoring health via Datadog, deploying updates via Azure DevOps, tracking inventory in SAP, and alerting operations teams.
naftiko: "0.5"
info:
label: "Edge Computing Fleet Management Pipeline"
description: "Manages edge computing device fleets by monitoring health via Datadog, deploying updates via Azure DevOps, tracking inventory in SAP, and alerting operations teams."
tags:
- edge-computing
- fleet
- datadog
- azure-devops
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: edge-ops
port: 8080
tools:
- name: edge-computing-fleet-management
description: "Manages edge computing device fleets."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Edge Computing Fleet Management Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When an employee termination is processed in Workday, disables their ServiceNow access, archives their SharePoint personal folder, and notifies HR and IT in Slack.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestrator"
description: "When an employee termination is processed in Workday, disables their ServiceNow access, archives their SharePoint personal folder, and notifies HR and IT in Slack."
tags:
- hr
- offboarding
- workday
- servicenow
- sharepoint
- slack
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, revoke access and archive data across systems."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: termination_date
in: body
type: string
description: "The termination date in YYYY-MM-DD format."
- name: hr_channel
in: body
type: string
description: "Slack channel ID for HR notifications."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-snow-access
type: call
call: "servicenow.deactivate-user"
with:
user_name: "{{get-employee.work_email}}"
- name: archive-folder
type: call
call: "sharepoint.move-folder"
with:
site_id: "hr_site"
source_path: "EmployeeDocs/{{get-employee.full_name}}"
destination_path: "ArchivedDocs/{{get-employee.full_name}}_{{termination_date}}"
- name: notify-hr
type: call
call: "slack.post-message"
with:
channel: "{{hr_channel}}"
text: "Offboarding Complete: {{get-employee.full_name}} | Termination: {{termination_date}} | ServiceNow: deactivated | SharePoint: archived"
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: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: users
path: "/table/sys_user?sysparm_query=user_name={{user_name}}"
inputParameters:
- name: user_name
in: path
operations:
- name: deactivate-user
method: PATCH
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{source_path}}"
inputParameters:
- name: site_id
in: path
- name: source_path
in: path
operations:
- name: move-folder
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
At end of sprint, pulls completed Jira issues for a board, generates a Confluence sprint summary page, and posts highlights to the engineering Slack channel.
naftiko: "0.5"
info:
label: "Engineering Sprint Review Publisher"
description: "At end of sprint, pulls completed Jira issues for a board, generates a Confluence sprint summary page, and posts highlights to the engineering Slack channel."
tags:
- engineering
- project-management
- jira
- confluence
- slack
- agile
capability:
exposes:
- type: mcp
namespace: eng-sprints
port: 8080
tools:
- name: publish-sprint-review
description: "Given a Jira board ID and sprint ID, pull completed issues, create a Confluence summary, and notify the team."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira agile board ID."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID."
- name: confluence_parent_page_id
in: body
type: string
description: "The Confluence parent page ID for sprint reviews."
- name: eng_channel
in: body
type: string
description: "Slack channel ID for the engineering team."
steps:
- name: get-sprint
type: call
call: "jira.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: create-summary-page
type: call
call: "confluence.create-page"
with:
parent_id: "{{confluence_parent_page_id}}"
title: "Sprint Review: {{get-sprint.name}}"
body: "Sprint: {{get-sprint.name}}. Start: {{get-sprint.start_date}}. End: {{get-sprint.end_date}}. Completed: {{get-sprint.completed_count}} stories. Velocity: {{get-sprint.velocity}} points."
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{eng_channel}}"
text: "Sprint Review Published: {{get-sprint.name}} | Completed: {{get-sprint.completed_count}} stories | Velocity: {{get-sprint.velocity}} pts | Summary: {{create-summary-page.url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-eng.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Configures enterprise quotes by pulling product specs from SAP, applying pricing rules from Salesforce CPQ, generating proposals in SharePoint, and notifying sales teams.
naftiko: "0.5"
info:
label: "Enterprise Quote Configuration Orchestrator"
description: "Configures enterprise quotes by pulling product specs from SAP, applying pricing rules from Salesforce CPQ, generating proposals in SharePoint, and notifying sales teams."
tags:
- sales
- quoting
- sap
- salesforce
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: enterprise-ops
port: 8080
tools:
- name: enterprise-quote-configuration
description: "Configures enterprise quotes."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Enterprise Quote Configuration Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a Salesforce opportunity reaches proposal stage, pulls the product configuration, generates a quote in SAP, attaches it to the Salesforce opportunity, and notifies the sales rep in Slack.
naftiko: "0.5"
info:
label: "Enterprise Quote Generator"
description: "When a Salesforce opportunity reaches proposal stage, pulls the product configuration, generates a quote in SAP, attaches it to the Salesforce opportunity, and notifies the sales rep in Slack."
tags:
- sales
- erp
- salesforce
- sap
- sap-s4hana
- slack
- quoting
capability:
exposes:
- type: mcp
namespace: sales-quoting
port: 8080
tools:
- name: generate-enterprise-quote
description: "Given a Salesforce opportunity ID, pull configuration details, generate a SAP quote, and attach to the opportunity."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
- name: rep_channel
in: body
type: string
description: "The Slack channel or DM for the sales rep."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-quote
type: call
call: "sap.create-sales-quotation"
with:
customer: "{{get-opportunity.account_name}}"
amount: "{{get-opportunity.amount}}"
items: "{{get-opportunity.product_config}}"
- name: update-opportunity
type: call
call: "salesforce.update-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
sap_quote_number: "{{create-quote.quotation_number}}"
quote_amount: "{{create-quote.net_value}}"
- name: notify-rep
type: call
call: "slack.post-message"
with:
channel: "{{rep_channel}}"
text: "Quote Ready: {{get-opportunity.account_name}} | Opportunity: {{opportunity_id}} | SAP Quote: {{create-quote.quotation_number}} | Amount: ${{create-quote.net_value}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.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
- name: update-opportunity
method: PATCH
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_SALES_QUOTATION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: quotations
path: "/A_SalesQuotation"
operations:
- name: create-sales-quotation
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.
naftiko: "0.5"
info:
label: "Expense Report Compliance Review"
description: "Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected."
tags:
- finance
- expense
- sap-concur
- workday
- servicenow
- policy-compliance
capability:
exposes:
- type: mcp
namespace: finance-expense
port: 8080
tools:
- name: review-expense-report
description: "Given a Concur expense report ID and employee ID, fetch the report, validate cost center against Workday, and flag policy violations to ServiceNow."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the expense submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-review-task
type: call
call: "servicenow.create-task"
with:
short_description: "Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}."
assigned_group: "Finance_Audit"
category: "expense_review"
consumes:
- type: http
namespace: concur
baseUri: "https://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: 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: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
Dispatches field service technicians by pulling case details from ServiceNow, optimizing routes via Google Maps, assigning technicians, and sending customer ETAs.
naftiko: "0.5"
info:
label: "Field Service Dispatch Orchestrator"
description: "Dispatches field service technicians by pulling case details from ServiceNow, optimizing routes via Google Maps, assigning technicians, and sending customer ETAs."
tags:
- field-service
- dispatch
- servicenow
- google-maps
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: field-ops
port: 8080
tools:
- name: field-service-dispatch
description: "Dispatches field service technicians."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Field Service Dispatch Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Deploys firmware over-the-air by pulling release artifacts from GitHub, scheduling deployments in Azure DevOps, monitoring rollout via Datadog, and notifying engineering.
naftiko: "0.5"
info:
label: "Firmware OTA Deployment Orchestrator"
description: "Deploys firmware over-the-air by pulling release artifacts from GitHub, scheduling deployments in Azure DevOps, monitoring rollout via Datadog, and notifying engineering."
tags:
- firmware
- deployment
- github
- azure-devops
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: firmware-ops
port: 8080
tools:
- name: firmware-ota-deployment
description: "Deploys firmware over-the-air."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Firmware OTA Deployment Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a firmware build passes QA in Jira, updates the Confluence release notes page, creates a Shopify product metafield for the download link, and notifies the product team in Slack.
naftiko: "0.5"
info:
label: "Firmware Release Coordination"
description: "When a firmware build passes QA in Jira, updates the Confluence release notes page, creates a Shopify product metafield for the download link, and notifies the product team in Slack."
tags:
- engineering
- product-lifecycle
- jira
- confluence
- shopify
- slack
- firmware
capability:
exposes:
- type: mcp
namespace: eng-firmware
port: 8080
tools:
- name: coordinate-firmware-release
description: "Given a Jira issue key for the firmware build, Confluence page ID for release notes, and Shopify product ID, coordinate the release across systems."
inputParameters:
- name: jira_issue_key
in: body
type: string
description: "The Jira issue key for the firmware release build."
- name: release_notes_page_id
in: body
type: string
description: "The Confluence page ID for the firmware release notes."
- name: shopify_product_id
in: body
type: string
description: "The Shopify product ID for the firmware download listing."
- name: product_channel
in: body
type: string
description: "Slack channel ID for the product team."
steps:
- name: get-build-issue
type: call
call: "jira.get-issue"
with:
issue_key: "{{jira_issue_key}}"
- name: update-release-notes
type: call
call: "confluence.update-page"
with:
page_id: "{{release_notes_page_id}}"
title: "Firmware Release: {{get-build-issue.summary}}"
body: "Version: {{get-build-issue.fix_version}}. Status: {{get-build-issue.status}}. Released: {{get-build-issue.resolution_date}}."
- name: update-shopify-product
type: call
call: "shopify.update-product-metafield"
with:
product_id: "{{shopify_product_id}}"
namespace: "firmware"
key: "latest_version"
value: "{{get-build-issue.fix_version}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{product_channel}}"
text: "Firmware Released: {{get-build-issue.summary}} | Version: {{get-build-issue.fix_version}} | Release Notes: {{update-release-notes.url}} | Jira: {{jira_issue_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-eng.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: metafields
path: "/products/{{product_id}}/metafields.json"
inputParameters:
- name: product_id
in: path
operations:
- name: update-product-metafield
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks firmware release status and version information from GitHub repository releases.
naftiko: "0.5"
info:
label: "GitHub Firmware Release Status"
description: "Checks firmware release status and version information from GitHub repository releases."
tags:
- firmware
- github
capability:
exposes:
- type: mcp
namespace: firmware
port: 8080
tools:
- name: github_firmware_release_status
description: "Checks firmware release status and version information from GitHub repository releases.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "github.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: github
baseUri: "https://lenovo-github.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Monitors global supply chain disruptions by tracking supplier status in SAP, analyzing impact in Snowflake, creating contingency plans in SharePoint, and alerting procurement.
naftiko: "0.5"
info:
label: "Global Supply Chain Disruption Alert Pipeline"
description: "Monitors global supply chain disruptions by tracking supplier status in SAP, analyzing impact in Snowflake, creating contingency plans in SharePoint, and alerting procurement."
tags:
- supply-chain
- disruption
- sap
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: global-ops
port: 8080
tools:
- name: global-supply-chain-disruption-alert
description: "Monitors global supply chain disruptions."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Global Supply Chain Disruption Alert Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages global trade compliance by screening shipments against export control lists, validating licenses in SAP GTS, documenting compliance in SharePoint, and alerting the trade team.
naftiko: "0.5"
info:
label: "Global Trade Compliance Orchestrator"
description: "Manages global trade compliance by screening shipments against export control lists, validating licenses in SAP GTS, documenting compliance in SharePoint, and alerting the trade team."
tags:
- compliance
- trade
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: global-ops
port: 8080
tools:
- name: global-trade-compliance
description: "Manages global trade compliance."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Global Trade Compliance Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a SAP goods receipt is posted, verifies the purchase order, matches the vendor invoice, and triggers payment release notification to the finance Slack channel with a ServiceNow audit trail entry.
naftiko: "0.5"
info:
label: "Goods Receipt to Payment Trigger"
description: "When a SAP goods receipt is posted, verifies the purchase order, matches the vendor invoice, and triggers payment release notification to the finance Slack channel with a ServiceNow audit trail entry."
tags:
- finance
- procurement
- sap
- sap-s4hana
- servicenow
- slack
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-payment
port: 8080
tools:
- name: trigger-payment-release
description: "Given a SAP goods receipt document number and PO number, verify receipt, match invoice, and notify finance for payment release."
inputParameters:
- name: goods_receipt_doc
in: body
type: string
description: "The SAP goods receipt material document number."
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
- name: finance_channel
in: body
type: string
description: "Slack channel ID for finance."
steps:
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: get-invoice
type: call
call: "sap.get-invoice-by-po"
with:
po_number: "{{po_number}}"
- name: create-audit-entry
type: call
call: "servicenow.create-task"
with:
short_description: "Payment release: PO {{po_number}} — GR {{goods_receipt_doc}}"
description: "Goods receipt {{goods_receipt_doc}} posted for PO {{po_number}}. Vendor: {{get-po.vendor}}. PO value: {{get-po.total_value}} {{get-po.currency}}. Invoice: {{get-invoice.invoice_number}} ({{get-invoice.total_amount}})."
assigned_group: "Accounts_Payable"
category: "payment_release"
- name: notify-finance
type: call
call: "slack.post-message"
with:
channel: "{{finance_channel}}"
text: "Payment Ready: PO {{po_number}} | Vendor: {{get-po.vendor}} | GR: {{goods_receipt_doc}} | Invoice: {{get-invoice.invoice_number}} (${{get-invoice.total_amount}}) | SNOW: {{create-audit-entry.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: sap-invoice
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: invoices
path: "/A_SupplierInvoice?$filter=PurchaseOrder eq '{{po_number}}'"
inputParameters:
- name: po_number
in: path
operations:
- name: get-invoice-by-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a HubSpot contact by email for Lenovo's channel partner relationship management. Returns contact name, company, lifecycle stage, and deal associations.
naftiko: "0.5"
info:
label: "HubSpot Channel Partner Contact Lookup"
description: "Retrieves a HubSpot contact by email for Lenovo's channel partner relationship management. Returns contact name, company, lifecycle stage, and deal associations."
tags:
- channel-management
- crm
- hubspot
capability:
exposes:
- type: mcp
namespace: channel-contacts
port: 8080
tools:
- name: get-partner-contact
description: "Look up a HubSpot contact by email. Returns firstname, lastname, company, lifecycle stage, and associated deal count."
inputParameters:
- name: contact_email
in: body
type: string
description: "The email address of the channel partner contact."
call: "hubspot.get-contact"
with:
contact_email: "{{contact_email}}"
outputParameters:
- name: firstname
type: string
mapping: "$.properties.firstname"
- name: lastname
type: string
mapping: "$.properties.lastname"
- name: company
type: string
mapping: "$.properties.company"
- name: lifecycle_stage
type: string
mapping: "$.properties.lifecyclestage"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_email}}?idProperty=email"
inputParameters:
- name: contact_email
in: path
operations:
- name: get-contact
method: GET
Retrieves marketing campaign performance metrics from HubSpot including open rates and conversion data.
naftiko: "0.5"
info:
label: "HubSpot Marketing Campaign Metrics"
description: "Retrieves marketing campaign performance metrics from HubSpot including open rates and conversion data."
tags:
- marketing
- hubspot
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: hubspot_marketing_campaign_metrics
description: "Retrieves marketing campaign performance metrics from HubSpot including open rates and conversion data.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "hubspot.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: hubspot
baseUri: "https://lenovo-hubspot.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
When Datadog fires a critical server alert, creates a ServiceNow P1 incident, posts an alert to the Slack on-call channel, and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "IT Incident Response Orchestrator"
description: "When Datadog fires a critical server alert, creates a ServiceNow P1 incident, posts an alert to the Slack on-call channel, and pages the on-call engineer via PagerDuty."
tags:
- itsm
- observability
- datadog
- servicenow
- slack
- pagerduty
- incident-response
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: handle-critical-alert
description: "Given a Datadog monitor alert, open a ServiceNow P1 incident, notify Slack, and page the on-call engineer."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that fired."
- name: monitor_name
in: body
type: string
description: "Human-readable name of the firing monitor."
- name: host
in: body
type: string
description: "The affected host or service."
- name: alert_url
in: body
type: string
description: "URL to the Datadog monitor event."
- name: oncall_channel
in: body
type: string
description: "Slack channel ID for on-call notifications."
- name: pagerduty_service_id
in: body
type: string
description: "PagerDuty service ID for the affected component."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "P1 Alert: {{monitor_name}} on {{host}}"
urgency: "1"
impact: "1"
category: "infrastructure"
description: "Datadog monitor {{monitor_id}} fired for {{host}}. Dashboard: {{alert_url}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "{{oncall_channel}}"
text: "P1 Incident: {{monitor_name}} | Host: {{host}} | SNOW: {{create-incident.number}} | Datadog: {{alert_url}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{pagerduty_service_id}}"
title: "P1: {{monitor_name}} on {{host}}"
body: "ServiceNow: {{create-incident.number}}. Datadog: {{alert_url}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://lenovo.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves a Jira issue by key for Lenovo's product engineering teams. Returns status, assignee, priority, and component. Used by firmware and hardware engineering to check defect or feature status.
naftiko: "0.5"
info:
label: "Jira Engineering Issue Lookup"
description: "Retrieves a Jira issue by key for Lenovo's product engineering teams. Returns status, assignee, priority, and component. Used by firmware and hardware engineering to check defect or feature status."
tags:
- engineering
- project-management
- jira
- product-lifecycle
capability:
exposes:
- type: mcp
namespace: eng-issues
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key. Returns summary, status, assignee, priority, and component."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g., BIOS-1234)."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
- name: component
type: string
mapping: "$.fields.components[0].name"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-eng.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Retrieves hardware defect tracking information from Jira including severity, affected models, and resolution status.
naftiko: "0.5"
info:
label: "Jira Hardware Defect Tracker"
description: "Retrieves hardware defect tracking information from Jira including severity, affected models, and resolution status."
tags:
- quality
- jira
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: jira_hardware_defect_tracker
description: "Retrieves hardware defect tracking information from Jira including severity."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "jira.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-jira.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
When a support resolution is found for a common issue, creates a Confluence KB article from the Zendesk ticket resolution, links it back to Zendesk as a help center article, and notifies the support team in Slack.
naftiko: "0.5"
info:
label: "Knowledge Base Article Publisher"
description: "When a support resolution is found for a common issue, creates a Confluence KB article from the Zendesk ticket resolution, links it back to Zendesk as a help center article, and notifies the support team in Slack."
tags:
- support
- knowledge-management
- zendesk
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: support-kb
port: 8080
tools:
- name: publish-kb-article
description: "Given a Zendesk ticket ID, Confluence space key, and article category, create a KB article and link it back."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID with the resolution."
- name: confluence_space_key
in: body
type: string
description: "The Confluence space key for the KB."
- name: article_category
in: body
type: string
description: "The KB article category (e.g., thinkpad, thinkcentre, thinksystem)."
- name: support_channel
in: body
type: string
description: "Slack channel ID for the support team."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
- name: create-kb-page
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
title: "KB: {{get-ticket.subject}}"
body: "Issue: {{get-ticket.subject}}. Category: {{article_category}}. Resolution: {{get-ticket.resolution_notes}}. Source ticket: {{ticket_id}}."
- name: update-zendesk-ticket
type: call
call: "zendesk.update-ticket"
with:
ticket_id: "{{ticket_id}}"
kb_article_url: "{{create-kb-page.url}}"
- name: notify-support
type: call
call: "slack.post-message"
with:
channel: "{{support_channel}}"
text: "New KB Article: {{get-ticket.subject}} | Category: {{article_category}} | Confluence: {{create-kb-page.url}} | Source: Zendesk #{{ticket_id}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- name: update-ticket
method: PUT
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors laptop battery safety by pulling telemetry data from IoT endpoints, analyzing failure patterns in Snowflake, creating safety alerts in ServiceNow, and notifying product safety.
naftiko: "0.5"
info:
label: "Laptop Battery Safety Monitoring Pipeline"
description: "Monitors laptop battery safety by pulling telemetry data from IoT endpoints, analyzing failure patterns in Snowflake, creating safety alerts in ServiceNow, and notifying product safety."
tags:
- product-safety
- battery
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: laptop-ops
port: 8080
tools:
- name: laptop-battery-safety-monitoring
description: "Monitors laptop battery safety."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Laptop Battery Safety Monitoring Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages Lenovo Pro SMB customer engagement by tracking activity in Salesforce, personalizing offers in HubSpot, generating proposals in SharePoint, and notifying account managers.
naftiko: "0.5"
info:
label: "Lenovo Pro SMB Engagement Pipeline"
description: "Manages Lenovo Pro SMB customer engagement by tracking activity in Salesforce, personalizing offers in HubSpot, generating proposals in SharePoint, and notifying account managers."
tags:
- smb
- engagement
- salesforce
- hubspot
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lenovo-ops
port: 8080
tools:
- name: lenovo-pro-smb-engagement
description: "Manages Lenovo Pro SMB customer engagement."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Lenovo Pro SMB Engagement Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a bill-of-materials change request is approved in Jira, updates the SAP material BOM, refreshes the Confluence spec page, and notifies the manufacturing engineering Slack channel.
naftiko: "0.5"
info:
label: "Manufacturing BOM Change Orchestrator"
description: "When a bill-of-materials change request is approved in Jira, updates the SAP material BOM, refreshes the Confluence spec page, and notifies the manufacturing engineering Slack channel."
tags:
- manufacturing
- product-lifecycle
- jira
- sap
- sap-s4hana
- confluence
- slack
- bom
capability:
exposes:
- type: mcp
namespace: mfg-bom
port: 8080
tools:
- name: process-bom-change
description: "Given a Jira BOM change request key, SAP parent material, and Confluence spec page, orchestrate the BOM update across systems."
inputParameters:
- name: jira_key
in: body
type: string
description: "The Jira issue key for the BOM change request."
- name: parent_material
in: body
type: string
description: "The SAP parent material number."
- name: spec_page_id
in: body
type: string
description: "The Confluence product spec page ID."
- name: mfg_eng_channel
in: body
type: string
description: "Slack channel ID for manufacturing engineering."
steps:
- name: get-change-request
type: call
call: "jira.get-issue"
with:
issue_key: "{{jira_key}}"
- name: get-current-bom
type: call
call: "sap.get-bom"
with:
material: "{{parent_material}}"
- name: update-spec-page
type: call
call: "confluence.update-page"
with:
page_id: "{{spec_page_id}}"
title: "BOM Update: {{parent_material}}"
body: "BOM change per {{jira_key}}: {{get-change-request.summary}}. Previous revision: {{get-current-bom.revision}}. Components affected: {{get-change-request.component_list}}."
- name: notify-engineering
type: call
call: "slack.post-message"
with:
channel: "{{mfg_eng_channel}}"
text: "BOM Change Processed: {{parent_material}} | Jira: {{jira_key}} | Change: {{get-change-request.summary}} | Spec updated: {{update-spec-page.url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-eng.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: bom-headers
path: "/MaterialBOM(Material='{{material}}')"
inputParameters:
- name: material
in: path
operations:
- name: get-bom
method: GET
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Enforces manufacturing quality gates by pulling test results from the MES, comparing against specifications in SAP, logging results, and alerting quality engineers.
naftiko: "0.5"
info:
label: "Manufacturing Quality Gate Pipeline"
description: "Enforces manufacturing quality gates by pulling test results from the MES, comparing against specifications in SAP, logging results, and alerting quality engineers."
tags:
- manufacturing
- quality-gates
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: manufacturing-quality-gate
description: "Enforces manufacturing quality gates."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Manufacturing Quality Gate Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Improves manufacturing yields by analyzing defect data from the MES, identifying root causes in Snowflake, creating corrective actions in Jira, and tracking improvements.
naftiko: "0.5"
info:
label: "Manufacturing Yield Improvement Pipeline"
description: "Improves manufacturing yields by analyzing defect data from the MES, identifying root causes in Snowflake, creating corrective actions in Jira, and tracking improvements."
tags:
- manufacturing
- yield
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: manufacturing-yield-improvement
description: "Improves manufacturing yields."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Manufacturing Yield Improvement Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for equipment allocation docs, and sends a Slack welcome message to the employee's team channel.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for equipment allocation docs, and sends a Slack welcome message to the employee's team channel."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- slack
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate onboarding across ServiceNow, SharePoint, and Slack."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "The department the new hire is joining."
- name: team_channel_id
in: body
type: string
description: "The Slack channel ID for the team."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}. Equipment provisioning required."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding_site"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "slack.post-message"
with:
channel: "{{team_channel_id}}"
text: "Welcome to Lenovo, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
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: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Coordinates new product introductions by syncing specs from Confluence, creating SKUs in SAP, setting up Shopify listings, and notifying channel partners.
naftiko: "0.5"
info:
label: "New Product Introduction Orchestrator"
description: "Coordinates new product introductions by syncing specs from Confluence, creating SKUs in SAP, setting up Shopify listings, and notifying channel partners."
tags:
- product-launch
- npi
- confluence
- sap
- shopify
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: new-ops
port: 8080
tools:
- name: new-product-introduction
description: "Coordinates new product introductions."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "New Product Introduction Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Calculates quarterly incentive payouts for channel partners by pulling deal data from Salesforce and HubSpot, then posts the payout summary to Slack and creates a SAP payment request.
naftiko: "0.5"
info:
label: "Partner Incentive Payout Calculator"
description: "Calculates quarterly incentive payouts for channel partners by pulling deal data from Salesforce and HubSpot, then posts the payout summary to Slack and creates a SAP payment request."
tags:
- channel-management
- finance
- salesforce
- hubspot
- sap
- sap-s4hana
- slack
- incentives
capability:
exposes:
- type: mcp
namespace: channel-incentives
port: 8080
tools:
- name: calculate-partner-payout
description: "Given a partner account ID and fiscal quarter, pull deal data, calculate incentives, create a SAP payment request, and notify the channel team."
inputParameters:
- name: partner_account_id
in: body
type: string
description: "The Salesforce partner account ID."
- name: quarter
in: body
type: string
description: "The fiscal quarter (e.g., Q1-FY26)."
- name: channel_finance_channel
in: body
type: string
description: "Slack channel ID for channel finance."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{partner_account_id}}"
- name: get-closed-deals
type: call
call: "hubspot.search-deals"
with:
filter_property: "partner_account"
filter_value: "{{get-account.Name}}"
close_date_quarter: "{{quarter}}"
- name: create-payment
type: call
call: "sap.create-vendor-payment"
with:
vendor_name: "{{get-account.Name}}"
amount: "{{get-closed-deals.incentive_amount}}"
reference: "Incentive-{{quarter}}-{{partner_account_id}}"
- name: notify-channel-finance
type: call
call: "slack.post-message"
with:
channel: "{{channel_finance_channel}}"
text: "Partner Payout: {{get-account.Name}} | {{quarter}} | Deals closed: {{get-closed-deals.deal_count}} | Revenue: ${{get-closed-deals.total_amount}} | Incentive: ${{get-closed-deals.incentive_amount}} | SAP Payment: {{create-payment.document_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals/search"
operations:
- name: search-deals
method: POST
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: payments
path: "/A_SupplierInvoice"
operations:
- name: create-vendor-payment
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Reviews patent portfolios by pulling filings from the IP management system, analyzing coverage in Snowflake, generating review reports in SharePoint, and notifying the IP team.
naftiko: "0.5"
info:
label: "Patent Portfolio Review Pipeline"
description: "Reviews patent portfolios by pulling filings from the IP management system, analyzing coverage in Snowflake, generating review reports in SharePoint, and notifying the IP team."
tags:
- intellectual-property
- patents
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: patent-ops
port: 8080
tools:
- name: patent-portfolio-review
description: "Reviews patent portfolios."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Patent Portfolio Review Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Triggers a refresh of Power BI sales performance dashboards for regional sales reporting.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a refresh of Power BI sales performance dashboards for regional sales reporting."
tags:
- analytics
- power-bi
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: power_bi_sales_dashboard_refresh
description: "Triggers a refresh of Power BI sales performance dashboards for regional sales reporting.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "power-bi.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: power-bi
baseUri: "https://lenovo-power-bi.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Conducts pre-sales technical assessments by pulling requirements from Salesforce, matching solutions from the product catalog, generating assessment reports, and briefing the sales team.
naftiko: "0.5"
info:
label: "Pre-Sales Technical Assessment Orchestrator"
description: "Conducts pre-sales technical assessments by pulling requirements from Salesforce, matching solutions from the product catalog, generating assessment reports, and briefing the sales team."
tags:
- pre-sales
- technical
- salesforce
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pre-ops
port: 8080
tools:
- name: pre-sales-technical-assessment
description: "Conducts pre-sales technical assessments."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Pre-Sales Technical Assessment Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a SAP Ariba requisition exceeds spend threshold, routes for manager approval via Workday, and notifies requestor and approver in Slack with approval status.
naftiko: "0.5"
info:
label: "Procurement Approval Pipeline"
description: "When a SAP Ariba requisition exceeds spend threshold, routes for manager approval via Workday, and notifies requestor and approver in Slack with approval status."
tags:
- procurement
- sap-ariba
- workday
- slack
- approval
- spend-management
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: route-requisition-approval
description: "Given an Ariba requisition ID and requestor employee ID, check the requisition amount, resolve the approver from Workday, and notify both parties in Slack."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The SAP Ariba requisition identifier."
- name: requestor_employee_id
in: body
type: string
description: "The Workday employee ID of the requestor."
- name: spend_amount
in: body
type: number
description: "The total spend amount on the requisition."
steps:
- name: get-requisition
type: call
call: "ariba.get-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: get-requestor
type: call
call: "workday.get-worker"
with:
worker_id: "{{requestor_employee_id}}"
- name: get-manager
type: call
call: "workday.get-worker"
with:
worker_id: "{{get-requestor.manager_id}}"
- name: notify-approver
type: call
call: "slack.post-message"
with:
channel: "{{get-manager.slack_id}}"
text: "Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for ${{spend_amount}}. Vendor: {{get-requisition.vendor_name}}. Review: {{get-requisition.approval_url}}"
- name: notify-requestor
type: call
call: "slack.post-message"
with:
channel: "{{get-requestor.slack_id}}"
text: "Your requisition {{requisition_id}} (${{spend_amount}}) has been routed to {{get-manager.full_name}} for approval."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/purchase-req/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Escalates product defects by creating tickets in Jira, notifying engineering via Slack, scheduling design reviews, and updating the quality dashboard in Power BI.
naftiko: "0.5"
info:
label: "Product Defect Escalation Orchestrator"
description: "Escalates product defects by creating tickets in Jira, notifying engineering via Slack, scheduling design reviews, and updating the quality dashboard in Power BI."
tags:
- quality
- defect-management
- jira
- slack
- power-bi
capability:
exposes:
- type: mcp
namespace: product-ops
port: 8080
tools:
- name: product-defect-escalation
description: "Escalates product defects."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Product Defect Escalation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages product end-of-life transitions by updating status in SAP, notifying channel partners via Salesforce, publishing notices in Confluence, and coordinating last buys.
naftiko: "0.5"
info:
label: "Product End of Life Orchestrator"
description: "Manages product end-of-life transitions by updating status in SAP, notifying channel partners via Salesforce, publishing notices in Confluence, and coordinating last buys."
tags:
- product-lifecycle
- eol
- sap
- salesforce
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-ops
port: 8080
tools:
- name: product-end-of-life
description: "Manages product end-of-life transitions."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Product End of Life Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Before a new ThinkPad model launch, verifies the Confluence spec page is published, confirms SAP material master is active, validates Shopify product listing is live, and posts a go/no-go summary to Slack.
naftiko: "0.5"
info:
label: "Product Launch Readiness Orchestrator"
description: "Before a new ThinkPad model launch, verifies the Confluence spec page is published, confirms SAP material master is active, validates Shopify product listing is live, and posts a go/no-go summary to Slack."
tags:
- product-lifecycle
- launch
- confluence
- sap
- sap-s4hana
- shopify
- slack
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: check-launch-readiness
description: "Given a Confluence spec page ID, SAP material number, and Shopify product ID, verify all systems are ready for launch and post summary."
inputParameters:
- name: spec_page_id
in: body
type: string
description: "The Confluence product spec page ID."
- name: material_number
in: body
type: string
description: "The SAP material number for the new product."
- name: shopify_product_id
in: body
type: string
description: "The Shopify product ID for the e-commerce listing."
- name: launch_channel
in: body
type: string
description: "Slack channel ID for product launch coordination."
steps:
- name: get-spec-page
type: call
call: "confluence.get-page"
with:
page_id: "{{spec_page_id}}"
- name: get-material
type: call
call: "sap.get-material"
with:
material_number: "{{material_number}}"
- name: get-shopify-product
type: call
call: "shopify.get-product"
with:
product_id: "{{shopify_product_id}}"
- name: post-readiness
type: call
call: "slack.post-message"
with:
channel: "{{launch_channel}}"
text: "Launch Readiness: {{get-material.description}} | Spec: {{get-spec-page.title}} (updated {{get-spec-page.last_modified}}) | SAP Material: {{material_number}} ({{get-material.plant}}) | Shopify: {{get-shopify-product.status}} | Price: ${{get-shopify-product.price}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://lenovo-eng.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=body.storage,version"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: products
path: "/products/{{product_id}}.json"
inputParameters:
- name: product_id
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates production line changeovers by scheduling in SAP, coordinating teams in Jira, tracking completion in the MES, and notifying manufacturing leadership.
naftiko: "0.5"
info:
label: "Production Line Changeover Orchestrator"
description: "Orchestrates production line changeovers by scheduling in SAP, coordinating teams in Jira, tracking completion in the MES, and notifying manufacturing leadership."
tags:
- manufacturing
- changeover
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: production-line-changeover
description: "Orchestrates production line changeovers."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Production Line Changeover Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a Datadog alert detects a manufacturing line controller going offline, creates a ServiceNow P1 incident, pages the plant engineer via PagerDuty, and posts to the manufacturing ops Slack channel.
naftiko: "0.5"
info:
label: "Production Line Downtime Reporter"
description: "When a Datadog alert detects a manufacturing line controller going offline, creates a ServiceNow P1 incident, pages the plant engineer via PagerDuty, and posts to the manufacturing ops Slack channel."
tags:
- manufacturing
- operations
- datadog
- servicenow
- pagerduty
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: mfg-ops
port: 8080
tools:
- name: report-line-downtime
description: "Given a Datadog alert for a line controller, create a ServiceNow P1 incident, page the on-call engineer, and notify Slack."
inputParameters:
- name: controller_host
in: body
type: string
description: "The hostname of the line controller."
- name: plant_code
in: body
type: string
description: "The plant code where the line is located."
- name: line_id
in: body
type: string
description: "The manufacturing line identifier."
- name: pagerduty_service_id
in: body
type: string
description: "PagerDuty service ID for the plant."
- name: mfg_ops_channel
in: body
type: string
description: "Slack channel ID for manufacturing ops."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Line down: {{line_id}} at plant {{plant_code}}"
urgency: "1"
impact: "1"
category: "manufacturing"
description: "Controller {{controller_host}} for line {{line_id}} at plant {{plant_code}} is offline. Immediate attention required."
- name: page-engineer
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{pagerduty_service_id}}"
title: "Line {{line_id}} down at {{plant_code}}"
body: "Controller: {{controller_host}}. ServiceNow: {{create-incident.number}}."
- name: notify-ops
type: call
call: "slack.post-message"
with:
channel: "{{mfg_ops_channel}}"
text: "LINE DOWN: {{line_id}} at {{plant_code}} | Controller: {{controller_host}} | SNOW: {{create-incident.number}} | PagerDuty: {{page-engineer.incident_key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://lenovo.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a quality defect is detected in manufacturing, blocks the SAP production order material, creates a Jira defect ticket, opens a ServiceNow quality case, and alerts the quality engineering Slack channel.
naftiko: "0.5"
info:
label: "Production Quality Hold Orchestrator"
description: "When a quality defect is detected in manufacturing, blocks the SAP production order material, creates a Jira defect ticket, opens a ServiceNow quality case, and alerts the quality engineering Slack channel."
tags:
- manufacturing
- quality
- sap
- sap-s4hana
- jira
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: mfg-quality
port: 8080
tools:
- name: trigger-quality-hold
description: "Given a production order number, defect description, and affected material, initiate a quality hold across SAP, Jira, ServiceNow, and Slack."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
- name: material_number
in: body
type: string
description: "The affected material number."
- name: defect_description
in: body
type: string
description: "Description of the quality defect detected."
- name: plant_code
in: body
type: string
description: "The SAP plant code where the defect was found."
steps:
- name: get-order
type: call
call: "sap.get-production-order"
with:
order_number: "{{order_number}}"
- name: create-defect
type: call
call: "jira.create-issue"
with:
project: "QA"
summary: "Quality hold: {{material_number}} — {{order_number}}"
description: "Defect found in production order {{order_number}} at plant {{plant_code}}. Material: {{material_number}}. Planned qty: {{get-order.planned_quantity}}. Confirmed yield: {{get-order.confirmed_yield}}. Defect: {{defect_description}}"
issue_type: "Bug"
priority: "Critical"
- name: open-quality-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Quality hold: {{material_number}} at {{plant_code}}"
urgency: "1"
impact: "2"
category: "quality_hold"
description: "Production order {{order_number}} quality hold. {{defect_description}}. Jira: {{create-defect.key}}."
- name: alert-quality
type: call
call: "slack.post-message"
with:
channel: "#quality-engineering"
text: "QUALITY HOLD: Material {{material_number}} | Order {{order_number}} | Plant {{plant_code}} | Defect: {{defect_description}} | Jira: {{create-defect.key}} | SNOW: {{open-quality-case.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: production-orders
path: "/A_ProductionOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
- type: http
namespace: jira
baseUri: "https://lenovo-eng.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: servicenow
baseUri: "https://lenovo.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks device recycling program metrics by collecting return data from ServiceNow, analyzing volumes in Snowflake, reporting ESG impact in Power BI, and updating stakeholders.
naftiko: "0.5"
info:
label: "Recycling Program Tracking Pipeline"
description: "Tracks device recycling program metrics by collecting return data from ServiceNow, analyzing volumes in Snowflake, reporting ESG impact in Power BI, and updating stakeholders."
tags:
- sustainability
- recycling
- servicenow
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recycling-ops
port: 8080
tools:
- name: recycling-program-tracking
description: "Tracks device recycling program metrics."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Recycling Program Tracking Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates regional sales forecasts by pulling pipeline data from Salesforce, running models in Snowflake, updating dashboards in Power BI, and briefing regional directors.
naftiko: "0.5"
info:
label: "Regional Sales Forecast Pipeline"
description: "Generates regional sales forecasts by pulling pipeline data from Salesforce, running models in Snowflake, updating dashboards in Power BI, and briefing regional directors."
tags:
- sales
- forecasting
- salesforce
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regional-ops
port: 8080
tools:
- name: regional-sales-forecast
description: "Generates regional sales forecasts."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Regional Sales Forecast Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages reverse logistics by creating RMA tickets in ServiceNow, scheduling pickups with carriers, updating inventory in SAP, and notifying customers via email.
naftiko: "0.5"
info:
label: "Reverse Logistics RMA Orchestrator"
description: "Manages reverse logistics by creating RMA tickets in ServiceNow, scheduling pickups with carriers, updating inventory in SAP, and notifying customers via email."
tags:
- logistics
- rma
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reverse-ops
port: 8080
tools:
- name: reverse-logistics-rma
description: "Manages reverse logistics."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Reverse Logistics RMA Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a qualifying LinkedIn signal occurs, enriches the Salesforce lead with profile data, syncs to HubSpot for channel partner visibility, and alerts the owning rep in Slack.
naftiko: "0.5"
info:
label: "Sales Lead Enrichment Pipeline"
description: "When a qualifying LinkedIn signal occurs, enriches the Salesforce lead with profile data, syncs to HubSpot for channel partner visibility, and alerts the owning rep in Slack."
tags:
- sales
- crm
- salesforce
- hubspot
- linkedin
- slack
- lead-management
capability:
exposes:
- type: mcp
namespace: sales-intelligence
port: 8080
tools:
- name: enrich-lead-from-linkedin
description: "Given a LinkedIn member URN and Salesforce contact ID, enrich the Salesforce record, sync to HubSpot, and notify the owning rep."
inputParameters:
- name: linkedin_member_urn
in: body
type: string
description: "The LinkedIn member URN for the contact."
- name: salesforce_contact_id
in: body
type: string
description: "The Salesforce contact record ID."
- name: signal_type
in: body
type: string
description: "The LinkedIn signal type (e.g., job_change, content_share)."
- name: rep_slack_channel
in: body
type: string
description: "The Slack channel or DM ID for the owning sales rep."
steps:
- name: get-linkedin-profile
type: call
call: "linkedin.get-profile"
with:
member_urn: "{{linkedin_member_urn}}"
- name: update-salesforce
type: call
call: "salesforce.update-contact"
with:
contact_id: "{{salesforce_contact_id}}"
title: "{{get-linkedin-profile.headline}}"
company: "{{get-linkedin-profile.current_company}}"
linkedin_url: "{{get-linkedin-profile.profile_url}}"
- name: sync-hubspot
type: call
call: "hubspot.update-contact"
with:
email: "{{update-salesforce.email}}"
jobtitle: "{{get-linkedin-profile.headline}}"
company: "{{get-linkedin-profile.current_company}}"
hs_lead_status: "OPEN_DEAL"
- name: alert-rep
type: call
call: "slack.post-message"
with:
channel: "{{rep_slack_channel}}"
text: "Warm Lead: {{get-linkedin-profile.first_name}} {{get-linkedin-profile.last_name}} | Signal: {{signal_type}} | Title: {{get-linkedin-profile.headline}} | Company: {{get-linkedin-profile.current_company}} | Salesforce updated."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: profiles
path: "/people/{{member_urn}}"
inputParameters:
- name: member_urn
in: path
operations:
- name: get-profile
method: GET
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: update-contact
method: PATCH
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: update-contact
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a Salesforce opportunity by ID and returns deal stage, amount, close date, and account name. Used by channel sales managers to check pipeline status for enterprise PC deals.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Lookup"
description: "Retrieves a Salesforce opportunity by ID and returns deal stage, amount, close date, and account name. Used by channel sales managers to check pipeline status for enterprise PC deals."
tags:
- sales
- crm
- salesforce
- opportunity
- channel-management
capability:
exposes:
- type: mcp
namespace: sales-pipeline
port: 8080
tools:
- name: get-opportunity
description: "Look up a Salesforce opportunity by ID. Returns stage, amount, close date, account name, and owner."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity record ID."
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
outputParameters:
- name: stage
type: string
mapping: "$.StageName"
- name: amount
type: string
mapping: "$.Amount"
- name: close_date
type: string
mapping: "$.CloseDate"
- name: account_name
type: string
mapping: "$.Account.Name"
- name: owner
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
Retrieves channel partner deal registration details from Salesforce including deal size and approval status.
naftiko: "0.5"
info:
label: "Salesforce Partner Deal Lookup"
description: "Retrieves channel partner deal registration details from Salesforce including deal size and approval status."
tags:
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: salesforce_partner_deal_lookup
description: "Retrieves channel partner deal registration details from Salesforce including deal size and approval status.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "salesforce.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: salesforce
baseUri: "https://lenovo-salesforce.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves bill of materials component details from SAP for a specified product, including part numbers and quantities.
naftiko: "0.5"
info:
label: "SAP BOM Component Lookup"
description: "Retrieves bill of materials component details from SAP for a specified product, including part numbers and quantities."
tags:
- manufacturing
- sap
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: sap_bom_component_lookup
description: "Retrieves bill of materials component details from SAP for a specified product."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "sap.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-sap.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a SAP outbound delivery by delivery number. Returns ship-to party, planned goods issue date, and shipped quantity. Used by logistics teams tracking shipments to channel partners.
naftiko: "0.5"
info:
label: "SAP Delivery Note Lookup"
description: "Retrieves a SAP outbound delivery by delivery number. Returns ship-to party, planned goods issue date, and shipped quantity. Used by logistics teams tracking shipments to channel partners."
tags:
- logistics
- erp
- sap
- sap-s4hana
- delivery
- channel-management
capability:
exposes:
- type: mcp
namespace: logistics-delivery
port: 8080
tools:
- name: get-delivery
description: "Look up a SAP outbound delivery by number. Returns ship-to party, goods issue date, delivery status, and total weight."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP outbound delivery number."
call: "sap.get-delivery"
with:
delivery_number: "{{delivery_number}}"
outputParameters:
- name: ship_to
type: string
mapping: "$.d.ShipToParty"
- name: goods_issue_date
type: string
mapping: "$.d.PlannedGoodsIssueDate"
- name: status
type: string
mapping: "$.d.OverallSDProcessStatus"
- name: total_weight
type: string
mapping: "$.d.GrossWeight"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Queries SAP S/4HANA for current inventory stock levels of a material at a specific plant. Returns unrestricted stock, quality inspection stock, and blocked stock. Used by supply chain planners to check component availability.
naftiko: "0.5"
info:
label: "SAP Inventory Position Lookup"
description: "Queries SAP S/4HANA for current inventory stock levels of a material at a specific plant. Returns unrestricted stock, quality inspection stock, and blocked stock. Used by supply chain planners to check component availability."
tags:
- supply-chain
- erp
- sap
- sap-s4hana
- inventory
capability:
exposes:
- type: mcp
namespace: supply-inventory
port: 8080
tools:
- name: get-inventory-position
description: "Query SAP S/4HANA for current stock levels of a material at a plant. Returns unrestricted, quality inspection, and blocked stock quantities."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: plant_code
in: body
type: string
description: "The SAP plant code (e.g., CN01 for Hefei factory)."
call: "sap.get-stock"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
outputParameters:
- name: unrestricted_stock
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
- name: quality_stock
type: string
mapping: "$.d.QualityInspectionStockQty"
- name: blocked_stock
type: string
mapping: "$.d.BlockedStockQty"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant_code}}')"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: path
operations:
- name: get-stock
method: GET
Checks material availability in SAP for production planning, returning on-hand quantity and ATP dates.
naftiko: "0.5"
info:
label: "SAP Material Availability Check"
description: "Checks material availability in SAP for production planning, returning on-hand quantity and ATP dates."
tags:
- supply-chain
- sap
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: sap_material_availability_check
description: "Checks material availability in SAP for production planning."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "sap.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-sap.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a SAP material master record by material number. Returns description, material group, base unit, and plant assignment. Used by product engineers to verify BOM components.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves a SAP material master record by material number. Returns description, material group, base unit, and plant assignment. Used by product engineers to verify BOM components."
tags:
- manufacturing
- erp
- sap
- sap-s4hana
- materials
- product-lifecycle
capability:
exposes:
- type: mcp
namespace: mfg-materials
port: 8080
tools:
- name: get-material
description: "Look up a SAP material master record by material number. Returns description, material group, base unit of measure, and plant data."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: "sap.get-material"
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialDescription"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
- name: base_unit
type: string
mapping: "$.d.BaseUnit"
- name: plant
type: string
mapping: "$.d.Plant"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
Looks up a SAP S/4HANA production order by number and returns current status, planned quantity, yield, and scheduled finish date. Used by manufacturing planners to monitor assembly line progress.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Looks up a SAP S/4HANA production order by number and returns current status, planned quantity, yield, and scheduled finish date. Used by manufacturing planners to monitor assembly line progress."
tags:
- manufacturing
- erp
- sap
- sap-s4hana
- production-order
capability:
exposes:
- type: mcp
namespace: mfg-production
port: 8080
tools:
- name: get-production-order
description: "Look up a SAP S/4HANA production order by order number. Returns status, planned quantity, confirmed yield, material number, and scheduled finish date."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: "sap.get-production-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OrderStatus"
- name: planned_quantity
type: string
mapping: "$.d.PlannedTotalQty"
- name: confirmed_yield
type: string
mapping: "$.d.ConfirmedYieldQty"
- name: material_number
type: string
mapping: "$.d.Material"
- name: finish_date
type: string
mapping: "$.d.ScheduledFinishDate"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: production-orders
path: "/A_ProductionOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
Looks up a SAP S/4HANA purchase order by number. Returns header status, vendor, total value, and delivery date. Used by procurement teams managing component purchases from OEM suppliers.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order by number. Returns header status, vendor, total value, and delivery date. Used by procurement teams managing component purchases from OEM suppliers."
tags:
- procurement
- erp
- sap
- sap-s4hana
- purchase-order
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement-po
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, currency, and delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (10-digit)."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Checks the approval and processing status of purchase requisitions in SAP.
naftiko: "0.5"
info:
label: "SAP Purchase Requisition Status"
description: "Checks the approval and processing status of purchase requisitions in SAP."
tags:
- procurement
- sap
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap_purchase_requisition_status
description: "Checks the approval and processing status of purchase requisitions in SAP.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "sap.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-sap.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
When a critical BIOS/firmware vulnerability is reported in Jira, creates a ServiceNow security incident, updates the Confluence security advisory page, sends an advisory email to affected customers via SendGrid, and alerts the security team in Slack.
naftiko: "0.5"
info:
label: "Security Vulnerability Response"
description: "When a critical BIOS/firmware vulnerability is reported in Jira, creates a ServiceNow security incident, updates the Confluence security advisory page, sends an advisory email to affected customers via SendGrid, and alerts the security team in Slack."
tags:
- security
- engineering
- jira
- servicenow
- confluence
- sendgrid
- slack
- vulnerability
capability:
exposes:
- type: mcp
namespace: security-response
port: 8080
tools:
- name: respond-to-vulnerability
description: "Given a Jira security issue key and affected product line, orchestrate the vulnerability response across systems."
inputParameters:
- name: jira_issue_key
in: body
type: string
description: "The Jira issue key for the vulnerability report."
- name: affected_product_line
in: body
type: string
description: "The affected product line (e.g., ThinkPad, ThinkCentre, ThinkSystem)."
- name: advisory_page_id
in: body
type: string
description: "The Confluence security advisory page ID."
- name: customer_segment_email
in: body
type: string
description: "The SendGrid list ID for affected customer segment."
- name: security_channel
in: body
type: string
description: "Slack channel ID for the security team."
steps:
- name: get-vuln-issue
type: call
call: "jira.get-issue"
with:
issue_key: "{{jira_issue_key}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Security: {{get-vuln-issue.summary}}"
urgency: "1"
impact: "1"
category: "security"
description: "Vulnerability: {{get-vuln-issue.summary}}. Affected: {{affected_product_line}}. Severity: {{get-vuln-issue.priority}}. Jira: {{jira_issue_key}}."
- name: update-advisory
type: call
call: "confluence.update-page"
with:
page_id: "{{advisory_page_id}}"
title: "Security Advisory: {{get-vuln-issue.summary}}"
body: "Product: {{affected_product_line}}. Severity: {{get-vuln-issue.priority}}. Description: {{get-vuln-issue.summary}}. Mitigation: {{get-vuln-issue.mitigation_steps}}. Patch status: {{get-vuln-issue.status}}."
- name: send-advisory-email
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_segment_email}}"
subject: "Lenovo Security Advisory: {{affected_product_line}}"
body: "A security vulnerability has been identified affecting {{affected_product_line}} systems. Severity: {{get-vuln-issue.priority}}. Please visit {{update-advisory.url}} for details and mitigation steps."
- name: alert-security
type: call
call: "slack.post-message"
with:
channel: "{{security_channel}}"
text: "SECURITY ALERT: {{get-vuln-issue.summary}} | Product: {{affected_product_line}} | Severity: {{get-vuln-issue.priority}} | SNOW: {{create-security-incident.number}} | Advisory: {{update-advisory.url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://lenovo-eng.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.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: confluence
baseUri: "https://lenovo-eng.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Validates server configurations by pulling build specs from SAP, running compliance checks against baselines, documenting results in SharePoint, and alerting quality teams.
naftiko: "0.5"
info:
label: "Server Configuration Validation Pipeline"
description: "Validates server configurations by pulling build specs from SAP, running compliance checks against baselines, documenting results in SharePoint, and alerting quality teams."
tags:
- server
- configuration
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: server-ops
port: 8080
tools:
- name: server-configuration-validation
description: "Validates server configurations."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Server Configuration Validation Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Configures server rack deployments by pulling orders from SAP, generating rack diagrams in Confluence, creating build tasks in Jira, and notifying the deployment team.
naftiko: "0.5"
info:
label: "Server Rack Configuration Orchestrator"
description: "Configures server rack deployments by pulling orders from SAP, generating rack diagrams in Confluence, creating build tasks in Jira, and notifying the deployment team."
tags:
- server
- rack-configuration
- sap
- confluence
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: server-ops
port: 8080
tools:
- name: server-rack-configuration
description: "Configures server rack deployments."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Server Rack Configuration Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a ThinkSystem server return is initiated, validates warranty via Lenovo API, creates a Salesforce case for the account, opens a ServiceNow logistics ticket for reverse shipping, and notifies the customer via SendGrid.
naftiko: "0.5"
info:
label: "Server RMA Processing Orchestrator"
description: "When a ThinkSystem server return is initiated, validates warranty via Lenovo API, creates a Salesforce case for the account, opens a ServiceNow logistics ticket for reverse shipping, and notifies the customer via SendGrid."
tags:
- support
- rma
- salesforce
- servicenow
- sendgrid
- warranty
capability:
exposes:
- type: mcp
namespace: support-rma
port: 8080
tools:
- name: process-server-rma
description: "Given a serial number, Salesforce account ID, and customer email, validate warranty, create cases, and notify the customer."
inputParameters:
- name: serial_number
in: body
type: string
description: "The Lenovo ThinkSystem serial number."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: customer_email
in: body
type: string
description: "The customer contact email."
- name: issue_description
in: body
type: string
description: "Description of the hardware issue."
steps:
- name: validate-warranty
type: call
call: "lenovo-product-api.get-warranty"
with:
serial_number: "{{serial_number}}"
- name: create-sf-case
type: call
call: "salesforce.create-case"
with:
account_id: "{{account_id}}"
subject: "RMA Request: {{serial_number}} — {{validate-warranty.product_name}}"
description: "{{issue_description}}. Warranty: {{validate-warranty.warranty_status}}. Expiry: {{validate-warranty.expiry_date}}."
type: "RMA"
- name: create-logistics-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "RMA logistics: {{serial_number}}"
category: "rma_logistics"
description: "Reverse shipment for {{validate-warranty.product_name}} (S/N: {{serial_number}}). Salesforce case: {{create-sf-case.id}}. Customer: {{customer_email}}."
assigned_group: "Logistics_RMA"
- name: notify-customer
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Lenovo RMA Initiated — {{create-sf-case.CaseNumber}}"
body: "Dear Customer, your RMA for {{validate-warranty.product_name}} (S/N: {{serial_number}}) has been initiated. Case: {{create-sf-case.CaseNumber}}. A prepaid shipping label will be sent within 24 hours."
consumes:
- type: http
namespace: lenovo-product-api
baseUri: "https://supportapi.lenovo.com/v2.5"
authentication:
type: bearer
token: "$secrets.lenovo_support_api_key"
resources:
- name: warranty
path: "/warranty?Serial={{serial_number}}"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-warranty
method: GET
- type: http
namespace: salesforce
baseUri: "https://lenovo.my.salesforce.com/services/data/v58.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://lenovo.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: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Looks up field service repair cases in ServiceNow including technician assignment and repair status.
naftiko: "0.5"
info:
label: "ServiceNow Field Service Case Lookup"
description: "Looks up field service repair cases in ServiceNow including technician assignment and repair status."
tags:
- field-service
- servicenow
capability:
exposes:
- type: mcp
namespace: field-service
port: 8080
tools:
- name: servicenow_field_service_case_lookup
description: "Looks up field service repair cases in ServiceNow including technician assignment and repair status.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "servicenow.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: servicenow
baseUri: "https://lenovo-servicenow.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a ServiceNow warranty support case by number and returns priority, status, assigned group, and resolution notes. Used by support agents to quickly review case context.
naftiko: "0.5"
info:
label: "ServiceNow Warranty Case Lookup"
description: "Retrieves a ServiceNow warranty support case by number and returns priority, status, assigned group, and resolution notes. Used by support agents to quickly review case context."
tags:
- support
- itsm
- servicenow
- warranty
capability:
exposes:
- type: mcp
namespace: support-warranty
port: 8080
tools:
- name: get-warranty-case
description: "Look up a ServiceNow warranty case by case number. Returns priority, state, assigned group, short description, and resolution notes."
inputParameters:
- name: case_number
in: body
type: string
description: "The ServiceNow case number."
call: "servicenow.get-case"
with:
case_number: "{{case_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: short_description
type: string
mapping: "$.result.short_description"
- name: resolution_notes
type: string
mapping: "$.result.close_notes"
consumes:
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case?sysparm_query=number={{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-case
method: GET
When a SAP delivery is delayed past the committed date, looks up the Shopify order, notifies the customer via SendGrid with a revised ETA, and creates a Zendesk proactive ticket.
naftiko: "0.5"
info:
label: "Shipping Delay Notification"
description: "When a SAP delivery is delayed past the committed date, looks up the Shopify order, notifies the customer via SendGrid with a revised ETA, and creates a Zendesk proactive ticket."
tags:
- logistics
- e-commerce
- sap
- sap-s4hana
- shopify
- sendgrid
- zendesk
- customer-service
capability:
exposes:
- type: mcp
namespace: logistics-delays
port: 8080
tools:
- name: notify-shipping-delay
description: "Given a SAP delivery number, Shopify order ID, and customer email, notify the customer of a delay and create a proactive support ticket."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP outbound delivery number."
- name: order_id
in: body
type: string
description: "The Shopify order ID."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: revised_eta
in: body
type: string
description: "The revised estimated delivery date."
steps:
- name: get-delivery
type: call
call: "sap.get-delivery"
with:
delivery_number: "{{delivery_number}}"
- name: get-order
type: call
call: "shopify.get-order"
with:
order_id: "{{order_id}}"
- name: email-customer
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Lenovo Order #{{order_id}} — Shipping Update"
body: "Hi, we wanted to let you know that your order #{{order_id}} has been delayed. Original date: {{get-delivery.goods_issue_date}}. Revised ETA: {{revised_eta}}. We apologize for the inconvenience."
- name: create-proactive-ticket
type: call
call: "zendesk.create-ticket"
with:
subject: "Proactive: Shipping delay — Order #{{order_id}}"
description: "Delivery {{delivery_number}} delayed. Original: {{get-delivery.goods_issue_date}}. Revised: {{revised_eta}}. Customer notified via email."
requester_email: "{{customer_email}}"
priority: "high"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: deliveries
path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: orders
path: "/orders/{{order_id}}.json"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets.json"
operations:
- name: create-ticket
method: POST
Retrieves a Lenovo e-commerce order from Shopify by order ID. Returns order status, total price, line items, and shipping address. Used by e-commerce ops to verify direct-to-consumer orders.
naftiko: "0.5"
info:
label: "Shopify E-Commerce Order Lookup"
description: "Retrieves a Lenovo e-commerce order from Shopify by order ID. Returns order status, total price, line items, and shipping address. Used by e-commerce ops to verify direct-to-consumer orders."
tags:
- e-commerce
- shopify
- order-management
capability:
exposes:
- type: mcp
namespace: ecommerce-orders
port: 8080
tools:
- name: get-shopify-order
description: "Look up a Shopify order by order ID. Returns financial status, fulfillment status, total price, and customer email."
inputParameters:
- name: order_id
in: body
type: string
description: "The Shopify order ID."
call: "shopify.get-order"
with:
order_id: "{{order_id}}"
outputParameters:
- name: financial_status
type: string
mapping: "$.order.financial_status"
- name: fulfillment_status
type: string
mapping: "$.order.fulfillment_status"
- name: total_price
type: string
mapping: "$.order.total_price"
- name: customer_email
type: string
mapping: "$.order.email"
consumes:
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: orders
path: "/orders/{{order_id}}.json"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
Activates a Shopify price rule for a product promotion, creates a HubSpot marketing email campaign for channel partners, and posts the campaign details to the marketing Slack channel.
naftiko: "0.5"
info:
label: "Shopify Promotion Campaign Launcher"
description: "Activates a Shopify price rule for a product promotion, creates a HubSpot marketing email campaign for channel partners, and posts the campaign details to the marketing Slack channel."
tags:
- e-commerce
- marketing
- shopify
- hubspot
- slack
- promotions
capability:
exposes:
- type: mcp
namespace: ecommerce-promotions
port: 8080
tools:
- name: launch-promotion
description: "Given a Shopify price rule ID, HubSpot email campaign ID, and promotion details, activate the promotion and notify the team."
inputParameters:
- name: price_rule_id
in: body
type: string
description: "The Shopify price rule ID."
- name: hubspot_campaign_id
in: body
type: string
description: "The HubSpot marketing email campaign ID."
- name: promotion_name
in: body
type: string
description: "Human-readable promotion name."
- name: marketing_channel
in: body
type: string
description: "Slack channel ID for marketing."
steps:
- name: activate-price-rule
type: call
call: "shopify.activate-price-rule"
with:
price_rule_id: "{{price_rule_id}}"
- name: send-campaign
type: call
call: "hubspot.send-campaign"
with:
campaign_id: "{{hubspot_campaign_id}}"
- name: notify-marketing
type: call
call: "slack.post-message"
with:
channel: "{{marketing_channel}}"
text: "Promotion LIVE: {{promotion_name}} | Shopify price rule: {{price_rule_id}} active | HubSpot campaign: {{hubspot_campaign_id}} sent | Discount: {{activate-price-rule.discount_value}}{{activate-price-rule.discount_type}}"
consumes:
- type: http
namespace: shopify
baseUri: "https://lenovo-store.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: price-rules
path: "/price_rules/{{price_rule_id}}.json"
inputParameters:
- name: price_rule_id
in: path
operations:
- name: activate-price-rule
method: PUT
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaigns
path: "/emails/{{campaign_id}}/send"
inputParameters:
- name: campaign_id
in: path
operations:
- name: send-campaign
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up product warranty registration details from Shopify for customer service verification.
naftiko: "0.5"
info:
label: "Shopify Warranty Registration Lookup"
description: "Looks up product warranty registration details from Shopify for customer service verification."
tags:
- warranty
- shopify
capability:
exposes:
- type: mcp
namespace: warranty
port: 8080
tools:
- name: shopify_warranty_registration_lookup
description: "Looks up product warranty registration details from Shopify for customer service verification.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "shopify.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: shopify
baseUri: "https://lenovo-shopify.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.shopify_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Posts a message to a Slack channel. Used by automated workflows to notify Lenovo teams about manufacturing alerts, supply chain updates, or release milestones.
naftiko: "0.5"
info:
label: "Slack Channel Message Post"
description: "Posts a message to a Slack channel. Used by automated workflows to notify Lenovo teams about manufacturing alerts, supply chain updates, or release milestones."
tags:
- collaboration
- slack
- notifications
capability:
exposes:
- type: mcp
namespace: collab-notifications
port: 8080
tools:
- name: post-slack-message
description: "Post a message to a Slack channel by channel ID."
inputParameters:
- name: channel_id
in: body
type: string
description: "The Slack channel ID."
- name: message_text
in: body
type: string
description: "The message text to post."
call: "slack.post-message"
with:
channel: "{{channel_id}}"
text: "{{message_text}}"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Posts messages to Lenovo engineering Slack channels for cross-team communication and announcements.
naftiko: "0.5"
info:
label: "Slack Engineering Channel Post"
description: "Posts messages to Lenovo engineering Slack channels for cross-team communication and announcements."
tags:
- communications
- slack
capability:
exposes:
- type: mcp
namespace: communications
port: 8080
tools:
- name: slack_engineering_channel_post
description: "Posts messages to Lenovo engineering Slack channels for cross-team communication and announcements.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "slack.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: slack
baseUri: "https://lenovo-slack.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Deploys smart office solutions by configuring devices in Azure IoT, provisioning management in SAP, creating documentation in Confluence, and handing off to the customer.
naftiko: "0.5"
info:
label: "Smart Office Solution Deployment Pipeline"
description: "Deploys smart office solutions by configuring devices in Azure IoT, provisioning management in SAP, creating documentation in Confluence, and handing off to the customer."
tags:
- smart-office
- iot
- azure-iot
- sap
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: smart-ops
port: 8080
tools:
- name: smart-office-solution-deployment
description: "Deploys smart office solutions."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Smart Office Solution Deployment Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new component supplier is approved, creates the vendor master in SAP, adds the contact to HubSpot for relationship tracking, provisions a SharePoint collaboration folder, and notifies procurement in Slack.
naftiko: "0.5"
info:
label: "Supplier Onboarding Orchestrator"
description: "When a new component supplier is approved, creates the vendor master in SAP, adds the contact to HubSpot for relationship tracking, provisions a SharePoint collaboration folder, and notifies procurement in Slack."
tags:
- procurement
- supply-chain
- sap
- sap-s4hana
- hubspot
- sharepoint
- slack
- supplier-management
capability:
exposes:
- type: mcp
namespace: procurement-suppliers
port: 8080
tools:
- name: onboard-supplier
description: "Given supplier details, create the vendor in SAP, add contact to HubSpot, provision a SharePoint folder, and notify the team."
inputParameters:
- name: supplier_name
in: body
type: string
description: "The supplier company name."
- name: contact_email
in: body
type: string
description: "Primary supplier contact email."
- name: contact_name
in: body
type: string
description: "Primary supplier contact full name."
- name: category
in: body
type: string
description: "Supplier category (e.g., memory, display, battery)."
- name: procurement_channel
in: body
type: string
description: "Slack channel ID for procurement."
steps:
- name: create-vendor
type: call
call: "sap.create-vendor"
with:
supplier_name: "{{supplier_name}}"
category: "{{category}}"
- name: create-contact
type: call
call: "hubspot.create-contact"
with:
email: "{{contact_email}}"
firstname: "{{contact_name}}"
company: "{{supplier_name}}"
hs_lead_status: "SUPPLIER"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "procurement_site"
folder_path: "Suppliers/{{supplier_name}}"
- name: notify-procurement
type: call
call: "slack.post-message"
with:
channel: "{{procurement_channel}}"
text: "New Supplier Onboarded: {{supplier_name}} | Category: {{category}} | SAP Vendor: {{create-vendor.vendor_id}} | Contact: {{contact_name}} ({{contact_email}}) | Docs: {{provision-folder.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: vendors
path: "/A_Supplier"
operations:
- name: create-vendor
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts"
operations:
- name: create-contact
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When SAP inventory for a critical component drops below safety stock, creates a ServiceNow P2 incident for supply chain ops, notifies the procurement Slack channel, and emails the supplier contact via SendGrid.
naftiko: "0.5"
info:
label: "Supply Chain Shortage Alert"
description: "When SAP inventory for a critical component drops below safety stock, creates a ServiceNow P2 incident for supply chain ops, notifies the procurement Slack channel, and emails the supplier contact via SendGrid."
tags:
- supply-chain
- manufacturing
- sap
- sap-s4hana
- servicenow
- slack
- sendgrid
capability:
exposes:
- type: mcp
namespace: supply-alerts
port: 8080
tools:
- name: trigger-shortage-alert
description: "Given a material number, plant code, and supplier email, check stock levels and trigger a shortage alert across ServiceNow, Slack, and email."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number of the component."
- name: plant_code
in: body
type: string
description: "The SAP plant code."
- name: supplier_email
in: body
type: string
description: "The email address of the primary supplier contact."
- name: procurement_channel
in: body
type: string
description: "The Slack channel ID for procurement alerts."
steps:
- name: check-stock
type: call
call: "sap.get-stock"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Stock shortage: {{material_number}} at {{plant_code}}"
urgency: "2"
impact: "2"
category: "supply_chain"
description: "Material {{material_number}} at plant {{plant_code}} is below safety stock. Current unrestricted: {{check-stock.unrestricted_stock}}."
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "{{procurement_channel}}"
text: "SHORTAGE ALERT: Material {{material_number}} at {{plant_code}} — current stock: {{check-stock.unrestricted_stock}}. ServiceNow: {{create-incident.number}}. Supplier notification sent."
- name: email-supplier
type: call
call: "sendgrid.send-email"
with:
to: "{{supplier_email}}"
subject: "Urgent: Stock shortage for material {{material_number}}"
body: "Dear Supplier, material {{material_number}} at Lenovo plant {{plant_code}} has dropped below safety stock (current: {{check-stock.unrestricted_stock}}). Please expedite next shipment. Reference: {{create-incident.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant_code}}')"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Tracks carbon emissions across the supply chain by collecting data from SAP, calculating footprints in Snowflake, generating ESG reports in SharePoint, and presenting to leadership.
naftiko: "0.5"
info:
label: "Sustainability Carbon Tracking Pipeline"
description: "Tracks carbon emissions across the supply chain by collecting data from SAP, calculating footprints in Snowflake, generating ESG reports in SharePoint, and presenting to leadership."
tags:
- sustainability
- carbon
- sap
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability-ops
port: 8080
tools:
- name: sustainability-carbon-tracking
description: "Tracks carbon emissions across the supply chain."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Sustainability Carbon Tracking Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages ThinkPad and ThinkStation marketing campaigns by pulling performance from HubSpot, analyzing effectiveness in Snowflake, optimizing budgets, and reporting to marketing leadership.
naftiko: "0.5"
info:
label: "Think Brand Marketing Campaign Pipeline"
description: "Manages ThinkPad and ThinkStation marketing campaigns by pulling performance from HubSpot, analyzing effectiveness in Snowflake, optimizing budgets, and reporting to marketing leadership."
tags:
- marketing
- brand
- hubspot
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: think-ops
port: 8080
tools:
- name: think-brand-marketing-campaign
description: "Manages ThinkPad and ThinkStation marketing campaigns."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Think Brand Marketing Campaign Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a vendor invoice from SAP, matches against the purchase order, and if discrepancies exist, creates a ServiceNow task for AP review and notifies finance in Slack.
naftiko: "0.5"
info:
label: "Vendor Invoice Reconciliation"
description: "Retrieves a vendor invoice from SAP, matches against the purchase order, and if discrepancies exist, creates a ServiceNow task for AP review and notifies finance in Slack."
tags:
- finance
- procurement
- sap
- sap-s4hana
- servicenow
- slack
- accounts-payable
capability:
exposes:
- type: mcp
namespace: finance-ap
port: 8080
tools:
- name: reconcile-invoice
description: "Given a SAP invoice number and PO number, compare amounts and flag discrepancies to ServiceNow and Slack."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
- name: po_number
in: body
type: string
description: "The corresponding SAP purchase order number."
- name: finance_channel
in: body
type: string
description: "Slack channel ID for the finance team."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: create-review
type: call
call: "servicenow.create-task"
with:
short_description: "Invoice reconciliation: {{invoice_number}} vs PO {{po_number}}"
description: "Invoice amount: {{get-invoice.total_amount}} {{get-invoice.currency}}. PO amount: {{get-po.total_value}} {{get-po.currency}}. Vendor: {{get-po.vendor}}. Invoice date: {{get-invoice.document_date}}."
assigned_group: "Accounts_Payable"
category: "invoice_reconciliation"
- name: notify-finance
type: call
call: "slack.post-message"
with:
channel: "{{finance_channel}}"
text: "Invoice Reconciliation: Invoice {{invoice_number}} (${{get-invoice.total_amount}}) vs PO {{po_number}} (${{get-po.total_value}}) | Vendor: {{get-po.vendor}} | SNOW: {{create-review.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap-po
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates vendor scorecards by pulling delivery and quality metrics from SAP, calculating scores in Snowflake, creating scorecards in SharePoint, and sharing with procurement.
naftiko: "0.5"
info:
label: "Vendor Scorecard Generation Pipeline"
description: "Generates vendor scorecards by pulling delivery and quality metrics from SAP, calculating scores in Snowflake, creating scorecards in SharePoint, and sharing with procurement."
tags:
- vendor-management
- scorecards
- sap
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-ops
port: 8080
tools:
- name: vendor-scorecard-generation
description: "Generates vendor scorecards."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Vendor Scorecard Generation Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Initiates an inter-plant stock transfer in SAP between two Lenovo warehouses, creates a ServiceNow logistics task for the transfer, and notifies the supply chain Slack channel.
naftiko: "0.5"
info:
label: "Warehouse Transfer Orchestrator"
description: "Initiates an inter-plant stock transfer in SAP between two Lenovo warehouses, creates a ServiceNow logistics task for the transfer, and notifies the supply chain Slack channel."
tags:
- supply-chain
- logistics
- sap
- sap-s4hana
- servicenow
- slack
- warehouse
capability:
exposes:
- type: mcp
namespace: supply-transfers
port: 8080
tools:
- name: initiate-stock-transfer
description: "Given a material number, source plant, destination plant, and quantity, create a SAP transfer order, ServiceNow task, and notify the team."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: source_plant
in: body
type: string
description: "The source plant code."
- name: destination_plant
in: body
type: string
description: "The destination plant code."
- name: quantity
in: body
type: number
description: "The quantity to transfer."
- name: supply_chain_channel
in: body
type: string
description: "Slack channel ID for supply chain."
steps:
- name: create-transfer
type: call
call: "sap.create-stock-transfer"
with:
material: "{{material_number}}"
source_plant: "{{source_plant}}"
destination_plant: "{{destination_plant}}"
quantity: "{{quantity}}"
- name: create-logistics-task
type: call
call: "servicenow.create-task"
with:
short_description: "Stock transfer: {{material_number}} from {{source_plant}} to {{destination_plant}}"
description: "Transfer order {{create-transfer.order_number}}. Material: {{material_number}}. Qty: {{quantity}}. Source: {{source_plant}}. Dest: {{destination_plant}}."
assigned_group: "Logistics_Warehouse"
category: "stock_transfer"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{supply_chain_channel}}"
text: "Stock Transfer: {{material_number}} | Qty: {{quantity}} | {{source_plant}} -> {{destination_plant}} | SAP: {{create-transfer.order_number}} | SNOW: {{create-logistics-task.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://lenovo-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: transfers
path: "/A_StockTransferOrder"
operations:
- name: create-stock-transfer
method: POST
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Analyzes warranty claims by aggregating data from ServiceNow, running failure pattern analysis in Snowflake, generating reports in Power BI, and briefing product teams.
naftiko: "0.5"
info:
label: "Warranty Claim Analytics Pipeline"
description: "Analyzes warranty claims by aggregating data from ServiceNow, running failure pattern analysis in Snowflake, generating reports in Power BI, and briefing product teams."
tags:
- warranty
- analytics
- servicenow
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: warranty-ops
port: 8080
tools:
- name: warranty-claim-analytics
description: "Analyzes warranty claims."
inputParameters:
- name: entity_id
in: body
type: string
description: "The entity identifier."
- name: notification_email
in: body
type: string
description: "Notification email address."
steps:
- name: gather-data
type: call
call: "primary.get-data"
with:
entity_id: "{{entity_id}}"
- name: process-data
type: call
call: "analytics.process"
with:
entity_id: "{{entity_id}}"
input: "{{gather-data.results}}"
- name: execute-action
type: call
call: "action.execute"
with:
entity_id: "{{entity_id}}"
recommendations: "{{process-data.output}}"
- name: notify-stakeholders
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notification_email}}"
text: "Warranty Claim Analytics Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
consumes:
- type: http
namespace: primary
baseUri: "https://lenovo-api.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.lenovo_api_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: analytics
baseUri: "https://lenovo-analytics.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: processing
path: "/process"
operations:
- name: process
method: POST
- type: http
namespace: action
baseUri: "https://lenovo-ops.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.ops_token"
resources:
- name: actions
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a Zendesk warranty ticket is received, validates the serial number against the Lenovo product database, creates a ServiceNow warranty case, and sends the customer a claim confirmation via SendGrid.
naftiko: "0.5"
info:
label: "Warranty Claim Processor"
description: "When a Zendesk warranty ticket is received, validates the serial number against the Lenovo product database, creates a ServiceNow warranty case, and sends the customer a claim confirmation via SendGrid."
tags:
- support
- warranty
- zendesk
- servicenow
- sendgrid
- customer-service
capability:
exposes:
- type: mcp
namespace: support-warranty-claims
port: 8080
tools:
- name: process-warranty-claim
description: "Given a Zendesk ticket ID, serial number, and customer email, validate warranty eligibility, create a ServiceNow case, and confirm with the customer."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk support ticket ID."
- name: serial_number
in: body
type: string
description: "The Lenovo product serial number."
- name: customer_email
in: body
type: string
description: "The customer email address."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
- name: validate-warranty
type: call
call: "lenovo-product-api.get-warranty"
with:
serial_number: "{{serial_number}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Warranty claim: {{serial_number}} — {{get-ticket.subject}}"
description: "Product: {{validate-warranty.product_name}}. Warranty status: {{validate-warranty.warranty_status}}. Expiry: {{validate-warranty.expiry_date}}. Customer issue: {{get-ticket.subject}}."
category: "warranty"
contact_email: "{{customer_email}}"
- name: confirm-customer
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Lenovo Warranty Claim Received — {{create-case.number}}"
body: "Dear Customer, your warranty claim for {{validate-warranty.product_name}} (S/N: {{serial_number}}) has been received. Case number: {{create-case.number}}. Warranty status: {{validate-warranty.warranty_status}}. We will follow up within 2 business days."
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: lenovo-product-api
baseUri: "https://supportapi.lenovo.com/v2.5"
authentication:
type: bearer
token: "$secrets.lenovo_support_api_key"
resources:
- name: warranty
path: "/warranty?Serial={{serial_number}}"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-warranty
method: GET
- type: http
namespace: servicenow
baseUri: "https://lenovo.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves an employee record from Workday by worker ID. Returns full name, job title, department, cost center, and manager. Used across HR and operations for employee context.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves an employee record from Workday by worker ID. Returns full name, job title, department, cost center, and manager. Used across HR and operations for employee context."
tags:
- hr
- workday
- employee
capability:
exposes:
- type: mcp
namespace: hr-employee
port: 8080
tools:
- name: get-employee
description: "Look up a Workday employee by worker ID. Returns full name, job title, department, cost center, and manager name."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.fullName"
- name: job_title
type: string
mapping: "$.jobTitle"
- name: department
type: string
mapping: "$.department"
- name: cost_center
type: string
mapping: "$.costCenter"
- name: manager
type: string
mapping: "$.manager.fullName"
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
Retrieves premier support ticket details from Zendesk including SLA compliance and escalation status.
naftiko: "0.5"
info:
label: "Zendesk Premier Support Ticket Lookup"
description: "Retrieves premier support ticket details from Zendesk including SLA compliance and escalation status."
tags:
- support
- zendesk
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: zendesk_premier_support_ticket_lookup
description: "Retrieves premier support ticket details from Zendesk including SLA compliance and escalation status.."
inputParameters:
- name: record_id
in: body
type: string
description: "The record identifier."
call: "zendesk.get-record"
with:
record_id: "{{record_id}}"
outputParameters:
- name: data
type: object
mapping: "$.data"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo-zendesk.lenovo.com/api/v1"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: records
path: "/records/{{record_id}}"
inputParameters:
- name: record_id
in: path
operations:
- name: get-record
method: GET
Retrieves a Zendesk support ticket by ID from the Lenovo consumer support portal. Returns ticket subject, status, requester, and latest comment. Used by tier-1 agents for quick case review.
naftiko: "0.5"
info:
label: "Zendesk Support Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID from the Lenovo consumer support portal. Returns ticket subject, status, requester, and latest comment. Used by tier-1 agents for quick case review."
tags:
- support
- zendesk
- customer-service
capability:
exposes:
- type: mcp
namespace: support-tickets
port: 8080
tools:
- name: get-support-ticket
description: "Look up a Zendesk support ticket by ID. Returns subject, status, requester name, priority, and latest comment body."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.ticket.subject"
- name: status
type: string
mapping: "$.ticket.status"
- name: requester
type: string
mapping: "$.ticket.requester.name"
- name: priority
type: string
mapping: "$.ticket.priority"
consumes:
- type: http
namespace: zendesk
baseUri: "https://lenovo.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET