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