IKEA Capabilities

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

Sort
Expand

Retrieves conversion funnel data from Adobe Analytics for IKEA.com, returning drop-off rates at browse, cart, and checkout stages.

naftiko: "0.5"
info:
  label: "Adobe Analytics E-Commerce Funnel Reporter"
  description: "Retrieves conversion funnel data from Adobe Analytics for IKEA.com, returning drop-off rates at browse, cart, and checkout stages."
  tags:
    - e-commerce
    - analytics
    - adobe-analytics
capability:
  exposes:
    - type: mcp
      namespace: ecommerce-funnel
      port: 8080
      tools:
        - name: get-funnel-data
          description: "Retrieve e-commerce funnel metrics from Adobe Analytics."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
            - name: date_range
              in: body
              type: string
              description: "Date range."
          call: "adobe-analytics.get-report"
          with:
            rsid: "{{report_suite_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: browse_to_cart
              type: string
              mapping: "$.report.data.rows[0].value"
            - name: cart_to_checkout
              type: string
              mapping: "$.report.data.rows[1].value"
            - name: checkout_to_purchase
              type: string
              mapping: "$.report.data.rows[2].value"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST

Retrieves product page performance metrics from Adobe Analytics, returning page views, add-to-cart rate, and conversion rate for a specific article.

naftiko: "0.5"
info:
  label: "Adobe Analytics Product Page Performance"
  description: "Retrieves product page performance metrics from Adobe Analytics, returning page views, add-to-cart rate, and conversion rate for a specific article."
  tags:
    - marketing
    - analytics
    - adobe-analytics
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-product-page-metrics
          description: "Look up product page performance from Adobe Analytics. Returns views, add-to-cart, and conversion rate."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The IKEA article number."
          call: "adobe-analytics.get-product-report"
          with:
            article: "{{article_number}}"
          outputParameters:
            - name: page_views
              type: number
              mapping: "$.data.pageViews"
            - name: add_to_cart_rate
              type: number
              mapping: "$.data.addToCartRate"
            - name: conversion_rate
              type: number
              mapping: "$.data.conversionRate"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/ikea"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/reports"
          operations:
            - name: get-product-report
              method: POST

Triggers an Adobe Photoshop API batch action to generate product-in-room mockup images for the IKEA catalog, returning the output image URL.

naftiko: "0.5"
info:
  label: "Adobe Photoshop Room Scene Generator"
  description: "Triggers an Adobe Photoshop API batch action to generate product-in-room mockup images for the IKEA catalog, returning the output image URL."
  tags:
    - design
    - marketing
    - adobe-photoshop
capability:
  exposes:
    - type: mcp
      namespace: product-imaging
      port: 8080
      tools:
        - name: generate-room-scene
          description: "Generate a product-in-room mockup via Adobe Photoshop API."
          inputParameters:
            - name: product_image_url
              in: body
              type: string
              description: "URL of the product image."
            - name: room_template
              in: body
              type: string
              description: "Room template name (e.g., living_room, bedroom)."
          call: "photoshop.create-composite"
          with:
            input_url: "{{product_image_url}}"
            template: "{{room_template}}"
          outputParameters:
            - name: output_url
              type: string
              mapping: "$.output.href"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: photoshop
      baseUri: "https://image.adobe.io/pie/psdService"
      authentication:
        type: bearer
        token: "$secrets.adobe_photoshop_token"
      resources:
        - name: composites
          path: "/renditionCreate"
          operations:
            - name: create-composite
              method: POST

Retrieves augmented reality room planner session data from Snowflake, returning session count, average duration, most placed articles, and conversion to purchase rate.

naftiko: "0.5"
info:
  label: "AR Room Planner Session Lookup"
  description: "Retrieves augmented reality room planner session data from Snowflake, returning session count, average duration, most placed articles, and conversion to purchase rate."
  tags:
    - e-commerce
    - analytics
    - snowflake
    - ar
capability:
  exposes:
    - type: mcp
      namespace: digital-experience
      port: 8080
      tools:
        - name: get-ar-planner-metrics
          description: "Look up AR room planner session metrics from Snowflake. Returns usage and conversion data."
          inputParameters:
            - name: market
              in: body
              type: string
              description: "Market code."
            - name: date_range_start
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_range_end
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "snowflake.query-ar-sessions"
          with:
            market: "{{market}}"
            start: "{{date_range_start}}"
            end: "{{date_range_end}}"
          outputParameters:
            - name: session_count
              type: number
              mapping: "$.data[0].session_count"
            - name: avg_duration_seconds
              type: number
              mapping: "$.data[0].avg_duration"
            - name: purchase_conversion_rate
              type: number
              mapping: "$.data[0].conversion_rate"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-ar-sessions
              method: POST

Triggers generation of assembly instruction PDFs for new products, uploads them to SharePoint, and links them to the product in the SAP catalog.

naftiko: "0.5"
info:
  label: "Assembly Instructions PDF Generator"
  description: "Triggers generation of assembly instruction PDFs for new products, uploads them to SharePoint, and links them to the product in the SAP catalog."
  tags:
    - design
    - documents
    - sharepoint
    - sap
capability:
  exposes:
    - type: mcp
      namespace: assembly-docs
      port: 8080
      tools:
        - name: generate-assembly-instructions
          description: "Generate and publish assembly instructions for a product."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The product article number."
            - name: document_url
              in: body
              type: string
              description: "URL of the source instruction document."
          steps:
            - name: upload-to-sharepoint
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "product_docs"
                folder_path: "AssemblyInstructions/{{article_number}}"
                file_url: "{{document_url}}"
            - name: link-to-product
              type: call
              call: "sap.update-product-doc"
              with:
                article_number: "{{article_number}}"
                document_url: "{{upload-to-sharepoint.download_url}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: uploads
          path: "/{{site_id}}/drive/root:/{{folder_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/A_Product('{{article_number}}')"
          inputParameters:
            - name: article_number
              in: path
          operations:
            - name: update-product-doc
              method: PATCH

Retrieves an IKEA co-worker's Azure AD profile, returning display name, job title, department, and office location.

naftiko: "0.5"
info:
  label: "Azure Active Directory User Lookup"
  description: "Retrieves an IKEA co-worker's Azure AD profile, returning display name, job title, department, and office location."
  tags:
    - it-operations
    - identity
    - azure-active-directory
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-ad-user
          description: "Look up a co-worker in Azure Active Directory by UPN."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "The user principal name."
          call: "azuread.get-user"
          with:
            user_upn: "{{user_upn}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: job_title
              type: string
              mapping: "$.jobTitle"
            - name: department
              type: string
              mapping: "$.department"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_upn}}"
          inputParameters:
            - name: user_upn
              in: path
          operations:
            - name: get-user
              method: GET

Retrieves Azure Active Directory group memberships and application assignments for an IKEA co-worker, returning assigned apps, roles, and last sign-in.

naftiko: "0.5"
info:
  label: "Azure AD Co-Worker Access Lookup"
  description: "Retrieves Azure Active Directory group memberships and application assignments for an IKEA co-worker, returning assigned apps, roles, and last sign-in."
  tags:
    - security
    - identity
    - azure-active-directory
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-co-worker-access
          description: "Look up Azure AD access for a co-worker. Returns group memberships, apps, and last sign-in."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The co-worker email address."
          call: "azure-ad.get-user-access"
          with:
            email: "{{user_email}}"
          outputParameters:
            - name: group_count
              type: number
              mapping: "$.groupCount"
            - name: assigned_apps
              type: array
              mapping: "$.appRoleAssignments"
            - name: last_sign_in
              type: string
              mapping: "$.lastSignInDateTime"
  consumes:
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user-access
              method: GET

Retrieves the latest build status from Azure DevOps for an IKEA application pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Checker"
  description: "Retrieves the latest build status from Azure DevOps for an IKEA application pipeline."
  tags:
    - it-operations
    - cicd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: build-status
      port: 8080
      tools:
        - name: get-build-status
          description: "Check the latest Azure DevOps build status."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azdevops.get-latest-build"
          with:
            project: "{{project}}"
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: azdevops
      baseUri: "https://dev.azure.com/ikea"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdevops_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds"
          inputParameters:
            - name: project
              in: path
            - name: definitions
              in: query
              value: "{{pipeline_id}}"
            - name: $top
              in: query
              value: "1"
            - name: api-version
              in: query
              value: "7.0"
          operations:
            - name: get-latest-build
              method: GET

Uploads a compliance or regulatory document to the designated Box folder and returns a shared link.

naftiko: "0.5"
info:
  label: "Box Compliance Document Uploader"
  description: "Uploads a compliance or regulatory document to the designated Box folder and returns a shared link."
  tags:
    - compliance
    - documents
    - box
capability:
  exposes:
    - type: mcp
      namespace: compliance-docs
      port: 8080
      tools:
        - name: upload-compliance-doc
          description: "Upload a compliance document to Box."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Box folder ID."
            - name: file_name
              in: body
              type: string
              description: "File name."
            - name: file_content
              in: body
              type: string
              description: "Base64-encoded file content."
          call: "box.upload-file"
          with:
            folder_id: "{{folder_id}}"
            file_name: "{{file_name}}"
            content: "{{file_content}}"
          outputParameters:
            - name: file_id
              type: string
              mapping: "$.entries[0].id"
            - name: shared_link
              type: string
              mapping: "$.entries[0].shared_link.url"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Creates a marketing visual in Canva from a template for store-level promotions and returns the design URL.

naftiko: "0.5"
info:
  label: "Canva Marketing Material Generator"
  description: "Creates a marketing visual in Canva from a template for store-level promotions and returns the design URL."
  tags:
    - marketing
    - design
    - canva
capability:
  exposes:
    - type: mcp
      namespace: marketing-design
      port: 8080
      tools:
        - name: create-promo-material
          description: "Create a promotional material from a Canva template."
          inputParameters:
            - name: template_id
              in: body
              type: string
              description: "Canva template ID."
            - name: headline
              in: body
              type: string
              description: "Promotional headline."
            - name: store_name
              in: body
              type: string
              description: "Store name for the material."
          call: "canva.create-design"
          with:
            template_id: "{{template_id}}"
            headline: "{{headline}}"
            store_name: "{{store_name}}"
          outputParameters:
            - name: design_url
              type: string
              mapping: "$.design.editUrl"
  consumes:
    - type: http
      namespace: canva
      baseUri: "https://api.canva.com/v1"
      authentication:
        type: bearer
        token: "$secrets.canva_token"
      resources:
        - name: designs
          path: "/designs"
          operations:
            - name: create-design
              method: POST

Processes a click-and-collect order by reserving inventory in SAP, generating a pick list, sending an SMS notification to the customer via Twilio, and updating the order status in the e-commerce platform.

naftiko: "0.5"
info:
  label: "Click and Collect Order Fulfillment Orchestrator"
  description: "Processes a click-and-collect order by reserving inventory in SAP, generating a pick list, sending an SMS notification to the customer via Twilio, and updating the order status in the e-commerce platform."
  tags:
    - retail
    - e-commerce
    - sap
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: fulfill-click-collect
          description: "Orchestrate click-and-collect fulfillment: reserve stock, generate pick list, notify customer, and update status."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The e-commerce order identifier."
            - name: store_code
              in: body
              type: string
              description: "The pickup store code."
          steps:
            - name: reserve-inventory
              type: call
              call: "sap.reserve-stock"
              with:
                order_id: "{{order_id}}"
                store: "{{store_code}}"
            - name: generate-pick-list
              type: call
              call: "sap.create-pick-list"
              with:
                reservation_id: "{{reserve-inventory.reservation_id}}"
                store: "{{store_code}}"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{reserve-inventory.customer_phone}}"
                body: "Your IKEA order #{{order_id}} is being prepared for pickup at store {{store_code}}. We will notify you when it is ready."
            - name: update-order-status
              type: call
              call: "sap.update-order-status"
              with:
                order_id: "{{order_id}}"
                status: "picking"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: inventory
          path: "/inventory/reservations"
          operations:
            - name: reserve-stock
              method: POST
        - name: pick-lists
          path: "/warehouse/pick-lists"
          operations:
            - name: create-pick-list
              method: POST
        - name: orders
          path: "/orders/{{order_id}}/status"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-order-status
              method: PUT
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Queries Cloudflare for website performance metrics for IKEA's online store, returning request count, bandwidth, and cache hit ratio.

naftiko: "0.5"
info:
  label: "Cloudflare Website Performance Monitor"
  description: "Queries Cloudflare for website performance metrics for IKEA's online store, returning request count, bandwidth, and cache hit ratio."
  tags:
    - e-commerce
    - it-operations
    - cloudflare
capability:
  exposes:
    - type: mcp
      namespace: cdn-performance
      port: 8080
      tools:
        - name: get-cdn-metrics
          description: "Retrieve Cloudflare performance metrics for IKEA.com."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID."
          call: "cloudflare.get-analytics"
          with:
            zone_id: "{{zone_id}}"
          outputParameters:
            - name: total_requests
              type: string
              mapping: "$.result.totals.requests.all"
            - name: bandwidth
              type: string
              mapping: "$.result.totals.bandwidth.all"
            - name: cache_hit_ratio
              type: string
              mapping: "$.result.totals.requests.cached"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: analytics
          path: "/zones/{{zone_id}}/analytics/dashboard"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-analytics
              method: GET

Optimizes store co-worker schedules by pulling foot traffic forecasts from Snowflake, current schedules from Workday, computing optimal shifts, and publishing updated schedules back to Workday.

naftiko: "0.5"
info:
  label: "Co-Worker Scheduling Optimization Orchestrator"
  description: "Optimizes store co-worker schedules by pulling foot traffic forecasts from Snowflake, current schedules from Workday, computing optimal shifts, and publishing updated schedules back to Workday."
  tags:
    - hr
    - operations
    - snowflake
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workforce
      port: 8080
      tools:
        - name: optimize-schedules
          description: "Orchestrate scheduling optimization: forecast traffic, pull schedules, compute optimal shifts, and publish."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: week_start
              in: body
              type: string
              description: "Week start date in YYYY-MM-DD format."
          steps:
            - name: forecast-traffic
              type: call
              call: "snowflake.query-traffic-forecast"
              with:
                store: "{{store_code}}"
                week: "{{week_start}}"
            - name: get-current-schedules
              type: call
              call: "workday.get-schedules"
              with:
                store: "{{store_code}}"
                week: "{{week_start}}"
            - name: compute-optimal
              type: call
              call: "snowflake.run-schedule-optimization"
              with:
                forecast: "{{forecast-traffic.data}}"
                current: "{{get-current-schedules.data}}"
            - name: publish-schedules
              type: call
              call: "workday.update-schedules"
              with:
                store: "{{store_code}}"
                schedules: "{{compute-optimal.optimized_shifts}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-traffic-forecast
              method: POST
            - name: run-schedule-optimization
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/ikea/schedules"
          operations:
            - name: get-schedules
              method: GET
            - name: update-schedules
              method: PUT

