Lenovo Capabilities

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

Sort
Expand

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