When an IKEA co-worker submits a travel expense report in SAP Concur, retrieves the details and notifies the approver via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Concur Travel Expense Report Notifier"
  description: "When an IKEA co-worker submits a travel expense report in SAP Concur, retrieves the details and notifies the approver via Microsoft Teams."
  tags:
    - finance
    - expenses
    - sap-concur
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: expense-approval
      port: 8080
      tools:
        - name: notify-expense-approval
          description: "Fetch Concur expense report and notify the approver via Teams."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-report.approver_email}}"
                text: "Expense report pending: {{get-report.employee_name}} submitted {{get-report.currency}} {{get-report.total_amount}}. Review: {{get-report.approval_url}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: msteams
      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

Creates a knowledge base article in Confluence for store operations procedures and returns the page URL.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Article Creator"
  description: "Creates a knowledge base article in Confluence for store operations procedures and returns the page URL."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: create-kb-article
          description: "Create a Confluence knowledge base article."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "The Confluence space key."
            - name: title
              in: body
              type: string
              description: "Article title."
            - name: body
              in: body
              type: string
              description: "Article body in HTML."
          call: "confluence.create-page"
          with:
            space_key: "{{space_key}}"
            title: "{{title}}"
            body: "{{body}}"
          outputParameters:
            - name: page_url
              type: string
              mapping: "$._links.webui"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://ikea.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

Manages cross-border shipments by generating customs documentation in SAP, calculating duties and taxes in Snowflake, booking freight through the carrier API, and updating the order tracking system.

naftiko: "0.5"
info:
  label: "Cross-Border Logistics Orchestrator"
  description: "Manages cross-border shipments by generating customs documentation in SAP, calculating duties and taxes in Snowflake, booking freight through the carrier API, and updating the order tracking system."
  tags:
    - logistics
    - supply-chain
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: global-logistics
      port: 8080
      tools:
        - name: process-cross-border-shipment
          description: "Orchestrate cross-border logistics: generate customs docs, calculate duties, book freight, and update tracking."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "The shipment identifier."
            - name: origin_country
              in: body
              type: string
              description: "Origin country code."
            - name: destination_country
              in: body
              type: string
              description: "Destination country code."
          steps:
            - name: generate-customs-docs
              type: call
              call: "sap.create-customs-declaration"
              with:
                shipment_id: "{{shipment_id}}"
                origin: "{{origin_country}}"
                destination: "{{destination_country}}"
            - name: calculate-duties
              type: call
              call: "snowflake.calculate-import-duties"
              with:
                shipment_id: "{{shipment_id}}"
                destination: "{{destination_country}}"
            - name: book-freight
              type: call
              call: "sap.book-carrier"
              with:
                shipment_id: "{{shipment_id}}"
                customs_ref: "{{generate-customs-docs.declaration_number}}"
            - name: update-tracking
              type: call
              call: "sap.update-shipment-tracking"
              with:
                shipment_id: "{{shipment_id}}"
                carrier_ref: "{{book-freight.tracking_number}}"
                status: "customs_cleared"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: customs
          path: "/logistics/customs"
          operations:
            - name: create-customs-declaration
              method: POST
        - name: carriers
          path: "/logistics/carriers/bookings"
          operations:
            - name: book-carrier
              method: POST
        - name: tracking
          path: "/logistics/shipments/{{shipment_id}}/tracking"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: update-shipment-tracking
              method: PUT
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: calculate-import-duties
              method: POST

Handles customer complaints by creating a ServiceNow case, pulling order history from SAP, determining compensation eligibility in Snowflake, and sending the resolution offer via email.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Orchestrator"
  description: "Handles customer complaints by creating a ServiceNow case, pulling order history from SAP, determining compensation eligibility in Snowflake, and sending the resolution offer via email."
  tags:
    - customer-service
    - retail
    - servicenow
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: resolve-customer-complaint
          description: "Orchestrate complaint resolution: create case, pull history, determine compensation, and send offer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The IKEA Family customer ID."
            - name: complaint_description
              in: body
              type: string
              description: "Description of the complaint."
            - name: order_id
              in: body
              type: string
              description: "The related order ID."
          steps:
            - name: create-case
              type: call
              call: "servicenow.create-case"
              with:
                customer_id: "{{customer_id}}"
                description: "{{complaint_description}}"
                order_id: "{{order_id}}"
            - name: get-order-history
              type: call
              call: "sap.get-order-details"
              with:
                order_id: "{{order_id}}"
            - name: determine-compensation
              type: call
              call: "snowflake.calculate-compensation"
              with:
                customer_id: "{{customer_id}}"
                order_value: "{{get-order-history.total_amount}}"
                customer_tier: "{{get-order-history.loyalty_tier}}"
            - name: send-resolution
              type: call
              call: "msteams.send-email"
              with:
                to: "{{get-order-history.customer_email}}"
                subject: "Resolution for your IKEA complaint - Case {{create-case.number}}"
                body: "We are sorry for your experience. As compensation, we are offering {{determine-compensation.offer_description}} valued at ${{determine-compensation.offer_value}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order-details
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: calculate-compensation
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

When a low-score customer survey is recorded in Salesforce, creates a ServiceNow case, notifies the store manager via Teams, and logs in Confluence.

naftiko: "0.5"
info:
  label: "Customer Feedback Survey Escalation"
  description: "When a low-score customer survey is recorded in Salesforce, creates a ServiceNow case, notifies the store manager via Teams, and logs in Confluence."
  tags:
    - customer-service
    - feedback
    - salesforce
    - servicenow
    - microsoft-teams
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: feedback-escalation
      port: 8080
      tools:
        - name: escalate-survey
          description: "Escalate negative customer feedback across ServiceNow, Teams, and Confluence."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "The Salesforce survey response ID."
          steps:
            - name: get-survey
              type: call
              call: "salesforce.get-survey"
              with:
                survey_id: "{{survey_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer recovery: {{get-survey.customer_name}} at Store {{get-survey.store_code}}"
                priority: "2"
                category: "customer_recovery"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_mgr_{{get-survey.store_code}}"
                text: "Customer recovery alert: {{get-survey.customer_name}} scored {{get-survey.score}}/10. Case: {{create-case.number}}"
            - name: log-case
              type: call
              call: "confluence.create-page"
              with:
                space_key: "CUSTOMER_RECOVERY"
                title: "Recovery - {{get-survey.customer_name}} - Store {{get-survey.store_code}}"
                body: "Score: {{get-survey.score}}. Comments: {{get-survey.comments}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ikea.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: surveys
          path: "/sobjects/Survey_Response__c/{{survey_id}}"
          inputParameters:
            - name: survey_id
              in: path
          operations:
            - name: get-survey
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://ikea.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

When a customer initiates a return, looks up the order in SAP, creates a return ticket in ServiceNow, updates the CRM in Salesforce, and sends return instructions via Adobe Campaign.

naftiko: "0.5"
info:
  label: "Customer Return Processing Pipeline"
  description: "When a customer initiates a return, looks up the order in SAP, creates a return ticket in ServiceNow, updates the CRM in Salesforce, and sends return instructions via Adobe Campaign."
  tags:
    - e-commerce
    - customer-service
    - sap
    - servicenow
    - salesforce
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: returns-processing
      port: 8080
      tools:
        - name: process-return
          description: "Orchestrate a customer return across SAP, ServiceNow, Salesforce, and Adobe Campaign."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original order ID."
            - name: reason_code
              in: body
              type: string
              description: "Return reason code."
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
          steps:
            - name: get-order
              type: call
              call: "sap.get-sales-order"
              with:
                order_id: "{{order_id}}"
            - name: create-return-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Return: Order {{order_id}} - {{get-order.product_name}}"
                category: "customer_returns"
                description: "Reason: {{reason_code}}. Product: {{get-order.product_name}}. Amount: {{get-order.total_amount}}"
            - name: update-crm
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Return - {{order_id}}"
                status: "New"
                type: "Return"
                contact_email: "{{customer_email}}"
            - name: send-return-label
              type: call
              call: "adobe-campaign.send-email"
              with:
                recipient_email: "{{customer_email}}"
                template: "return_instructions"
                params: "{{order_id}},{{create-return-ticket.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder('{{order_id}}')"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-sales-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.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: salesforce
      baseUri: "https://ikea.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: adobe-campaign
      baseUri: "https://mc.adobe.io/ikea/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

Queries Datadog for infrastructure health metrics of IKEA's e-commerce platform, returning CPU, memory, and active alerts.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Health Monitor"
  description: "Queries Datadog for infrastructure health metrics of IKEA's e-commerce platform, returning CPU, memory, and active alerts."
  tags:
    - it-operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-platform-health
          description: "Retrieve infrastructure health metrics from Datadog."
          inputParameters:
            - name: environment
              in: body
              type: string
              description: "Environment tag (e.g., production, staging)."
          call: "datadog.query-metrics"
          with:
            query: "avg:system.cpu.user{env:{{environment}}}"
          outputParameters:
            - name: cpu_utilization
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: query-metrics
              method: GET

Retrieves the current delivery status for an IKEA home delivery order, returning carrier, tracking number, and estimated delivery window.

naftiko: "0.5"
info:
  label: "Delivery Tracking Status Lookup"
  description: "Retrieves the current delivery status for an IKEA home delivery order, returning carrier, tracking number, and estimated delivery window."
  tags:
    - logistics
    - e-commerce
    - sap
capability:
  exposes:
    - type: mcp
      namespace: delivery-tracking
      port: 8080
      tools:
        - name: get-delivery-status
          description: "Look up delivery tracking status for an order."
          inputParameters:
            - name: delivery_number
              in: body
              type: string
              description: "The SAP delivery document number."
          call: "sap.get-delivery"
          with:
            delivery_number: "{{delivery_number}}"
          outputParameters:
            - name: carrier
              type: string
              mapping: "$.d.ShippingPoint"
            - name: tracking_number
              type: string
              mapping: "$.d.TrackingNumber"
            - name: status
              type: string
              mapping: "$.d.DeliveryStatus"
            - name: eta
              type: string
              mapping: "$.d.PlannedDeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/A_OutbDeliveryHeader('{{delivery_number}}')"
          inputParameters:
            - name: delivery_number
              in: path
          operations:
            - name: get-delivery
              method: GET

Pulls historical sales data from SAP HANA, runs a forecast model request, and writes forecast results to Snowflake for planning teams.

naftiko: "0.5"
info:
  label: "Demand Forecasting Data Pipeline"
  description: "Pulls historical sales data from SAP HANA, runs a forecast model request, and writes forecast results to Snowflake for planning teams."
  tags:
    - supply-chain
    - analytics
    - sap-hana
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: generate-forecast
          description: "Generate a demand forecast for a product category."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Product category code."
            - name: forecast_horizon
              in: body
              type: string
              description: "Forecast horizon in weeks."
          steps:
            - name: get-history
              type: call
              call: "sap-hana.execute-query"
              with:
                query: "SELECT week, units_sold FROM SALES_HISTORY WHERE category = '{{category}}' ORDER BY week DESC LIMIT 52"
            - name: write-forecast
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO DEMAND_FORECASTS (category, horizon_weeks, historical_data, created_at) VALUES ('{{category}}', {{forecast_horizon}}, '{{get-history.results}}', CURRENT_TIMESTAMP())"
  consumes:
    - type: http
      namespace: sap-hana
      baseUri: "https://ikea-hana.sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_hana_token"
      resources:
        - name: queries
          path: "/sql"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Optimizes e-commerce search results by analyzing search query data in Snowflake, updating product ranking signals in Algolia, testing search relevance, and reporting improvements to the product team.

naftiko: "0.5"
info:
  label: "E-Commerce Search Optimization Orchestrator"
  description: "Optimizes e-commerce search results by analyzing search query data in Snowflake, updating product ranking signals in Algolia, testing search relevance, and reporting improvements to the product team."
  tags:
    - e-commerce
    - analytics
    - snowflake
    - algolia
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: search-optimization
      port: 8080
      tools:
        - name: optimize-search-results
          description: "Orchestrate search optimization: analyze queries, update rankings, test relevance, and report."
          inputParameters:
            - name: market
              in: body
              type: string
              description: "Market code (e.g., SE, US)."
          steps:
            - name: analyze-queries
              type: call
              call: "snowflake.query-search-analytics"
              with:
                market: "{{market}}"
            - name: update-rankings
              type: call
              call: "algolia.update-ranking-rules"
              with:
                index: "products_{{market}}"
                rules: "{{analyze-queries.recommended_rules}}"
            - name: test-relevance
              type: call
              call: "algolia.run-ab-test"
              with:
                index: "products_{{market}}"
                variant: "optimized"
            - name: report-results
              type: call
              call: "msteams.post-message"
              with:
                channel: "e-commerce-search"
                message: "Search optimization for {{market}}: Top zero-result queries addressed: {{analyze-queries.zero_result_count}}. New ranking rules: {{update-rankings.rule_count}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-search-analytics
              method: POST
    - type: http
      namespace: algolia
      baseUri: "https://ikea.algolia.net/1"
      authentication:
        type: apikey
        key: "X-Algolia-API-Key"
        value: "$secrets.algolia_api_key"
        placement: header
      resources:
        - name: rules
          path: "/indexes/{{index}}/rules"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: update-ranking-rules
              method: POST
            - name: run-ab-test
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Orchestrate the full onboarding sequence for a new IKEA co-worker."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: store_code
              in: body
              type: string
              description: "Assigned IKEA store code."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} at Store {{store_code}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding"
                folder_path: "CoWorkers/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Hej and welcome to IKEA, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Documents: {{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://ikea.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: 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

Pulls campaign performance data from Facebook Ads for IKEA marketing campaigns, returning impressions, clicks, spend, and conversions.

naftiko: "0.5"
info:
  label: "Facebook Advertising Campaign Reporter"
  description: "Pulls campaign performance data from Facebook Ads for IKEA marketing campaigns, returning impressions, clicks, spend, and conversions."
  tags:
    - marketing
    - advertising
    - facebook
capability:
  exposes:
    - type: mcp
      namespace: fb-campaigns
      port: 8080
      tools:
        - name: get-campaign-performance
          description: "Retrieve Facebook Ads campaign performance metrics."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Facebook Ads campaign ID."
          call: "facebook.get-campaign-insights"
          with:
            campaign_id: "{{campaign_id}}"
          outputParameters:
            - name: impressions
              type: string
              mapping: "$.data[0].impressions"
            - name: clicks
              type: string
              mapping: "$.data[0].clicks"
            - name: spend
              type: string
              mapping: "$.data[0].spend"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_ads_token"
      resources:
        - name: campaign-insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-insights
              method: GET

Processes a damaged flat-pack claim by looking up the order in SAP, creating a returns case in ServiceNow, checking replacement availability, and scheduling a new delivery or store pickup.

naftiko: "0.5"
info:
  label: "Flat Pack Damage Claim Orchestrator"
  description: "Processes a damaged flat-pack claim by looking up the order in SAP, creating a returns case in ServiceNow, checking replacement availability, and scheduling a new delivery or store pickup."
  tags:
    - customer-service
    - retail
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: process-damage-claim
          description: "Orchestrate flat-pack damage claim: lookup order, create case, check replacement stock, and schedule."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original order identifier."
            - name: article_number
              in: body
              type: string
              description: "The damaged article number."
            - name: damage_description
              in: body
              type: string
              description: "Description of the damage."
          steps:
            - name: get-order
              type: call
              call: "sap.get-order-details"
              with:
                order_id: "{{order_id}}"
            - name: create-claim
              type: call
              call: "servicenow.create-case"
              with:
                category: "damage_claim"
                short_description: "Damaged item: {{article_number}} from order {{order_id}}"
                description: "{{damage_description}}"
            - name: check-replacement
              type: call
              call: "sap.check-availability"
              with:
                article: "{{article_number}}"
                store: "{{get-order.fulfillment_store}}"
            - name: schedule-replacement
              type: call
              call: "sap.create-replacement-order"
              with:
                original_order: "{{order_id}}"
                article: "{{article_number}}"
                store: "{{get-order.fulfillment_store}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order-details
              method: GET
        - name: availability
          path: "/inventory/availability"
          operations:
            - name: check-availability
              method: GET
        - name: replacements
          path: "/orders/replacements"
          operations:
            - name: create-replacement-order
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST

Performs IKEA restaurant food safety checks by pulling temperature logs from IoT sensors, verifying HACCP compliance in ServiceNow, and sending inspection results to the food service manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Food Service Quality Check Orchestrator"
  description: "Performs IKEA restaurant food safety checks by pulling temperature logs from IoT sensors, verifying HACCP compliance in ServiceNow, and sending inspection results to the food service manager via Microsoft Teams."
  tags:
    - operations
    - food-safety
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-service
      port: 8080
      tools:
        - name: run-food-quality-check
          description: "Orchestrate food safety check: pull temps, verify HACCP compliance, and notify manager."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
          steps:
            - name: get-temperature-logs
              type: call
              call: "snowflake.query-temperature-logs"
              with:
                store: "{{store_code}}"
                area: "food-service"
            - name: check-haccp-compliance
              type: call
              call: "servicenow.get-haccp-checklist"
              with:
                store: "{{store_code}}"
            - name: create-inspection-record
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_food_safety_inspection"
                data:
                  store: "{{store_code}}"
                  temp_compliant: "{{get-temperature-logs.all_in_range}}"
                  haccp_status: "{{check-haccp-compliance.status}}"
            - name: notify-manager
              type: call
              call: "msteams.post-message"
              with:
                channel: "store-{{store_code}}-food"
                message: "Food safety check complete. Temp compliance: {{get-temperature-logs.all_in_range}}. HACCP: {{check-haccp-compliance.status}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-temperature-logs
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: haccp
          path: "/table/u_haccp_checklist"
          operations:
            - name: get-haccp-checklist
              method: GET
        - name: inspections
          path: "/table/u_food_safety_inspection"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Triggers a GitHub Actions deployment workflow for an IKEA digital application and returns the run status.

naftiko: "0.5"
info:
  label: "GitHub Actions Build Pipeline Trigger"
  description: "Triggers a GitHub Actions deployment workflow for an IKEA digital application and returns the run status."
  tags:
    - it-operations
    - cicd
    - github-actions
capability:
  exposes:
    - type: mcp
      namespace: deployments
      port: 8080
      tools:
        - name: trigger-deployment
          description: "Trigger a GitHub Actions deployment workflow."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository (org/repo)."
            - name: workflow_id
              in: body
              type: string
              description: "Workflow file name or ID."
            - name: ref
              in: body
              type: string
              description: "Git ref to deploy."
          call: "github.trigger-workflow"
          with:
            repo: "{{repo}}"
            workflow_id: "{{workflow_id}}"
            ref: "{{ref}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: trigger-workflow
              method: POST

Retrieves IKEA website traffic metrics from Google Analytics, returning sessions, page views, bounce rate, and top-performing product pages.

naftiko: "0.5"
info:
  label: "Google Analytics Website Traffic Reporter"
  description: "Retrieves IKEA website traffic metrics from Google Analytics, returning sessions, page views, bounce rate, and top-performing product pages."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-website-traffic
          description: "Get web traffic data from Google Analytics for IKEA.com."
          inputParameters:
            - name: property_id
              in: body
              type: string
              description: "The Google Analytics property ID."
            - name: date_range
              in: body
              type: string
              description: "Date range, e.g., last_7_days."
          call: "ga.get-report"
          with:
            property_id: "{{property_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: sessions
              type: string
              mapping: "$.rows[0].metricValues[0].value"
            - name: page_views
              type: string
              mapping: "$.rows[0].metricValues[1].value"
            - name: bounce_rate
              type: string
              mapping: "$.rows[0].metricValues[2].value"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: get-report
              method: POST

Searches for product design briefs in IKEA's shared Google Drive and returns matching file names and links.

naftiko: "0.5"
info:
  label: "Google Drive Product Brief Finder"
  description: "Searches for product design briefs in IKEA's shared Google Drive and returns matching file names and links."
  tags:
    - design
    - documents
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: gdrive-search
      port: 8080
      tools:
        - name: search-briefs
          description: "Search for product design briefs in Google Drive."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Search query for file names."
          call: "gdrive.search-files"
          with:
            query: "{{search_query}}"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          inputParameters:
            - name: q
              in: query
              value: "name contains '{{query}}'"
          operations:
            - name: search-files
              method: GET

Uses the Google Maps API to find the nearest IKEA store to a given address or coordinates and return distance, driving time, and store details.

naftiko: "0.5"
info:
  label: "Google Maps Store Locator"
  description: "Uses the Google Maps API to find the nearest IKEA store to a given address or coordinates and return distance, driving time, and store details."
  tags:
    - retail
    - customer-service
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: store-locator
      port: 8080
      tools:
        - name: find-nearest-store
          description: "Find the nearest IKEA store from a given location."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "Customer address or coordinates."
          call: "gmaps.find-place"
          with:
            input: "IKEA near {{address}}"
            inputtype: "textquery"
          outputParameters:
            - name: store_name
              type: string
              mapping: "$.candidates[0].name"
            - name: address
              type: string
              mapping: "$.candidates[0].formatted_address"
            - name: place_id
              type: string
              mapping: "$.candidates[0].place_id"
  consumes:
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: "key"
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: places
          path: "/place/findplacefromtext/json"
          inputParameters:
            - name: input
              in: query
            - name: inputtype
              in: query
          operations:
            - name: find-place
              method: GET

Schedules home delivery by checking available time slots, reserving the delivery window, assigning a delivery vehicle in the TMS, and sending confirmation to the customer via WhatsApp.

naftiko: "0.5"
info:
  label: "Home Delivery Scheduling Orchestrator"
  description: "Schedules home delivery by checking available time slots, reserving the delivery window, assigning a delivery vehicle in the TMS, and sending confirmation to the customer via WhatsApp."
  tags:
    - retail
    - logistics
    - sap
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: delivery
      port: 8080
      tools:
        - name: schedule-home-delivery
          description: "Orchestrate home delivery scheduling: check slots, reserve, assign vehicle, and confirm."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The order identifier."
            - name: postal_code
              in: body
              type: string
              description: "Customer postal code."
            - name: preferred_date
              in: body
              type: string
              description: "Preferred delivery date in YYYY-MM-DD format."
          steps:
            - name: check-slots
              type: call
              call: "sap.get-delivery-slots"
              with:
                postal_code: "{{postal_code}}"
                date: "{{preferred_date}}"
            - name: reserve-slot
              type: call
              call: "sap.reserve-delivery-slot"
              with:
                order_id: "{{order_id}}"
                slot_id: "{{check-slots.first_available_slot_id}}"
            - name: assign-vehicle
              type: call
              call: "sap.assign-delivery-vehicle"
              with:
                slot_id: "{{check-slots.first_available_slot_id}}"
                order_id: "{{order_id}}"
            - name: send-confirmation
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{reserve-slot.customer_phone}}"
                message: "Your IKEA delivery for order #{{order_id}} is confirmed for {{reserve-slot.delivery_date}} between {{reserve-slot.time_window}}. Vehicle: {{assign-vehicle.vehicle_id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: delivery-slots
          path: "/logistics/delivery-slots"
          operations:
            - name: get-delivery-slots
              method: GET
            - name: reserve-delivery-slot
              method: POST
        - name: vehicles
          path: "/logistics/vehicles/assign"
          operations:
            - name: assign-delivery-vehicle
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0/$secrets.whatsapp_phone_number_id"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

When a new lead is captured in HubSpot from IKEA's business sales division, creates a corresponding Salesforce opportunity and notifies the sales team.

naftiko: "0.5"
info:
  label: "HubSpot Customer Lead Sync"
  description: "When a new lead is captured in HubSpot from IKEA's business sales division, creates a corresponding Salesforce opportunity and notifies the sales team."
  tags:
    - sales
    - marketing
    - hubspot
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: lead-sync
      port: 8080
      tools:
        - name: sync-lead
          description: "Sync a HubSpot lead to a Salesforce opportunity."
          inputParameters:
            - name: contact_id
              in: body
              type: string
              description: "HubSpot contact ID."
          steps:
            - name: get-lead
              type: call
              call: "hubspot.get-contact"
              with:
                contact_id: "{{contact_id}}"
            - name: create-opp
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Business inquiry: {{get-lead.company}}"
                amount: "{{get-lead.estimated_value}}"
                stage: "Qualification"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ikea.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST

When a customer joins IKEA Family, creates the loyalty profile in Salesforce, sends a welcome email via Adobe Campaign, and provisions a digital membership card.

naftiko: "0.5"
info:
  label: "IKEA Family Loyalty Enrollment Orchestrator"
  description: "When a customer joins IKEA Family, creates the loyalty profile in Salesforce, sends a welcome email via Adobe Campaign, and provisions a digital membership card."
  tags:
    - loyalty
    - retail
    - salesforce
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: loyalty-enrollment
      port: 8080
      tools:
        - name: enroll-family-member
          description: "Enroll a new IKEA Family member and send welcome communications."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "Customer email."
            - name: first_name
              in: body
              type: string
              description: "Customer first name."
            - name: last_name
              in: body
              type: string
              description: "Customer last name."
          steps:
            - name: create-member
              type: call
              call: "salesforce.create-loyalty"
              with:
                email: "{{customer_email}}"
                first_name: "{{first_name}}"
                last_name: "{{last_name}}"
                program: "IKEA_Family"
            - name: send-welcome
              type: call
              call: "adobe-campaign.send-email"
              with:
                recipient_email: "{{customer_email}}"
                template: "ikea_family_welcome"
                params: "{{first_name}},{{create-member.member_id}},{{create-member.card_number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ikea.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty
          path: "/sobjects/Loyalty_Member__c"
          operations:
            - name: create-loyalty
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/ikea/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

Generates personalized offers for IKEA Family members by analyzing purchase history in Snowflake, selecting relevant promotions from SAP, and delivering the offer via email and the IKEA app push notification.

naftiko: "0.5"
info:
  label: "IKEA Family Personalized Offer Orchestrator"
  description: "Generates personalized offers for IKEA Family members by analyzing purchase history in Snowflake, selecting relevant promotions from SAP, and delivering the offer via email and the IKEA app push notification."
  tags:
    - marketing
    - retail
    - snowflake
    - sap
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: generate-personalized-offer
          description: "Orchestrate personalized offer: analyze history, select promotions, and deliver via email and push."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The IKEA Family customer ID."
          steps:
            - name: analyze-preferences
              type: call
              call: "snowflake.query-customer-preferences"
              with:
                customer_id: "{{customer_id}}"
            - name: select-promotions
              type: call
              call: "sap.get-matching-promotions"
              with:
                categories: "{{analyze-preferences.top_categories}}"
                price_range: "{{analyze-preferences.avg_order_value}}"
            - name: send-email-offer
              type: call
              call: "msteams.send-email"
              with:
                to: "{{analyze-preferences.customer_email}}"
                subject: "Special offers just for you, {{analyze-preferences.first_name}}!"
                body: "Based on your love of {{analyze-preferences.top_categories}}, check out these deals: {{select-promotions.offer_summary}}."
            - name: send-push-notification
              type: call
              call: "firebase.send-notification"
              with:
                user_id: "{{customer_id}}"
                title: "New offers for you!"
                body: "{{select-promotions.offer_count}} personalized offers waiting in your IKEA app."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-customer-preferences
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: promotions
          path: "/marketing/promotions/match"
          operations:
            - name: get-matching-promotions
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: firebase
      baseUri: "https://fcm.googleapis.com/v1/projects/$secrets.firebase_project_id"
      authentication:
        type: bearer
        token: "$secrets.firebase_token"
      resources:
        - name: notifications
          path: "/messages:send"
          operations:
            - name: send-notification
              method: POST

Retrieves engagement metrics from Instagram for IKEA product posts, returning likes, comments, reach, and saves.

naftiko: "0.5"
info:
  label: "Instagram Product Engagement Tracker"
  description: "Retrieves engagement metrics from Instagram for IKEA product posts, returning likes, comments, reach, and saves."
  tags:
    - marketing
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: social-engagement
      port: 8080
      tools:
        - name: get-post-engagement
          description: "Retrieve Instagram engagement metrics for an IKEA product post."
          inputParameters:
            - name: media_id
              in: body
              type: string
              description: "The Instagram media ID."
          call: "instagram.get-media-insights"
          with:
            media_id: "{{media_id}}"
          outputParameters:
            - name: likes
              type: string
              mapping: "$.data[0].values[0].value"
            - name: reach
              type: string
              mapping: "$.data[1].values[0].value"
            - name: saves
              type: string
              mapping: "$.data[2].values[0].value"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media-insights
          path: "/{{media_id}}/insights"
          inputParameters:
            - name: media_id
              in: path
            - name: metric
              in: query
              value: "likes,reach,saved"
          operations:
            - name: get-media-insights
              method: GET

Generates a kitchen planning quote by pulling cabinet configurations from SAP, calculating installation estimates, checking delivery availability, and emailing the customer with the complete quote.

naftiko: "0.5"
info:
  label: "Kitchen Planning Quote Orchestrator"
  description: "Generates a kitchen planning quote by pulling cabinet configurations from SAP, calculating installation estimates, checking delivery availability, and emailing the customer with the complete quote."
  tags:
    - retail
    - kitchen
    - sap
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: kitchen-planning
      port: 8080
      tools:
        - name: generate-kitchen-quote
          description: "Orchestrate kitchen quote generation: get config, calculate install, check delivery, and send quote."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "The kitchen plan identifier from the planner tool."
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
          steps:
            - name: get-plan-details
              type: call
              call: "sap.get-kitchen-plan"
              with:
                plan_id: "{{plan_id}}"
            - name: calculate-installation
              type: call
              call: "sap.estimate-installation"
              with:
                cabinet_count: "{{get-plan-details.cabinet_count}}"
                appliance_count: "{{get-plan-details.appliance_count}}"
            - name: check-delivery
              type: call
              call: "sap.check-bulk-availability"
              with:
                articles: "{{get-plan-details.article_list}}"
            - name: send-quote
              type: call
              call: "msteams.send-email"
              with:
                to: "{{customer_email}}"
                subject: "Your IKEA Kitchen Quote - Plan {{plan_id}}"
                body: "Total products: ${{get-plan-details.product_total}}. Installation: ${{calculate-installation.estimate}}. Earliest delivery: {{check-delivery.earliest_date}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: kitchen-plans
          path: "/kitchen-planning/plans/{{plan_id}}"
          inputParameters:
            - name: plan_id
              in: path
          operations:
            - name: get-kitchen-plan
              method: GET
        - name: installation
          path: "/services/installation/estimate"
          operations:
            - name: estimate-installation
              method: POST
        - name: availability
          path: "/inventory/bulk-availability"
          operations:
            - name: check-bulk-availability
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Takes a batch of home delivery orders, calculates optimal routing using Google Maps, and updates delivery assignments in SAP for driver dispatch.

naftiko: "0.5"
info:
  label: "Last-Mile Delivery Routing Optimizer"
  description: "Takes a batch of home delivery orders, calculates optimal routing using Google Maps, and updates delivery assignments in SAP for driver dispatch."
  tags:
    - logistics
    - supply-chain
    - google-maps
    - sap
capability:
  exposes:
    - type: mcp
      namespace: delivery-routing
      port: 8080
      tools:
        - name: optimize-routes
          description: "Optimize delivery routes for a batch of orders."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The delivery batch ID."
            - name: warehouse_address
              in: body
              type: string
              description: "Origin warehouse address."
          steps:
            - name: get-deliveries
              type: call
              call: "sap.get-delivery-batch"
              with:
                batch_id: "{{batch_id}}"
            - name: calculate-routes
              type: call
              call: "gmaps.get-directions"
              with:
                origin: "{{warehouse_address}}"
                waypoints: "{{get-deliveries.delivery_addresses}}"
                optimize: "true"
            - name: update-assignments
              type: call
              call: "sap.update-delivery-sequence"
              with:
                batch_id: "{{batch_id}}"
                optimized_sequence: "{{calculate-routes.optimized_order}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/A_DeliveryBatch('{{batch_id}}')"
          inputParameters:
            - name: batch_id
              in: path
          operations:
            - name: get-delivery-batch
              method: GET
            - name: update-delivery-sequence
              method: PATCH
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: "key"
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: directions
          path: "/directions/json"
          inputParameters:
            - name: origin
              in: query
            - name: waypoints
              in: query
            - name: optimize
              in: query
          operations:
            - name: get-directions
              method: GET

Creates a job posting on LinkedIn from Workday requisition data and notifies the recruiting team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Publisher"
  description: "Creates a job posting on LinkedIn from Workday requisition data and notifies the recruiting team via Microsoft Teams."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: job-posting
      port: 8080
      tools:
        - name: publish-job
          description: "Publish a Workday requisition to LinkedIn Jobs and notify recruiters."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-job
              type: call
              call: "linkedin.create-job"
              with:
                title: "{{get-requisition.job_title}}"
                description: "{{get-requisition.job_description}}"
                location: "{{get-requisition.location}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "recruiting_ops"
                text: "Job posted to LinkedIn: {{get-requisition.job_title}} in {{get-requisition.location}}. ID: {{post-job.job_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/v1/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: jobs
          path: "/simpleJobPostings"
          operations:
            - name: create-job
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates a store sales report in Microsoft Excel, populating a template workbook with weekly sales data from SAP HANA.

naftiko: "0.5"
info:
  label: "Microsoft Excel Sales Report Generator"
  description: "Generates a store sales report in Microsoft Excel, populating a template workbook with weekly sales data from SAP HANA."
  tags:
    - retail
    - reporting
    - microsoft-excel
    - sap-hana
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: generate-sales-report
          description: "Pull SAP HANA sales data and populate an Excel report."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: week
              in: body
              type: string
              description: "Report week in YYYY-Wnn format."
          steps:
            - name: get-sales
              type: call
              call: "sap-hana.execute-query"
              with:
                query: "SELECT date, department, revenue, units FROM DAILY_SALES WHERE store = '{{store_code}}' AND week = '{{week}}'"
            - name: update-workbook
              type: call
              call: "excel.update-range"
              with:
                workbook_id: "sales_template_{{store_code}}"
                sheet_name: "WeeklySales"
                range: "A2:D50"
                values: "{{get-sales.results}}"
  consumes:
    - type: http
      namespace: sap-hana
      baseUri: "https://ikea-hana.sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_hana_token"
      resources:
        - name: queries
          path: "/sql"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: excel
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: workbooks
          path: "/me/drive/items/{{workbook_id}}/workbook/worksheets/{{sheet_name}}/range(address='{{range}}')"
          inputParameters:
            - name: workbook_id
              in: path
            - name: sheet_name
              in: path
            - name: range
              in: path
          operations:
            - name: update-range
              method: PATCH

Creates a meeting on a co-worker's Outlook calendar and returns the Teams meeting link.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Meeting Scheduler"
  description: "Creates a meeting on a co-worker's Outlook calendar and returns the Teams meeting link."
  tags:
    - communications
    - scheduling
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: meeting-scheduler
      port: 8080
      tools:
        - name: schedule-meeting
          description: "Create a meeting on a co-worker's Outlook calendar."
          inputParameters:
            - name: organizer_upn
              in: body
              type: string
              description: "Organizer UPN."
            - name: subject
              in: body
              type: string
              description: "Meeting subject."
            - name: start_time
              in: body
              type: string
              description: "Start time in ISO 8601."
            - name: end_time
              in: body
              type: string
              description: "End time in ISO 8601."
          call: "outlook.create-event"
          with:
            organizer_upn: "{{organizer_upn}}"
            subject: "{{subject}}"
            start_time: "{{start_time}}"
            end_time: "{{end_time}}"
          outputParameters:
            - name: meeting_link
              type: string
              mapping: "$.onlineMeeting.joinUrl"
  consumes:
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/users/{{organizer_upn}}/events"
          inputParameters:
            - name: organizer_upn
              in: path
          operations:
            - name: create-event
              method: POST

Triggers a Microsoft Power Automate flow for custom store-level automations and returns the flow run status.

naftiko: "0.5"
info:
  label: "Microsoft Power Automate Flow Trigger"
  description: "Triggers a Microsoft Power Automate flow for custom store-level automations and returns the flow run status."
  tags:
    - automation
    - microsoft-power-automate
capability:
  exposes:
    - type: mcp
      namespace: flow-trigger
      port: 8080
      tools:
        - name: trigger-flow
          description: "Trigger a Power Automate flow with parameters."
          inputParameters:
            - name: flow_id
              in: body
              type: string
              description: "The Power Automate flow ID."
            - name: payload
              in: body
              type: string
              description: "JSON payload."
          call: "power-automate.invoke-flow"
          with:
            flow_id: "{{flow_id}}"
            payload: "{{payload}}"
  consumes:
    - type: http
      namespace: power-automate
      baseUri: "https://prod-00.westus.logic.azure.com/workflows"
      authentication:
        type: bearer
        token: "$secrets.power_automate_token"
      resources:
        - name: flows
          path: "/{{flow_id}}/triggers/manual/paths/invoke"
          inputParameters:
            - name: flow_id
              in: path
          operations:
            - name: invoke-flow
              method: POST

Sends an announcement to an IKEA store's Microsoft Teams channel for co-worker communications.

naftiko: "0.5"
info:
  label: "Microsoft Teams Store Announcement Sender"
  description: "Sends an announcement to an IKEA store's Microsoft Teams channel for co-worker communications."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-comms
      port: 8080
      tools:
        - name: send-store-announcement
          description: "Post an announcement to a store's Teams channel."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: message
              in: body
              type: string
              description: "Announcement message text."
          call: "msteams.post-message"
          with:
            channel_id: "announcements_{{store_code}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Coordinates a new product range launch by creating master data in SAP, publishing product content in Contentful, setting up Adobe Analytics tracking, and announcing the range in Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Product Range Launch Orchestrator"
  description: "Coordinates a new product range launch by creating master data in SAP, publishing product content in Contentful, setting up Adobe Analytics tracking, and announcing the range in Microsoft Teams."
  tags:
    - retail
    - product
    - sap
    - contentful
    - adobe-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: launch-product-range
          description: "Orchestrate a product range launch: create SAP master data, publish content, set up tracking, and announce."
          inputParameters:
            - name: range_id
              in: body
              type: string
              description: "The product range identifier."
            - name: launch_date
              in: body
              type: string
              description: "Launch date in YYYY-MM-DD format."
          steps:
            - name: create-master-data
              type: call
              call: "sap.create-product-range"
              with:
                range_id: "{{range_id}}"
                launch_date: "{{launch_date}}"
            - name: publish-content
              type: call
              call: "contentful.publish-entries"
              with:
                range_id: "{{range_id}}"
            - name: setup-tracking
              type: call
              call: "adobe-analytics.create-tracking-events"
              with:
                range_id: "{{range_id}}"
                event_names:
                  - "range_view_{{range_id}}"
                  - "range_atc_{{range_id}}"
            - name: announce-launch
              type: call
              call: "msteams.post-message"
              with:
                channel: "product-launches"
                message: "New range {{create-master-data.range_name}} launching {{launch_date}}. {{create-master-data.article_count}} articles. Content published: {{publish-content.entry_count}} entries."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: products
          path: "/product-management/ranges"
          operations:
            - name: create-product-range
              method: POST
    - type: http
      namespace: contentful
      baseUri: "https://api.contentful.com/spaces/$secrets.contentful_space_id"
      authentication:
        type: bearer
        token: "$secrets.contentful_token"
      resources:
        - name: entries
          path: "/entries"
          operations:
            - name: publish-entries
              method: PUT
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/ikea"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-tracking-events
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves application performance metrics from New Relic for the IKEA e-commerce platform, returning response time, error rate, and throughput.

naftiko: "0.5"
info:
  label: "New Relic E-Commerce Performance Lookup"
  description: "Retrieves application performance metrics from New Relic for the IKEA e-commerce platform, returning response time, error rate, and throughput."
  tags:
    - it-operations
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: app-performance
      port: 8080
      tools:
        - name: get-app-performance
          description: "Get performance metrics from New Relic for an IKEA application."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        name: "Api-Key"
        in: header
        value: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Retrieves website performance metrics from New Relic, returning page load time, throughput, error rate, and Apdex score for the IKEA e-commerce site.

naftiko: "0.5"
info:
  label: "New Relic Website Performance Lookup"
  description: "Retrieves website performance metrics from New Relic, returning page load time, throughput, error rate, and Apdex score for the IKEA e-commerce site."
  tags:
    - monitoring
    - e-commerce
    - new-relic
    - performance
capability:
  exposes:
    - type: mcp
      namespace: web-performance
      port: 8080
      tools:
        - name: get-website-performance
          description: "Look up IKEA website performance from New Relic. Returns load time, throughput, and Apdex."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: avg_page_load_ms
              type: number
              mapping: "$.data.pageLoadTime"
            - name: throughput_rpm
              type: number
              mapping: "$.data.throughput"
            - name: error_rate_pct
              type: number
              mapping: "$.data.errorRate"
            - name: apdex_score
              type: number
              mapping: "$.data.apdex"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: applications
          path: "/applications/{{app_id}}/metrics/data.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

When an e-commerce order is placed, validates inventory in SAP, creates a warehouse pick task in ServiceNow, and sends order confirmation via Adobe Campaign.

naftiko: "0.5"
info:
  label: "Online Order Fulfillment Orchestrator"
  description: "When an e-commerce order is placed, validates inventory in SAP, creates a warehouse pick task in ServiceNow, and sends order confirmation via Adobe Campaign."
  tags:
    - e-commerce
    - supply-chain
    - sap
    - servicenow
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: orchestrate-fulfillment
          description: "Process a new online order through inventory check, warehouse task, and customer notification."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The e-commerce order ID."
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
          steps:
            - name: get-order
              type: call
              call: "sap.get-sales-order"
              with:
                order_id: "{{order_id}}"
            - name: check-inventory
              type: call
              call: "sap.check-stock"
              with:
                material: "{{get-order.material_number}}"
                plant: "{{get-order.fulfillment_center}}"
            - name: create-pick-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Pick order {{order_id}}: {{get-order.product_name}}"
                assignment_group: "Warehouse_{{get-order.fulfillment_center}}"
                priority: "3"
            - name: send-confirmation
              type: call
              call: "adobe-campaign.send-email"
              with:
                recipient_email: "{{customer_email}}"
                template: "order_confirmation"
                params: "{{order_id}},{{get-order.product_name}},{{get-order.estimated_delivery}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder('{{order_id}}')"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-sales-order
              method: GET
        - name: stock
          path: "/A_MaterialStock(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: check-stock
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/ikea/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: emails
          path: "/email/send"
          operations:
            - name: send-email
              method: POST

Creates a journal entry in Oracle Cloud Financials for IKEA store-level accounting and cost allocation.

naftiko: "0.5"
info:
  label: "Oracle Cloud Finance Journal Entry Creator"
  description: "Creates a journal entry in Oracle Cloud Financials for IKEA store-level accounting and cost allocation."
  tags:
    - finance
    - accounting
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: finance-journals
      port: 8080
      tools:
        - name: create-journal-entry
          description: "Create a journal entry in Oracle Cloud Financials."
          inputParameters:
            - name: ledger_name
              in: body
              type: string
              description: "Ledger name."
            - name: journal_lines
              in: body
              type: string
              description: "JSON array of journal line items."
            - name: description
              in: body
              type: string
              description: "Journal entry description."
          call: "oracle-cloud.create-journal"
          with:
            ledger_name: "{{ledger_name}}"
            journal_lines: "{{journal_lines}}"
            description: "{{description}}"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://ikea.oraclecloud.com/fscmRestApi/resources/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: journals
          path: "/generalAccountingJournals"
          operations:
            - name: create-journal
              method: POST

Assigns a Pluralsight learning path to an IKEA co-worker and notifies them via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Pluralsight Learning Path Assigner"
  description: "Assigns a Pluralsight learning path to an IKEA co-worker and notifies them via Microsoft Teams."
  tags:
    - hr
    - training
    - pluralsight
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: training
      port: 8080
      tools:
        - name: assign-training
          description: "Assign a Pluralsight learning path and notify the co-worker."
          inputParameters:
            - name: employee_email
              in: body
              type: string
              description: "Co-worker email address."
            - name: channel_id
              in: body
              type: string
              description: "Pluralsight channel ID."
          steps:
            - name: assign-channel
              type: call
              call: "pluralsight.assign-channel"
              with:
                email: "{{employee_email}}"
                channel_id: "{{channel_id}}"
            - name: notify
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{employee_email}}"
                text: "You have a new training assignment on Pluralsight. Start learning: {{assign-channel.channel_url}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: channels
          path: "/channels/{{channel_id}}/assignments"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: assign-channel
              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 the store-level sales dashboard in Power BI, returning refresh status and timestamp for the latest data update.

naftiko: "0.5"
info:
  label: "Power BI Store Sales Dashboard Refresh"
  description: "Triggers a refresh of the store-level sales dashboard in Power BI, returning refresh status and timestamp for the latest data update."
  tags:
    - reporting
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: refresh-store-dashboard
          description: "Trigger a Power BI store sales dashboard refresh. Returns status and timestamp."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset identifier."
          call: "powerbi.trigger-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_id
              type: string
              mapping: "$.id"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves product details from the SAP commerce catalog, returning article number, price, availability, dimensions, and product family.

naftiko: "0.5"
info:
  label: "Product Catalog Item Lookup"
  description: "Retrieves product details from the SAP commerce catalog, returning article number, price, availability, dimensions, and product family."
  tags:
    - retail
    - e-commerce
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-catalog
      port: 8080
      tools:
        - name: get-product
          description: "Look up an IKEA product by article number from the SAP catalog."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The IKEA article number (8-digit)."
          call: "sap.get-material"
          with:
            article_number: "{{article_number}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.d.MaterialName"
            - name: price
              type: string
              mapping: "$.d.Price"
            - name: availability
              type: string
              mapping: "$.d.StockStatus"
            - name: dimensions
              type: string
              mapping: "$.d.Dimensions"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Product('{{article_number}}')"
          inputParameters:
            - name: article_number
              in: path
          operations:
            - name: get-material
              method: GET

When a product recall is initiated, identifies affected orders in SAP, creates cases in Salesforce for affected customers, and sends recall notices via Adobe Campaign.

naftiko: "0.5"
info:
  label: "Product Recall Notification Pipeline"
  description: "When a product recall is initiated, identifies affected orders in SAP, creates cases in Salesforce for affected customers, and sends recall notices via Adobe Campaign."
  tags:
    - retail
    - safety
    - sap
    - salesforce
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: product-recall
      port: 8080
      tools:
        - name: execute-recall
          description: "Execute a product recall notification workflow."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The recalled product article number."
            - name: recall_reason
              in: body
              type: string
              description: "Reason for the recall."
            - name: date_range
              in: body
              type: string
              description: "Sales date range for affected orders (YYYY-MM-DD/YYYY-MM-DD)."
          steps:
            - name: get-affected-orders
              type: call
              call: "sap.get-sales-by-material"
              with:
                material: "{{article_number}}"
                date_range: "{{date_range}}"
            - name: create-recall-cases
              type: call
              call: "salesforce.create-bulk-cases"
              with:
                subject: "Product Recall: {{article_number}}"
                type: "Recall"
                affected_orders: "{{get-affected-orders.order_list}}"
            - name: send-notices
              type: call
              call: "adobe-campaign.send-bulk-email"
              with:
                template: "product_recall"
                recipient_list: "{{get-affected-orders.customer_emails}}"
                params: "{{article_number}},{{recall_reason}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-by-material
          path: "/A_SalesOrderItem"
          inputParameters:
            - name: $filter
              in: query
              value: "Material eq '{{material}}'"
          operations:
            - name: get-sales-by-material
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ikea.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/composite/tree/Case"
          operations:
            - name: create-bulk-cases
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/ikea/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: bulk-emails
          path: "/email/sendBulk"
          operations:
            - name: send-bulk-email
              method: POST

Tracks returned products entering the circular economy program in SAP, returning refurbishment status, resale eligibility, and recycling disposition.

naftiko: "0.5"
info:
  label: "SAP Circular Product Return Tracking"
  description: "Tracks returned products entering the circular economy program in SAP, returning refurbishment status, resale eligibility, and recycling disposition."
  tags:
    - sustainability
    - retail
    - sap
    - circular-economy
capability:
  exposes:
    - type: mcp
      namespace: circular-economy
      port: 8080
      tools:
        - name: get-circular-return-status
          description: "Track a returned product in the circular economy program. Returns refurbishment and disposition status."
          inputParameters:
            - name: return_id
              in: body
              type: string
              description: "The return transaction identifier."
          call: "sap.get-circular-status"
          with:
            return_id: "{{return_id}}"
          outputParameters:
            - name: condition_grade
              type: string
              mapping: "$.conditionGrade"
            - name: refurbishment_status
              type: string
              mapping: "$.refurbishmentStatus"
            - name: resale_eligible
              type: boolean
              mapping: "$.resaleEligible"
            - name: disposition
              type: string
              mapping: "$.disposition"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: circular
          path: "/circular-economy/returns/{{return_id}}"
          inputParameters:
            - name: return_id
              in: path
          operations:
            - name: get-circular-status
              method: GET

Retrieves container shipment tracking data from SAP for inbound supplier shipments, returning container number, vessel name, port of origin, and estimated arrival date.

naftiko: "0.5"
info:
  label: "SAP Container Shipment Tracking Lookup"
  description: "Retrieves container shipment tracking data from SAP for inbound supplier shipments, returning container number, vessel name, port of origin, and estimated arrival date."
  tags:
    - supply-chain
    - logistics
    - sap
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: get-container-tracking
          description: "Look up container shipment tracking from SAP. Returns vessel, port, and ETA."
          inputParameters:
            - name: container_number
              in: body
              type: string
              description: "The shipping container number."
          call: "sap.get-container-status"
          with:
            container: "{{container_number}}"
          outputParameters:
            - name: vessel_name
              type: string
              mapping: "$.vesselName"
            - name: port_of_origin
              type: string
              mapping: "$.portOfOrigin"
            - name: destination_port
              type: string
              mapping: "$.destinationPort"
            - name: eta
              type: string
              mapping: "$.estimatedArrival"
            - name: status
              type: string
              mapping: "$.shipmentStatus"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: shipments
          path: "/logistics/containers/{{container}}"
          inputParameters:
            - name: container
              in: path
          operations:
            - name: get-container-status
              method: GET

Retrieves distribution center capacity utilization from SAP, returning total capacity, current utilization percentage, inbound shipments pending, and outbound orders queued.

naftiko: "0.5"
info:
  label: "SAP Distribution Center Capacity Lookup"
  description: "Retrieves distribution center capacity utilization from SAP, returning total capacity, current utilization percentage, inbound shipments pending, and outbound orders queued."
  tags:
    - supply-chain
    - logistics
    - sap
    - warehouse
capability:
  exposes:
    - type: mcp
      namespace: dc-management
      port: 8080
      tools:
        - name: get-dc-capacity
          description: "Look up distribution center capacity from SAP. Returns utilization and pending volumes."
          inputParameters:
            - name: dc_code
              in: body
              type: string
              description: "The distribution center code."
          call: "sap.get-dc-capacity"
          with:
            dc: "{{dc_code}}"
          outputParameters:
            - name: total_capacity_pallets
              type: number
              mapping: "$.totalCapacity"
            - name: utilization_pct
              type: number
              mapping: "$.utilizationPercent"
            - name: inbound_pending
              type: number
              mapping: "$.inboundPending"
            - name: outbound_queued
              type: number
              mapping: "$.outboundQueued"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: dc
          path: "/warehouse/distribution-centers/{{dc}}/capacity"
          inputParameters:
            - name: dc
              in: path
          operations:
            - name: get-dc-capacity
              method: GET

Books a furniture assembly service appointment by checking partner availability in SAP, scheduling the service slot, and sending confirmation to the customer.

naftiko: "0.5"
info:
  label: "SAP Furniture Assembly Service Booking"
  description: "Books a furniture assembly service appointment by checking partner availability in SAP, scheduling the service slot, and sending confirmation to the customer."
  tags:
    - retail
    - services
    - sap
capability:
  exposes:
    - type: mcp
      namespace: services
      port: 8080
      tools:
        - name: book-assembly-service
          description: "Book a furniture assembly service. Returns confirmation number and scheduled time."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The order identifier."
            - name: postal_code
              in: body
              type: string
              description: "Customer postal code."
            - name: preferred_date
              in: body
              type: string
              description: "Preferred date in YYYY-MM-DD format."
          call: "sap.book-assembly"
          with:
            order_id: "{{order_id}}"
            postal_code: "{{postal_code}}"
            date: "{{preferred_date}}"
          outputParameters:
            - name: confirmation_number
              type: string
              mapping: "$.confirmationNumber"
            - name: scheduled_date
              type: string
              mapping: "$.scheduledDate"
            - name: time_window
              type: string
              mapping: "$.timeWindow"
            - name: partner_name
              type: string
              mapping: "$.assemblyPartner"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: assembly
          path: "/services/assembly/bookings"
          operations:
            - name: book-assembly
              method: POST

Retrieves goods receipt status from SAP for a purchase order, returning receipt date, received quantity, quality inspection status, and warehouse put-away location.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt Status Lookup"
  description: "Retrieves goods receipt status from SAP for a purchase order, returning receipt date, received quantity, quality inspection status, and warehouse put-away location."
  tags:
    - supply-chain
    - sap
    - warehouse
capability:
  exposes:
    - type: mcp
      namespace: warehouse
      port: 8080
      tools:
        - name: get-goods-receipt
          description: "Look up goods receipt status from SAP by PO number. Returns receipt details and QA status."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-goods-receipt"
          with:
            po: "{{po_number}}"
          outputParameters:
            - name: receipt_date
              type: string
              mapping: "$.receiptDate"
            - name: received_qty
              type: number
              mapping: "$.receivedQuantity"
            - name: inspection_status
              type: string
              mapping: "$.qualityInspectionStatus"
            - name: putaway_location
              type: string
              mapping: "$.putawayLocation"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: goods-receipts
          path: "/warehouse/goods-receipts"
          operations:
            - name: get-goods-receipt
              method: GET

Queries SAP HANA for real-time product availability across all IKEA stores and distribution centers, returning available quantity, warehouse location, and estimated restock date.

naftiko: "0.5"
info:
  label: "SAP HANA Product Availability Check"
  description: "Queries SAP HANA for real-time product availability across all IKEA stores and distribution centers, returning available quantity, warehouse location, and estimated restock date."
  tags:
    - retail
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: check-product-availability
          description: "Check product availability across IKEA locations from SAP HANA. Returns stock levels and restock dates."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The IKEA article number."
            - name: store_code
              in: body
              type: string
              description: "The store or DC code."
          call: "sap.check-availability"
          with:
            article: "{{article_number}}"
            store: "{{store_code}}"
          outputParameters:
            - name: available_qty
              type: number
              mapping: "$.availableQuantity"
            - name: warehouse_location
              type: string
              mapping: "$.warehouseLocation"
            - name: restock_date
              type: string
              mapping: "$.estimatedRestockDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: availability
          path: "/inventory/availability"
          operations:
            - name: check-availability
              method: GET

Executes an analytical query on SAP HANA to retrieve daily store sales, units sold, average transaction value, and top-selling categories.

naftiko: "0.5"
info:
  label: "SAP HANA Sales Dashboard Query"
  description: "Executes an analytical query on SAP HANA to retrieve daily store sales, units sold, average transaction value, and top-selling categories."
  tags:
    - analytics
    - retail
    - sap-hana
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: query-sales-data
          description: "Run a sales analytics query against SAP HANA."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: date
              in: body
              type: string
              description: "Sales date in YYYY-MM-DD format."
          call: "sap-hana.execute-query"
          with:
            query: "SELECT total_revenue, units_sold, avg_transaction, top_category FROM SALES_DAILY WHERE store_code = '{{store_code}}' AND sales_date = '{{date}}'"
          outputParameters:
            - name: total_revenue
              type: string
              mapping: "$.results[0].TOTAL_REVENUE"
            - name: units_sold
              type: string
              mapping: "$.results[0].UNITS_SOLD"
            - name: avg_transaction
              type: string
              mapping: "$.results[0].AVG_TRANSACTION"
  consumes:
    - type: http
      namespace: sap-hana
      baseUri: "https://ikea-hana.sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_hana_token"
      resources:
        - name: queries
          path: "/sql"
          operations:
            - name: execute-query
              method: POST

Retrieves payment transaction details from SAP for a store, returning transaction ID, payment method, amount, currency, and settlement status.

naftiko: "0.5"
info:
  label: "SAP Payment Transaction Lookup"
  description: "Retrieves payment transaction details from SAP for a store, returning transaction ID, payment method, amount, currency, and settlement status."
  tags:
    - finance
    - retail
    - sap
    - payments
capability:
  exposes:
    - type: mcp
      namespace: store-finance
      port: 8080
      tools:
        - name: get-payment-transaction
          description: "Look up a payment transaction from SAP. Returns payment method, amount, and settlement status."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The payment transaction identifier."
          call: "sap.get-payment"
          with:
            transaction_id: "{{transaction_id}}"
          outputParameters:
            - name: payment_method
              type: string
              mapping: "$.paymentMethod"
            - name: amount
              type: number
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
            - name: settlement_status
              type: string
              mapping: "$.settlementStatus"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: payments
          path: "/finance/payments/{{transaction_id}}"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: get-payment
              method: GET

Retrieves pending price tag updates from SAP for a store, returning article number, current price, new price, and effective date.

naftiko: "0.5"
info:
  label: "SAP Price Tag Update Lookup"
  description: "Retrieves pending price tag updates from SAP for a store, returning article number, current price, new price, and effective date."
  tags:
    - retail
    - pricing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: get-pending-price-updates
          description: "Look up pending price tag changes from SAP for a store. Returns articles with old and new prices."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
          call: "sap.get-price-updates"
          with:
            store: "{{store_code}}"
          outputParameters:
            - name: updates
              type: array
              mapping: "$.data"
              items:
                - name: article_number
                  type: string
                  mapping: "$.articleNumber"
                - name: current_price
                  type: number
                  mapping: "$.currentPrice"
                - name: new_price
                  type: number
                  mapping: "$.newPrice"
                - name: effective_date
                  type: string
                  mapping: "$.effectiveDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pricing
          path: "/pricing/pending-updates"
          operations:
            - name: get-price-updates
              method: GET

Retrieves product quality test results from SAP Quality Management, returning test type, pass/fail status, defect count, and batch number.

naftiko: "0.5"
info:
  label: "SAP Product Quality Test Lookup"
  description: "Retrieves product quality test results from SAP Quality Management, returning test type, pass/fail status, defect count, and batch number."
  tags:
    - quality
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: get-quality-test-results
          description: "Look up quality test results from SAP QM. Returns test details and defect counts."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The article number."
            - name: batch_number
              in: body
              type: string
              description: "The production batch number."
          call: "sap.get-quality-results"
          with:
            article: "{{article_number}}"
            batch: "{{batch_number}}"
          outputParameters:
            - name: test_type
              type: string
              mapping: "$.testType"
            - name: status
              type: string
              mapping: "$.overallStatus"
            - name: defect_count
              type: number
              mapping: "$.defectCount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: quality
          path: "/quality-management/results"
          operations:
            - name: get-quality-results
              method: GET

Retrieves product range lifecycle status from SAP, returning range phase (active, planned discontinuation, end-of-life), remaining inventory, and successor range ID.

naftiko: "0.5"
info:
  label: "SAP Product Range Lifecycle Lookup"
  description: "Retrieves product range lifecycle status from SAP, returning range phase (active, planned discontinuation, end-of-life), remaining inventory, and successor range ID."
  tags:
    - retail
    - product
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-mgmt
      port: 8080
      tools:
        - name: get-range-lifecycle
          description: "Look up product range lifecycle from SAP. Returns phase, inventory, and successor info."
          inputParameters:
            - name: range_id
              in: body
              type: string
              description: "The product range identifier."
          call: "sap.get-range-status"
          with:
            range_id: "{{range_id}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.lifecyclePhase"
            - name: remaining_inventory
              type: number
              mapping: "$.remainingInventory"
            - name: successor_range_id
              type: string
              mapping: "$.successorRangeId"
            - name: end_of_life_date
              type: string
              mapping: "$.endOfLifeDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: ranges
          path: "/product-management/ranges/{{range_id}}/lifecycle"
          inputParameters:
            - name: range_id
              in: path
          operations:
            - name: get-range-status
              method: GET

Retrieves self-serve checkout station status from SAP POS, returning station ID, transaction count, error count, and uptime percentage for a store.

naftiko: "0.5"
info:
  label: "SAP Self-Serve Checkout Lookup"
  description: "Retrieves self-serve checkout station status from SAP POS, returning station ID, transaction count, error count, and uptime percentage for a store."
  tags:
    - retail
    - operations
    - sap
    - pos
capability:
  exposes:
    - type: mcp
      namespace: store-tech
      port: 8080
      tools:
        - name: get-checkout-status
          description: "Look up self-serve checkout status from SAP. Returns transactions, errors, and uptime."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The store code."
          call: "sap.get-checkout-stations"
          with:
            store: "{{store_code}}"
          outputParameters:
            - name: stations
              type: array
              mapping: "$.data"
              items:
                - name: station_id
                  type: string
                  mapping: "$.stationId"
                - name: transaction_count
                  type: number
                  mapping: "$.transactionCount"
                - name: error_count
                  type: number
                  mapping: "$.errorCount"
                - name: uptime_pct
                  type: number
                  mapping: "$.uptimePercent"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pos
          path: "/store-management/checkout-stations"
          operations:
            - name: get-checkout-stations
              method: GET

Retrieves showroom display item status from SAP, returning display condition, age in days, planned rotation date, and replacement article number.

naftiko: "0.5"
info:
  label: "SAP Showroom Display Inventory Lookup"
  description: "Retrieves showroom display item status from SAP, returning display condition, age in days, planned rotation date, and replacement article number."
  tags:
    - retail
    - operations
    - sap
    - showroom
capability:
  exposes:
    - type: mcp
      namespace: showroom
      port: 8080
      tools:
        - name: get-display-inventory
          description: "Look up showroom display items from SAP. Returns condition, age, and rotation schedule."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The store code."
            - name: department
              in: body
              type: string
              description: "The showroom department."
          call: "sap.get-display-items"
          with:
            store: "{{store_code}}"
            department: "{{department}}"
          outputParameters:
            - name: displays
              type: array
              mapping: "$.data"
              items:
                - name: article_number
                  type: string
                  mapping: "$.articleNumber"
                - name: condition
                  type: string
                  mapping: "$.condition"
                - name: age_days
                  type: number
                  mapping: "$.ageDays"
                - name: rotation_date
                  type: string
                  mapping: "$.plannedRotationDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: displays
          path: "/store-management/showroom/displays"
          operations:
            - name: get-display-items
              method: GET

Retrieves spare parts availability from SAP for furniture components, returning part number, available quantity, and order instructions for customers needing replacement parts.

naftiko: "0.5"
info:
  label: "SAP Spare Parts Availability Lookup"
  description: "Retrieves spare parts availability from SAP for furniture components, returning part number, available quantity, and order instructions for customers needing replacement parts."
  tags:
    - customer-service
    - retail
    - sap
    - spare-parts
capability:
  exposes:
    - type: mcp
      namespace: after-sales
      port: 8080
      tools:
        - name: check-spare-parts
          description: "Look up spare parts availability from SAP. Returns part details and ordering instructions."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The parent furniture article number."
            - name: part_description
              in: body
              type: string
              description: "Description of the needed spare part."
          call: "sap.search-spare-parts"
          with:
            article: "{{article_number}}"
            description: "{{part_description}}"
          outputParameters:
            - name: parts
              type: array
              mapping: "$.data"
              items:
                - name: part_number
                  type: string
                  mapping: "$.partNumber"
                - name: description
                  type: string
                  mapping: "$.description"
                - name: available_qty
                  type: number
                  mapping: "$.availableQuantity"
                - name: price
                  type: number
                  mapping: "$.price"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: spare-parts
          path: "/product-management/spare-parts"
          operations:
            - name: search-spare-parts
              method: GET

Reconciles physical inventory counts against SAP system records, flags discrepancies above threshold, creates adjustment postings, and sends a shrinkage report to the store controller.

naftiko: "0.5"
info:
  label: "SAP Store Inventory Count Reconciliation Orchestrator"
  description: "Reconciles physical inventory counts against SAP system records, flags discrepancies above threshold, creates adjustment postings, and sends a shrinkage report to the store controller."
  tags:
    - retail
    - inventory
    - sap
    - finance
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: inventory-control
      port: 8080
      tools:
        - name: reconcile-inventory-count
          description: "Orchestrate inventory count reconciliation: compare counts, flag discrepancies, post adjustments, and report."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The store code."
            - name: count_date
              in: body
              type: string
              description: "Count date in YYYY-MM-DD format."
          steps:
            - name: get-count-results
              type: call
              call: "sap.get-physical-count"
              with:
                store: "{{store_code}}"
                date: "{{count_date}}"
            - name: compare-to-system
              type: call
              call: "sap.compare-inventory"
              with:
                store: "{{store_code}}"
                count_data: "{{get-count-results.data}}"
            - name: post-adjustments
              type: call
              call: "sap.post-inventory-adjustments"
              with:
                store: "{{store_code}}"
                adjustments: "{{compare-to-system.discrepancies}}"
            - name: send-report
              type: call
              call: "msteams.post-message"
              with:
                channel: "store-{{store_code}}-finance"
                message: "Inventory count for {{store_code}} on {{count_date}}: {{compare-to-system.total_items}} items counted. {{compare-to-system.discrepancy_count}} discrepancies. Shrinkage value: ${{compare-to-system.shrinkage_value}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: counts
          path: "/inventory/physical-counts"
          operations:
            - name: get-physical-count
              method: GET
            - name: compare-inventory
              method: POST
            - name: post-inventory-adjustments
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves supplier lead time data from SAP for a specific material, returning average lead time in days, on-time delivery rate, and last shipment date.

naftiko: "0.5"
info:
  label: "SAP Supplier Lead Time Lookup"
  description: "Retrieves supplier lead time data from SAP for a specific material, returning average lead time in days, on-time delivery rate, and last shipment date."
  tags:
    - supply-chain
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: get-supplier-lead-time
          description: "Look up supplier lead times from SAP. Returns average lead time, on-time rate, and last shipment."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor identifier."
          call: "sap.get-lead-time"
          with:
            material: "{{material_number}}"
            vendor: "{{vendor_id}}"
          outputParameters:
            - name: avg_lead_time_days
              type: number
              mapping: "$.avgLeadTimeDays"
            - name: on_time_delivery_pct
              type: number
              mapping: "$.onTimeDeliveryPercent"
            - name: last_shipment_date
              type: string
              mapping: "$.lastShipmentDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: vendors
          path: "/procurement/vendors/{{vendor}}/materials/{{material}}/lead-time"
          inputParameters:
            - name: vendor
              in: path
            - name: material
              in: path
          operations:
            - name: get-lead-time
              method: GET

Retrieves textile material composition data from SAP for regulatory labeling compliance, returning fabric percentages, country of origin, and care instructions.

naftiko: "0.5"
info:
  label: "SAP Textile Material Composition Lookup"
  description: "Retrieves textile material composition data from SAP for regulatory labeling compliance, returning fabric percentages, country of origin, and care instructions."
  tags:
    - compliance
    - product
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-compliance
      port: 8080
      tools:
        - name: get-textile-composition
          description: "Look up textile composition from SAP for labeling compliance. Returns fabric mix and care instructions."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The article number."
          call: "sap.get-material-composition"
          with:
            article: "{{article_number}}"
          outputParameters:
            - name: composition
              type: array
              mapping: "$.materials"
            - name: country_of_origin
              type: string
              mapping: "$.countryOfOrigin"
            - name: care_instructions
              type: string
              mapping: "$.careInstructions"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: materials
          path: "/product-management/articles/{{article}}/composition"
          inputParameters:
            - name: article
              in: path
          operations:
            - name: get-material-composition
              method: GET

Reconciles vendor invoices by matching SAP purchase orders to received invoices, flagging price discrepancies, routing exceptions for approval in ServiceNow, and posting approved invoices for payment.

naftiko: "0.5"
info:
  label: "SAP Vendor Invoice Reconciliation Orchestrator"
  description: "Reconciles vendor invoices by matching SAP purchase orders to received invoices, flagging price discrepancies, routing exceptions for approval in ServiceNow, and posting approved invoices for payment."
  tags:
    - finance
    - procurement
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: accounts-payable
      port: 8080
      tools:
        - name: reconcile-vendor-invoice
          description: "Orchestrate invoice reconciliation: match PO, flag discrepancies, route exceptions, and post for payment."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
          steps:
            - name: match-po
              type: call
              call: "sap.match-invoice-to-po"
              with:
                invoice: "{{invoice_number}}"
            - name: check-discrepancies
              type: call
              call: "sap.check-price-variance"
              with:
                invoice: "{{invoice_number}}"
                po_number: "{{match-po.po_number}}"
            - name: route-exception
              type: call
              call: "servicenow.create-approval"
              with:
                short_description: "Invoice {{invoice_number}} price variance: {{check-discrepancies.variance_pct}}%"
                approver: "{{match-po.buyer_email}}"
            - name: post-for-payment
              type: call
              call: "sap.post-invoice-payment"
              with:
                invoice: "{{invoice_number}}"
                po_number: "{{match-po.po_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: invoices
          path: "/finance/invoices"
          operations:
            - name: match-invoice-to-po
              method: GET
            - name: check-price-variance
              method: GET
            - name: post-invoice-payment
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: approvals
          path: "/table/sysapproval_approver"
          operations:
            - name: create-approval
              method: POST

Triggers automatic warehouse replenishment in SAP when store shelf stock drops below minimum threshold, returning replenishment order number and expected delivery date.

naftiko: "0.5"
info:
  label: "SAP Warehouse Replenishment Trigger"
  description: "Triggers automatic warehouse replenishment in SAP when store shelf stock drops below minimum threshold, returning replenishment order number and expected delivery date."
  tags:
    - retail
    - supply-chain
    - sap
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: replenishment
      port: 8080
      tools:
        - name: trigger-replenishment
          description: "Trigger SAP warehouse replenishment for low-stock items. Returns order number and delivery date."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The IKEA article number."
            - name: store_code
              in: body
              type: string
              description: "The store code."
          call: "sap.create-replenishment-order"
          with:
            article: "{{article_number}}"
            store: "{{store_code}}"
          outputParameters:
            - name: order_number
              type: string
              mapping: "$.orderNumber"
            - name: expected_delivery
              type: string
              mapping: "$.expectedDeliveryDate"
            - name: quantity
              type: number
              mapping: "$.orderQuantity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: replenishment
          path: "/inventory/replenishment-orders"
          operations:
            - name: create-replenishment-order
              method: POST

Launches a seasonal marketing campaign by activating promotions in SAP, publishing campaign content in Contentful, scheduling social media posts via Instagram API, and setting up Adobe Analytics tracking.

naftiko: "0.5"
info:
  label: "Seasonal Campaign Launch Orchestrator"
  description: "Launches a seasonal marketing campaign by activating promotions in SAP, publishing campaign content in Contentful, scheduling social media posts via Instagram API, and setting up Adobe Analytics tracking."
  tags:
    - marketing
    - retail
    - sap
    - contentful
    - instagram
    - adobe-analytics
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: launch-seasonal-campaign
          description: "Orchestrate seasonal campaign launch: activate promos, publish content, schedule social posts, and set up tracking."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The campaign identifier."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date in YYYY-MM-DD format."
          steps:
            - name: activate-promotions
              type: call
              call: "sap.activate-campaign-pricing"
              with:
                campaign_id: "{{campaign_id}}"
                start_date: "{{start_date}}"
            - name: publish-content
              type: call
              call: "contentful.publish-campaign"
              with:
                campaign_id: "{{campaign_id}}"
            - name: schedule-social
              type: call
              call: "instagram.schedule-posts"
              with:
                campaign_id: "{{campaign_id}}"
                publish_date: "{{start_date}}"
            - name: setup-tracking
              type: call
              call: "adobe-analytics.create-campaign-segment"
              with:
                campaign_id: "{{campaign_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: campaigns
          path: "/pricing/campaigns"
          operations:
            - name: activate-campaign-pricing
              method: POST
    - type: http
      namespace: contentful
      baseUri: "https://api.contentful.com/spaces/$secrets.contentful_space_id"
      authentication:
        type: bearer
        token: "$secrets.contentful_token"
      resources:
        - name: entries
          path: "/entries"
          operations:
            - name: publish-campaign
              method: PUT
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: posts
          path: "/media"
          operations:
            - name: schedule-posts
              method: POST
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/ikea"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: segments
          path: "/segments"
          operations:
            - name: create-campaign-segment
              method: POST

Retrieves a ServiceNow incident by number and returns its state, assigned group, priority, and resolution notes.

naftiko: "0.5"
info:
  label: "ServiceNow IT Incident Status Lookup"
  description: "Retrieves a ServiceNow incident by number and returns its state, assigned group, priority, and resolution notes."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: incident-status
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: sysparm_query
              in: query
              value: "number={{incident_number}}"
          operations:
            - name: get-incident
              method: GET

Retrieves open store maintenance tickets from ServiceNow, returning ticket number, category, priority, and assigned technician.

naftiko: "0.5"
info:
  label: "ServiceNow Store Maintenance Ticket Lookup"
  description: "Retrieves open store maintenance tickets from ServiceNow, returning ticket number, category, priority, and assigned technician."
  tags:
    - operations
    - maintenance
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: get-maintenance-tickets
          description: "Look up open store maintenance tickets from ServiceNow. Returns ticket details and status."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
          call: "servicenow.get-maintenance-tickets"
          with:
            store: "{{store_code}}"
          outputParameters:
            - name: tickets
              type: array
              mapping: "$.result"
              items:
                - name: number
                  type: string
                  mapping: "$.number"
                - name: category
                  type: string
                  mapping: "$.category"
                - name: priority
                  type: string
                  mapping: "$.priority"
                - name: assigned_to
                  type: string
                  mapping: "$.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-maintenance-tickets
              method: GET

Retrieves a product design document from SharePoint by file path, returning the download URL and metadata.

naftiko: "0.5"
info:
  label: "SharePoint Design Document Retriever"
  description: "Retrieves a product design document from SharePoint by file path, returning the download URL and metadata."
  tags:
    - design
    - documents
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: design-docs
      port: 8080
      tools:
        - name: get-design-document
          description: "Retrieve a product design document from SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "Path to the file."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            file_path: "{{file_path}}"
          outputParameters:
            - name: download_url
              type: string
              mapping: "$.@microsoft.graph.downloadUrl"
            - name: file_name
              type: string
              mapping: "$.name"
            - name: last_modified
              type: string
              mapping: "$.lastModifiedDateTime"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Queries Snowflake for a customer's purchase history, returning order dates, article numbers, quantities, and total spend over the past twelve months.

naftiko: "0.5"
info:
  label: "Snowflake Customer Purchase History Lookup"
  description: "Queries Snowflake for a customer's purchase history, returning order dates, article numbers, quantities, and total spend over the past twelve months."
  tags:
    - retail
    - analytics
    - snowflake
    - customer
capability:
  exposes:
    - type: mcp
      namespace: customer-analytics
      port: 8080
      tools:
        - name: get-purchase-history
          description: "Look up customer purchase history from Snowflake. Returns orders, items, and total spend."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The IKEA Family customer identifier."
          call: "snowflake.query-purchase-history"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: total_spend
              type: number
              mapping: "$.data[0].total_spend"
            - name: order_count
              type: number
              mapping: "$.data[0].order_count"
            - name: favorite_category
              type: string
              mapping: "$.data[0].top_category"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-purchase-history
              method: POST

Runs a customer segmentation query in Snowflake, returning purchase frequency, average order value, and customer tier.

naftiko: "0.5"
info:
  label: "Snowflake Customer Segmentation Query"
  description: "Runs a customer segmentation query in Snowflake, returning purchase frequency, average order value, and customer tier."
  tags:
    - analytics
    - data
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-analytics
      port: 8080
      tools:
        - name: query-customer-segment
          description: "Run a customer segmentation query in Snowflake."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The IKEA Family customer ID."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT purchase_count, avg_order_value, customer_tier, last_purchase_date FROM CUSTOMER_SEGMENTS WHERE customer_id = '{{customer_id}}'"
          outputParameters:
            - name: purchase_count
              type: string
              mapping: "$.data[0][0]"
            - name: avg_order_value
              type: string
              mapping: "$.data[0][1]"
            - name: customer_tier
              type: string
              mapping: "$.data[0][2]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Queries Snowflake for e-commerce conversion funnel metrics, returning session count, product view rate, add-to-cart rate, checkout rate, and purchase conversion rate.

naftiko: "0.5"
info:
  label: "Snowflake E-Commerce Conversion Funnel Lookup"
  description: "Queries Snowflake for e-commerce conversion funnel metrics, returning session count, product view rate, add-to-cart rate, checkout rate, and purchase conversion rate."
  tags:
    - e-commerce
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: e-commerce-analytics
      port: 8080
      tools:
        - name: get-conversion-funnel
          description: "Look up e-commerce funnel metrics from Snowflake. Returns step-by-step conversion rates."
          inputParameters:
            - name: date_range_start
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_range_end
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
            - name: market
              in: body
              type: string
              description: "Market code (e.g., SE, US, DE)."
          call: "snowflake.query-funnel"
          with:
            start: "{{date_range_start}}"
            end: "{{date_range_end}}"
            market: "{{market}}"
          outputParameters:
            - name: sessions
              type: number
              mapping: "$.data[0].sessions"
            - name: product_view_rate
              type: number
              mapping: "$.data[0].product_view_rate"
            - name: add_to_cart_rate
              type: number
              mapping: "$.data[0].add_to_cart_rate"
            - name: purchase_rate
              type: number
              mapping: "$.data[0].purchase_rate"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-funnel
              method: POST

Queries Snowflake for aggregated product review sentiment analysis, returning average rating, positive sentiment percentage, and top mentioned themes.

naftiko: "0.5"
info:
  label: "Snowflake Product Review Sentiment Lookup"
  description: "Queries Snowflake for aggregated product review sentiment analysis, returning average rating, positive sentiment percentage, and top mentioned themes."
  tags:
    - analytics
    - product
    - snowflake
    - sentiment
capability:
  exposes:
    - type: mcp
      namespace: product-insights
      port: 8080
      tools:
        - name: get-review-sentiment
          description: "Look up product review sentiment from Snowflake. Returns ratings, sentiment score, and themes."
          inputParameters:
            - name: article_number
              in: body
              type: string
              description: "The IKEA article number."
          call: "snowflake.query-sentiment"
          with:
            article: "{{article_number}}"
          outputParameters:
            - name: avg_rating
              type: number
              mapping: "$.data[0].avg_rating"
            - name: positive_sentiment_pct
              type: number
              mapping: "$.data[0].positive_pct"
            - name: top_themes
              type: array
              mapping: "$.data[0].top_themes"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-sentiment
              method: POST

Queries Snowflake for store foot traffic analytics, returning daily visitor count, peak hours, average dwell time, and conversion rate.

naftiko: "0.5"
info:
  label: "Snowflake Store Traffic Analytics Lookup"
  description: "Queries Snowflake for store foot traffic analytics, returning daily visitor count, peak hours, average dwell time, and conversion rate."
  tags:
    - retail
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: store-analytics
      port: 8080
      tools:
        - name: get-store-traffic
          description: "Look up store traffic analytics from Snowflake. Returns visitors, peak hours, and conversion rate."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: date
              in: body
              type: string
              description: "Date in YYYY-MM-DD format."
          call: "snowflake.query-store-traffic"
          with:
            store: "{{store_code}}"
            date: "{{date}}"
          outputParameters:
            - name: visitor_count
              type: number
              mapping: "$.data[0].visitor_count"
            - name: peak_hour
              type: string
              mapping: "$.data[0].peak_hour"
            - name: avg_dwell_minutes
              type: number
              mapping: "$.data[0].avg_dwell_minutes"
            - name: conversion_rate
              type: number
              mapping: "$.data[0].conversion_rate"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-store-traffic
              method: POST

Pulls energy usage data for an IKEA store from the building management system and logs it to Google Sheets for sustainability reporting.

naftiko: "0.5"
info:
  label: "Store Energy Consumption Tracker"
  description: "Pulls energy usage data for an IKEA store from the building management system and logs it to Google Sheets for sustainability reporting."
  tags:
    - sustainability
    - retail
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: energy-tracking
      port: 8080
      tools:
        - name: track-energy
          description: "Retrieve energy data and log to Google Sheets."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: month
              in: body
              type: string
              description: "Month in YYYY-MM format."
          steps:
            - name: get-energy
              type: call
              call: "bms.get-consumption"
              with:
                store_code: "{{store_code}}"
                month: "{{month}}"
            - name: log-to-sheet
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "sustainability_tracking"
                range: "Energy!A:E"
                values: "{{store_code}},{{month}},{{get-energy.electricity_kwh}},{{get-energy.solar_kwh}},{{get-energy.water_m3}}"
  consumes:
    - type: http
      namespace: bms
      baseUri: "https://bms-api.ikea.com/v1"
      authentication:
        type: bearer
        token: "$secrets.bms_token"
      resources:
        - name: consumption
          path: "/stores/{{store_code}}/consumption"
          inputParameters:
            - name: store_code
              in: path
            - name: month
              in: query
          operations:
            - name: get-consumption
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Optimizes store energy consumption by pulling smart meter data from Snowflake, comparing against benchmarks, adjusting HVAC schedules in the building management system, and reporting savings to the sustainability team.

naftiko: "0.5"
info:
  label: "Store Energy Optimization Orchestrator"
  description: "Optimizes store energy consumption by pulling smart meter data from Snowflake, comparing against benchmarks, adjusting HVAC schedules in the building management system, and reporting savings to the sustainability team."
  tags:
    - sustainability
    - operations
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: energy-management
      port: 8080
      tools:
        - name: optimize-store-energy
          description: "Orchestrate energy optimization: pull consumption, benchmark, adjust HVAC, and report savings."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The store code."
          steps:
            - name: get-consumption
              type: call
              call: "snowflake.query-energy-consumption"
              with:
                store: "{{store_code}}"
            - name: benchmark-comparison
              type: call
              call: "snowflake.compare-energy-benchmarks"
              with:
                store: "{{store_code}}"
                consumption: "{{get-consumption.data}}"
            - name: adjust-hvac
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "HVAC schedule adjustment for store {{store_code}}"
                description: "Recommended savings: {{benchmark-comparison.potential_savings_kwh}} kWh. New schedule: {{benchmark-comparison.recommended_schedule}}."
            - name: report-savings
              type: call
              call: "msteams.post-message"
              with:
                channel: "sustainability-energy"
                message: "Store {{store_code}} energy review: Current consumption {{get-consumption.total_kwh}} kWh. Benchmark gap: {{benchmark-comparison.gap_pct}}%. Potential savings: {{benchmark-comparison.potential_savings_kwh}} kWh."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-energy-consumption
              method: POST
            - name: compare-energy-benchmarks
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Checks real-time inventory levels at a specific IKEA store for a given article number, returning on-hand quantity and restock date.

naftiko: "0.5"
info:
  label: "Store Inventory Level Checker"
  description: "Checks real-time inventory levels at a specific IKEA store for a given article number, returning on-hand quantity and restock date."
  tags:
    - retail
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: store-inventory
      port: 8080
      tools:
        - name: check-store-inventory
          description: "Check inventory levels at a specific IKEA store."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: article_number
              in: body
              type: string
              description: "The product article number."
          call: "sap.get-plant-stock"
          with:
            plant: "{{store_code}}"
            material: "{{article_number}}"
          outputParameters:
            - name: on_hand_qty
              type: string
              mapping: "$.d.AvailableStock"
            - name: restock_date
              type: string
              mapping: "$.d.NextDeliveryDate"
            - name: reserved_qty
              type: string
              mapping: "$.d.ReservedStock"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: plant-stock
          path: "/A_MatlStkInAcctMod(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-plant-stock
              method: GET

Checks store planogram compliance by pulling the current layout from SAP, comparing against the approved plan in SharePoint, flagging deviations, and sending a compliance report to the visual merchandising team.

naftiko: "0.5"
info:
  label: "Store Layout Planogram Compliance Orchestrator"
  description: "Checks store planogram compliance by pulling the current layout from SAP, comparing against the approved plan in SharePoint, flagging deviations, and sending a compliance report to the visual merchandising team."
  tags:
    - retail
    - operations
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: visual-merchandising
      port: 8080
      tools:
        - name: audit-planogram-compliance
          description: "Orchestrate planogram compliance audit: pull layout, compare to plan, flag deviations, and report."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The IKEA store code."
            - name: department
              in: body
              type: string
              description: "The store department (e.g., bedroom, kitchen)."
          steps:
            - name: get-current-layout
              type: call
              call: "sap.get-store-layout"
              with:
                store: "{{store_code}}"
                department: "{{department}}"
            - name: get-approved-plan
              type: call
              call: "sharepoint.get-document"
              with:
                library: "Planograms"
                path: "{{store_code}}/{{department}}/approved-plan.json"
            - name: compare-layouts
              type: call
              call: "snowflake.run-layout-comparison"
              with:
                current: "{{get-current-layout.data}}"
                approved: "{{get-approved-plan.data}}"
            - name: notify-team
              type: call
              call: "msteams.post-message"
              with:
                channel: "visual-merchandising"
                message: "Planogram audit for {{store_code}} {{department}}: {{compare-layouts.compliance_pct}}% compliant. {{compare-layouts.deviation_count}} deviations found."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: layouts
          path: "/store-management/layouts"
          operations:
            - name: get-store-layout
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/ikea.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/drive/items"
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: run-layout-comparison
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Prepares a new IKEA store opening by provisioning store systems in ServiceNow, setting up co-worker accounts in Workday, creating the store profile in SAP, and scheduling a grand opening announcement in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Opening Preparation Orchestrator"
  description: "Prepares a new IKEA store opening by provisioning store systems in ServiceNow, setting up co-worker accounts in Workday, creating the store profile in SAP, and scheduling a grand opening announcement in Microsoft Teams."
  tags:
    - operations
    - retail
    - servicenow
    - workday
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-launch
      port: 8080
      tools:
        - name: prepare-store-opening
          description: "Orchestrate new store opening: provision systems, create accounts, set up SAP profile, and announce."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The new store code."
            - name: opening_date
              in: body
              type: string
              description: "Grand opening date in YYYY-MM-DD format."
            - name: store_name
              in: body
              type: string
              description: "The store name."
          steps:
            - name: provision-systems
              type: call
              call: "servicenow.create-request"
              with:
                category: "new_store_provisioning"
                short_description: "System provisioning for store {{store_code}} - {{store_name}}"
            - name: setup-co-worker-accounts
              type: call
              call: "workday.create-store-org"
              with:
                store_code: "{{store_code}}"
                store_name: "{{store_name}}"
            - name: create-store-profile
              type: call
              call: "sap.create-store"
              with:
                store_code: "{{store_code}}"
                name: "{{store_name}}"
                opening_date: "{{opening_date}}"
            - name: announce-opening
              type: call
              call: "msteams.post-message"
              with:
                channel: "global-announcements"
                message: "New IKEA store {{store_name}} ({{store_code}}) opening on {{opening_date}}! Systems provisioned. SAP profile created."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: organizations
          path: "/ikea/organizations"
          operations:
            - name: create-store-org
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: stores
          path: "/store-management/stores"
          operations:
            - name: create-store
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Reports a store safety incident by creating a ServiceNow incident, pulling co-worker details from Workday, logging the event in Snowflake for trend analysis, and alerting the regional safety manager.

naftiko: "0.5"
info:
  label: "Store Safety Incident Reporting Orchestrator"
  description: "Reports a store safety incident by creating a ServiceNow incident, pulling co-worker details from Workday, logging the event in Snowflake for trend analysis, and alerting the regional safety manager."
  tags:
    - safety
    - operations
    - servicenow
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-safety
      port: 8080
      tools:
        - name: report-safety-incident
          description: "Orchestrate safety incident reporting: create ticket, get co-worker info, log event, and alert manager."
          inputParameters:
            - name: store_code
              in: body
              type: string
              description: "The store code."
            - name: incident_type
              in: body
              type: string
              description: "Type of safety incident."
            - name: reporter_id
              in: body
              type: string
              description: "The reporting co-worker ID."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Safety incident at store {{store_code}}: {{incident_type}}"
                category: "safety"
                urgency: "2"
            - name: get-reporter
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{reporter_id}}"
            - name: log-event
              type: call
              call: "snowflake.insert-safety-event"
              with:
                store: "{{store_code}}"
                type: "{{incident_type}}"
                reporter: "{{get-reporter.full_name}}"
            - name: alert-manager
              type: call
              call: "msteams.post-message"
              with:
                channel: "safety-region-{{store_code}}"
                message: "Safety incident at store {{store_code}}: {{incident_type}}. Reported by: {{get-reporter.full_name}}. ServiceNow: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - 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: "/ikea/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: insert-safety-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves a SAP purchase order for supplier procurement, returning vendor, delivery date, total value, and line item status.

naftiko: "0.5"
info:
  label: "Supplier Purchase Order Status Lookup"
  description: "Retrieves a SAP purchase order for supplier procurement, returning vendor, delivery date, total value, and line item status."
  tags:
    - supply-chain
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

When a quality issue is reported for a supplier delivery, creates a SAP quality notification, logs a Confluence investigation page, and alerts the sourcing team via Teams.

naftiko: "0.5"
info:
  label: "Supplier Quality Issue Tracker"
  description: "When a quality issue is reported for a supplier delivery, creates a SAP quality notification, logs a Confluence investigation page, and alerts the sourcing team via Teams."
  tags:
    - supply-chain
    - quality
    - sap
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-tracking
      port: 8080
      tools:
        - name: report-quality-issue
          description: "Report a supplier quality issue and trigger investigation."
          inputParameters:
            - name: material
              in: body
              type: string
              description: "Article number of the affected product."
            - name: supplier_code
              in: body
              type: string
              description: "SAP supplier code."
            - name: defect_description
              in: body
              type: string
              description: "Description of the quality defect."
          steps:
            - name: create-qn
              type: call
              call: "sap.create-quality-notification"
              with:
                material: "{{material}}"
                supplier: "{{supplier_code}}"
                description: "{{defect_description}}"
            - name: log-investigation
              type: call
              call: "confluence.create-page"
              with:
                space_key: "QUALITY"
                title: "QN {{create-qn.notification_number}} - {{material}}"
                body: "Supplier: {{supplier_code}}. Defect: {{defect_description}}"
            - name: alert-sourcing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sourcing_quality"
                text: "Quality issue: {{material}} from supplier {{supplier_code}}. QN: {{create-qn.notification_number}}. Details: {{defect_description}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-quality-notification
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://ikea.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Conducts a supplier sustainability audit by pulling IWAY compliance data from SAP, checking environmental certifications in Snowflake, generating an audit report in Confluence, and scheduling a follow-up review.

naftiko: "0.5"
info:
  label: "Supplier Sustainability Audit Orchestrator"
  description: "Conducts a supplier sustainability audit by pulling IWAY compliance data from SAP, checking environmental certifications in Snowflake, generating an audit report in Confluence, and scheduling a follow-up review."
  tags:
    - sustainability
    - supply-chain
    - sap
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: supplier-compliance
      port: 8080
      tools:
        - name: audit-supplier-sustainability
          description: "Orchestrate supplier sustainability audit: check IWAY compliance, verify certs, report, and schedule follow-up."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The supplier identifier."
          steps:
            - name: get-iway-compliance
              type: call
              call: "sap.get-iway-status"
              with:
                supplier_id: "{{supplier_id}}"
            - name: check-env-certifications
              type: call
              call: "snowflake.query-supplier-certs"
              with:
                supplier_id: "{{supplier_id}}"
            - name: create-audit-report
              type: call
              call: "confluence.create-page"
              with:
                space: "SUSTAINABILITY"
                title: "Supplier Audit: {{supplier_id}}"
                body: "IWAY compliance: {{get-iway-compliance.status}}. Env certs: {{check-env-certifications.cert_count}} active. Risk level: {{get-iway-compliance.risk_level}}."
            - name: schedule-follow-up
              type: call
              call: "msteams.create-event"
              with:
                subject: "Supplier {{supplier_id}} sustainability follow-up"
                start_date: "{{get-iway-compliance.next_review_date}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: iway
          path: "/procurement/suppliers/{{supplier_id}}/iway"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-iway-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-supplier-certs
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://ikea.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/me/events"
          operations:
            - name: create-event
              method: POST

Validates sustainable material sourcing by checking supplier certifications in SAP, querying forestry chain-of-custody data in Snowflake, generating a compliance report in SharePoint, and alerting the sustainability team.

naftiko: "0.5"
info:
  label: "Sustainability Material Sourcing Orchestrator"
  description: "Validates sustainable material sourcing by checking supplier certifications in SAP, querying forestry chain-of-custody data in Snowflake, generating a compliance report in SharePoint, and alerting the sustainability team."
  tags:
    - sustainability
    - supply-chain
    - sap
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: validate-material-sourcing
          description: "Orchestrate sustainable sourcing validation: check certs, verify chain-of-custody, report, and alert."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: supplier_id
              in: body
              type: string
              description: "The supplier identifier."
          steps:
            - name: check-certifications
              type: call
              call: "sap.get-supplier-certifications"
              with:
                supplier_id: "{{supplier_id}}"
            - name: verify-chain-of-custody
              type: call
              call: "snowflake.query-coc-data"
              with:
                material: "{{material_number}}"
                supplier: "{{supplier_id}}"
            - name: generate-report
              type: call
              call: "sharepoint.create-document"
              with:
                library: "SustainabilityReports"
                filename: "sourcing-audit-{{material_number}}-{{supplier_id}}.pdf"
                data:
                  fsc_certified: "{{check-certifications.fsc_status}}"
                  coc_valid: "{{verify-chain-of-custody.valid}}"
            - name: alert-team
              type: call
              call: "msteams.post-message"
              with:
                channel: "sustainability"
                message: "Material {{material_number}} sourcing audit complete. FSC: {{check-certifications.fsc_status}}. CoC valid: {{verify-chain-of-custody.valid}}. Report: {{generate-report.url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-sap.hana.cloud/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: suppliers
          path: "/procurement/suppliers/{{supplier_id}}/certifications"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier-certifications
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://ikea.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: queries
          path: "/statements"
          operations:
            - name: query-coc-data
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/ikea.sharepoint.com"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/drive/items"
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/channels/messages"
          operations:
            - name: post-message
              method: POST

Retrieves regional sales performance data from a Tableau workbook, returning revenue, units sold, average transaction value, and year-over-year growth.

naftiko: "0.5"
info:
  label: "Tableau Regional Sales Report Lookup"
  description: "Retrieves regional sales performance data from a Tableau workbook, returning revenue, units sold, average transaction value, and year-over-year growth."
  tags:
    - reporting
    - analytics
    - tableau
    - sales
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: get-regional-sales
          description: "Look up regional sales from Tableau. Returns revenue, units, ATV, and YoY growth."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "The sales region (e.g., Europe, North America)."
            - name: period
              in: body
              type: string
              description: "Reporting period in YYYY-MM format."
          call: "tableau.get-view-data"
          with:
            workbook: "regional-sales"
            view: "summary"
            filters:
              region: "{{region}}"
              period: "{{period}}"
          outputParameters:
            - name: revenue
              type: number
              mapping: "$.data[0].revenue"
            - name: units_sold
              type: number
              mapping: "$.data[0].units"
            - name: avg_transaction_value
              type: number
              mapping: "$.data[0].atv"
            - name: yoy_growth_pct
              type: number
              mapping: "$.data[0].yoy_growth"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://ikea.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/ikea/views"
          operations:
            - name: get-view-data
              method: GET

Searches recent Twitter mentions of IKEA brand handles and returns recent tweets and engagement metrics.

naftiko: "0.5"
info:
  label: "Twitter Brand Mention Monitor"
  description: "Searches recent Twitter mentions of IKEA brand handles and returns recent tweets and engagement metrics."
  tags:
    - marketing
    - social-media
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: twitter-monitoring
      port: 8080
      tools:
        - name: get-brand-mentions
          description: "Search recent Twitter mentions of IKEA."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Twitter search query."
          call: "twitter.search-tweets"
          with:
            query: "{{query}}"
          outputParameters:
            - name: tweets
              type: string
              mapping: "$.data"
            - name: result_count
              type: string
              mapping: "$.meta.result_count"
  consumes:
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets
          path: "/tweets/search/recent"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-tweets
              method: GET

Creates a stock transfer order in SAP to move inventory between IKEA distribution centers and notifies the logistics team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Warehouse Transfer Order Creator"
  description: "Creates a stock transfer order in SAP to move inventory between IKEA distribution centers and notifies the logistics team via Microsoft Teams."
  tags:
    - supply-chain
    - logistics
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse-transfers
      port: 8080
      tools:
        - name: create-transfer-order
          description: "Create a stock transfer order and notify logistics."
          inputParameters:
            - name: material
              in: body
              type: string
              description: "Material/article number."
            - name: source_plant
              in: body
              type: string
              description: "Source warehouse/DC code."
            - name: target_plant
              in: body
              type: string
              description: "Target warehouse/store code."
            - name: quantity
              in: body
              type: string
              description: "Transfer quantity."
          steps:
            - name: create-transfer
              type: call
              call: "sap.create-stock-transfer"
              with:
                material: "{{material}}"
                source_plant: "{{source_plant}}"
                target_plant: "{{target_plant}}"
                quantity: "{{quantity}}"
            - name: notify-logistics
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "logistics_transfers"
                text: "Transfer order created: {{material}} x{{quantity}} from {{source_plant}} to {{target_plant}}. TO#: {{create-transfer.transfer_order_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ikea-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: transfers
          path: "/A_StockTransfer"
          operations:
            - name: create-stock-transfer
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Sends a delivery status update to an IKEA customer via WhatsApp when their order ships from the distribution center.

naftiko: "0.5"
info:
  label: "WhatsApp Customer Delivery Update"
  description: "Sends a delivery status update to an IKEA customer via WhatsApp when their order ships from the distribution center."
  tags:
    - logistics
    - customer-service
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: delivery-notifications
      port: 8080
      tools:
        - name: send-delivery-update
          description: "Send a WhatsApp delivery status update to a customer."
          inputParameters:
            - name: customer_phone
              in: body
              type: string
              description: "Customer phone number."
            - name: order_id
              in: body
              type: string
              description: "Order ID."
            - name: tracking_number
              in: body
              type: string
              description: "Tracking number."
          call: "whatsapp.send-message"
          with:
            phone: "{{customer_phone}}"
            template: "delivery_shipped"
            parameters: "{{order_id}},{{tracking_number}}"
  consumes:
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves active certifications for an IKEA co-worker from Workday, returning certification name, issue date, and expiration date.

naftiko: "0.5"
info:
  label: "Workday Co-Worker Certification Lookup"
  description: "Retrieves active certifications for an IKEA co-worker from Workday, returning certification name, issue date, and expiration date."
  tags:
    - hr
    - compliance
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-compliance
      port: 8080
      tools:
        - name: get-co-worker-certifications
          description: "Look up co-worker certifications from Workday. Returns certification details and expiry dates."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-certifications"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: certifications
              type: array
              mapping: "$.data"
              items:
                - name: name
                  type: string
                  mapping: "$.certificationName"
                - name: issue_date
                  type: string
                  mapping: "$.issueDate"
                - name: expiration_date
                  type: string
                  mapping: "$.expirationDate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/ikea/workers/{{worker_id}}/certifications"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-certifications
              method: GET

Retrieves co-worker engagement survey results from Workday for a business unit, returning participation rate, overall engagement score, and top improvement areas.

naftiko: "0.5"
info:
  label: "Workday Co-Worker Engagement Survey Lookup"
  description: "Retrieves co-worker engagement survey results from Workday for a business unit, returning participation rate, overall engagement score, and top improvement areas."
  tags:
    - hr
    - analytics
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-engagement
      port: 8080
      tools:
        - name: get-engagement-results
          description: "Look up engagement survey results from Workday. Returns participation, score, and improvement areas."
          inputParameters:
            - name: business_unit
              in: body
              type: string
              description: "The Workday business unit code."
            - name: survey_period
              in: body
              type: string
              description: "Survey period identifier."
          call: "workday.get-survey-results"
          with:
            unit: "{{business_unit}}"
            period: "{{survey_period}}"
          outputParameters:
            - name: participation_rate
              type: number
              mapping: "$.participationRate"
            - name: engagement_score
              type: number
              mapping: "$.overallScore"
            - name: top_improvement_areas
              type: array
              mapping: "$.improvementAreas"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: surveys
          path: "/ikea/surveys/engagement"
          operations:
            - name: get-survey-results
              method: GET

Processes co-worker departures by initiating the Workday termination, revoking Azure AD access, creating an IT equipment return ticket in ServiceNow, and notifying the store manager.

naftiko: "0.5"
info:
  label: "Workday Co-Worker Offboarding Orchestrator"
  description: "Processes co-worker departures by initiating the Workday termination, revoking Azure AD access, creating an IT equipment return ticket in ServiceNow, and notifying the store manager."
  tags:
    - hr
    - security
    - workday
    - azure-active-directory
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: offboard-co-worker
          description: "Orchestrate co-worker offboarding: terminate in Workday, revoke access, create return ticket, and notify."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: last_day
              in: body
              type: string
              description: "Last working day in YYYY-MM-DD format."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: revoke-access
              type: call
              call: "azure-ad.disable-user"
              with:
                email: "{{get-worker.email}}"
            - name: create-return-ticket
              type: call
              call: "servicenow.create-request"
              with:
                category: "equipment_return"
                short_description: "IT equipment return: {{get-worker.full_name}} - last day {{last_day}}"
            - name: notify-manager
              type: call
              call: "msteams.post-message"
              with:
                recipient: "{{get-worker.manager_email}}"
                message: "Offboarding initiated for {{get-worker.full_name}}. Last day: {{last_day}}. Access revoked. Equipment return ticket: {{create-return-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/ikea/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://ikea.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.snow_user"
        password: "$secrets.snow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/chats/messages"
          operations:
            - name: post-message
              method: POST

Retrieves an IKEA co-worker's upcoming shift schedule from Workday, returning shift times, department, and store assignment.

naftiko: "0.5"
info:
  label: "Workday Co-Worker Schedule Retriever"
  description: "Retrieves an IKEA co-worker's upcoming shift schedule from Workday, returning shift times, department, and store assignment."
  tags:
    - hr
    - scheduling
    - workday
capability:
  exposes:
    - type: mcp
      namespace: shift-scheduling
      port: 8080
      tools:
        - name: get-schedule
          description: "Retrieve upcoming shift schedule for an IKEA co-worker."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-schedule"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: shifts
              type: string
              mapping: "$.scheduleEntries"
            - name: department
              type: string
              mapping: "$.department"
            - name: store
              type: string
              mapping: "$.location"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/workers/{{worker_id}}/schedule"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-schedule
              method: GET

Retrieves a payroll summary for an IKEA co-worker from Workday, returning gross pay, net pay, and deductions.

naftiko: "0.5"
info:
  label: "Workday Payroll Summary Retriever"
  description: "Retrieves a payroll summary for an IKEA co-worker from Workday, returning gross pay, net pay, and deductions."
  tags:
    - hr
    - payroll
    - workday
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Retrieve the latest payroll summary for a co-worker."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-payslip"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: gross_pay
              type: string
              mapping: "$.payslip.grossPay"
            - name: net_pay
              type: string
              mapping: "$.payslip.netPay"
            - name: deductions
              type: string
              mapping: "$.payslip.totalDeductions"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payslips
          path: "/workers/{{worker_id}}/paySlips"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-payslip
              method: GET

Retrieves performance analytics from YouTube for IKEA product videos, returning views, watch time, and engagement.

naftiko: "0.5"
info:
  label: "YouTube Product Video Tracker"
  description: "Retrieves performance analytics from YouTube for IKEA product videos, returning views, watch time, and engagement."
  tags:
    - marketing
    - social-media
    - youtube
capability:
  exposes:
    - type: mcp
      namespace: youtube-analytics
      port: 8080
      tools:
        - name: get-video-performance
          description: "Retrieve YouTube video performance metrics."
          inputParameters:
            - name: video_id
              in: body
              type: string
              description: "The YouTube video ID."
          call: "youtube.get-stats"
          with:
            video_id: "{{video_id}}"
          outputParameters:
            - name: views
              type: string
              mapping: "$.items[0].statistics.viewCount"
            - name: likes
              type: string
              mapping: "$.items[0].statistics.likeCount"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/youtube/v3"
      authentication:
        type: apiKey
        name: "key"
        in: query
        value: "$secrets.youtube_api_key"
      resources:
        - name: videos
          path: "/videos"
          inputParameters:
            - name: id
              in: query
              value: "{{video_id}}"
            - name: part
              in: query
              value: "statistics"
          operations:
            - name: get-stats
              method: GET