Consumer Goods Industry Signals

Companies that manufacture and distribute products purchased by individuals for personal or household use, spanning food, personal care, apparel, and more.

This is a Naftiko Signals aggregate read of the Consumer Goods industry — mined from public workforce signals (job postings, press releases, newsroom content) across 83 companies and matched against Naftiko’s curated vocabulary of services, tools, concepts, and standards across the 44 Naftiko signal groups.

Across 83 companies in Consumer Goods we detected 2108 areas, 378 services, 231 tools, and 219 standards — producing an aggregate signal score of 21350.

How to read this page: Impact Report is the narrative read-out for the industry. Companies lists the 83 organizations included in the aggregate. Capabilities are Naftiko agent workflows common to Consumer Goods — each one runnable in the Naftiko Framework. Navigation ranks the strategic moves we’d recommend for any company in this vertical. Signals is the aggregate score across every Naftiko signal group, each row linking to its definition. Areas, Services, Tools, and Standards are the raw aggregate detections behind the score. Why? explains the methodology and audience.

Take Control Of Your Signals — Become a Naftiko Design Partner Today!
What’s next for you? Pick your role — we’ll point you at the right capability and next step.

Consumer Goods Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Consumer Goods industry, spanning manufacturers and distributors of food, personal care, apparel, and household products sold to individual consumers, is represented in this analysis by 24 companies. Across 11 scoring layers, the sector’s strongest investment signals cluster in Productivity (Services), Retrieval & Grounding (Data), and Efficiency & Specialization (Operations) — all three of which measure foundational operational depth rather than frontier AI capability. Johnson & Johnson leads the industry across nearly every scoring area, posting a Cloud score of 114, an AI score of 71, and an Automation score of 70 that collectively establish it as the sector’s clear technology investment front-runner.

The most consequential gap across Consumer Goods is the chasm between the industry’s strong data infrastructure and its underdeveloped AI customization layer. With Data scores reaching 131 at the top and Domain Specialization topping out at 2, firms have built substantial data estates without converting them into proprietary model behavior tuned for brand, consumer, or category intelligence. LVMH (AI: 57, Cloud: 85, Data: 117) and Kimberly-Clark (Cloud: 96, Data: 89) are the two firms that most closely trail Johnson & Johnson across multiple dimensions, while brands like Kraft Heinz, Coca-Cola, and Kellanova sit materially behind on nearly every layer — creating a widening capability gap that will increasingly affect competitive positioning in product innovation, supply chain responsiveness, and consumer engagement.


Layer 1: Foundational Layer

The Foundational Layer captures how Consumer Goods organizations invest in core capabilities spanning artificial intelligence, cloud infrastructure, open-source adoption, programming languages, and code practice.

Artificial Intelligence — Top Company: Johnson & Johnson (71)

Johnson & Johnson leads AI adoption across the 24-company Consumer Goods sector with a score of 71, followed by LVMH at 57 and Kimberly-Clark at 51. The gap between the top three and the broader field — Colgate Palmolive at 45, Nike and Reckitt Benckiser at 36, and Coca-Cola at just 19 — signals a bifurcating industry where a small group of firms have made deliberate AI infrastructure commitments while the majority have not. All 23 companies sampled deploy MailChimp, Salesforce, GitHub, Datadog, and ServiceNow, confirming that baseline enterprise SaaS is universal; what differentiates the leaders is the depth of AI-specific tooling layered on top of that common stack. The presence of Semantic Kernel, TensorFlow, and ClickHouse across the sector’s collective toolchain suggests that AI-adjacent engineering capability has begun to diffuse, even among lagging firms.

Cloud — Top Company: Johnson & Johnson (114)

Johnson & Johnson’s Cloud score of 114 is the highest recorded for any single company in this layer, followed by Hasbro at 107 and Kimberly-Clark and Nike both at 96. The spread from leader to laggard is wide — Coca-Cola (40), Kellanova (41), and Kraft Heinz (42) score less than 40% of Johnson & Johnson’s mark, indicating fundamentally different cloud architecture strategies. The universal services stack (MailChimp, ServiceNow, GitHub, Datadog, Salesforce across all 23 firms) and universal toolchain (Terraform, PowerShell, Pandas, NumPy) confirm that cloud tooling has been democratized across the sector, but depth of cloud-native practice — multi-region deployment, serverless adoption, cloud-native AI service consumption — is where the leaders have invested and the laggards have not.

Open-Source — Top Company: Johnson & Johnson (42)

Johnson & Johnson leads Open-Source at 42, ahead of LVMH (39), Nike (36), and Hasbro (34). Open-source depth across the sector includes Terraform, TensorFlow, React Native, Pandas, NumPy, and Elasticsearch — a rich ML engineering stack that is deployed at near-universal coverage across the 23 measured companies. Procter & Gamble’s low open-source score (18) and Kraft Heinz’s score (15) at the bottom suggest that some legacy Consumer Goods firms have maintained more conservative, proprietary software postures. Open-source depth at the top of the Consumer Goods field is comparable to or ahead of technology sector norms, which is a genuine asset as the sector shifts toward AI-powered product development.

Languages — Top Company: Johnson & Johnson (45)

Johnson & Johnson leads Languages at 45, closely followed by LVMH at 43 and Kimberly-Clark at 36. The near-universal languages stack across Consumer Goods includes TypeScript, R, and Scala alongside Python data tooling, reflecting polyglot engineering cultures that can support ML, data engineering, and modern frontend development simultaneously. The R and statistical language presence is notable for this sector — it signals that data science practice in Consumer Goods has deep roots in statistical analysis (market mix modeling, demand forecasting, consumer panel analytics) that are now being augmented by deep learning and generative AI tooling. Firms with strong R and Python codebases have a shorter path to production ML than those still relying on point-and-click analytics tools.

Code — Top Company: Johnson & Johnson (41)

Johnson & Johnson leads Code practice at 41, ahead of Hasbro (32) and LVMH (32). Both Terraform and PowerShell are present across virtually all 23 companies, reflecting infrastructure-as-code and scripting practice that is broadly established. The near-universal deployment of Bitbucket, GitHub, and SharePoint signals that version control and collaborative knowledge management are table stakes for the sector. The concentration of Code scores at the bottom of the distribution — Procter & Gamble (18) and Kellanova (19) — suggests that for some legacy food and consumer packaged goods firms, engineering discipline remains organizational pockets rather than enterprise-wide practice.


Layer 2: Retrieval & Grounding

Retrieval & Grounding captures how Consumer Goods organizations structure their data estate to support vector search, retrieval-augmented generation, prompt engineering, and grounded inference.

Data — Top Company: Johnson & Johnson (131)

Johnson & Johnson leads Data adoption with a score of 131, the highest single-area score in the Foundational and Retrieval layers combined, followed closely by LVMH at 117 and Unilever at 91. The breadth of the sector’s data toolchain is impressive: Terraform, Pandas, NumPy, Elasticsearch, TensorFlow, ClickHouse, and Semantic Kernel are deployed across 23 of the 24 measured companies — a level of uniformity that suggests data engineering has become a commodity skill set for Consumer Goods firms. Nestlé (48) and Kraft Heinz (49) at the bottom of the Data rankings reveal the ongoing challenge for large legacy food companies: decades of fragmented ERP systems, channel-specific data silos, and merger-legacy data models create structural impediments to the unified data estates that AI retrieval systems require. Johnson & Johnson’s lead here is likely driven by its healthcare-adjacent data governance disciplines and its decade-long investment in commercial analytics platforms.

Databases — Top Company: Hasbro (31)

Hasbro edges to the top of the Databases ranking at 31, ahead of 3M (30), Johnson & Johnson (30), and LVMH (30) — a rare area where Johnson & Johnson does not lead. The tight cluster at the top suggests multiple firms have made equivalent database investments. Elasticsearch and ClickHouse in the toolchain indicate that both search-optimized and analytics-optimized database patterns have been adopted at scale. The weakness at the bottom — Nestlé (12) and Coca-Cola (12) — reflects the persistent challenge that large, multi-geography beverage and food firms face in consolidating their database estates across disparate national and regional systems.

Virtualization — Top Company: Johnson & Johnson (22)

Johnson & Johnson leads Virtualization at 22, ahead of Hasbro (21) and Nike (17). Virtualization scores in this range suggest that containerized and virtualized infrastructure has progressed beyond basic VM deployment but has not yet reached full Kubernetes-native architectures at the top firms. For AI inference workloads that benefit from containerized, auto-scaling deployment, virtualization depth is a direct enabler — firms with higher virtualization scores can spin up and tear down model serving infrastructure more efficiently, reducing both cost and time-to-deployment for new AI applications.

Specifications — Top Company: Hasbro (13)

Hasbro and Johnson & Johnson both score 13 in Specifications, ahead of Nike (11) and LVMH (10). Formal API specification practice is more developed in Consumer Goods than in Construction, likely because consumer goods companies manage complex multi-channel commerce integrations — e-commerce APIs, retailer EDI connections, loyalty program interfaces — that require contract-first design. TypeScript’s presence across the toolchain reinforces a culture of type safety and interface definition. The Coca-Cola (3) and Mars (3) scores at the bottom indicate that some firms still rely on undocumented, point-to-point integrations that constrain AI system composability.

Context Engineering — (Collective signals only)

Context Engineering does not yet surface individual company rankings in Consumer Goods, indicating that systematic context architecture practice — designing prompt structures, managing conversation state, and engineering contextual grounding pipelines — has not emerged as a distinct discipline across the sector. Given the enormous potential for context-aware AI applications in Consumer Goods (personalized product recommendations grounded in purchase history, brand-voice-consistent AI content generation, retail-channel-aware pricing intelligence), the absence of visible context engineering investment is a latent opportunity rather than a structural constraint.


Layer 3: Customization & Adaptation

Customization & Adaptation measures investment in fine-tuning, model versioning, multimodal infrastructure, and domain-specific adaptation that would allow firms to develop proprietary AI behavior for consumer goods product development, marketing, and supply chain.

Data Pipelines — Top Company: Nike (13)

Nike leads Data Pipelines with a score of 13, followed by Johnson & Johnson (12) and Adidas (10) and LVMH (10). Nike’s leadership here is consistent with its established position as one of the most technically advanced Consumer Goods firms — it has long operated as a DTC data company selling physical products, and its data pipeline investments reflect the streaming architectures required for real-time personalization at scale. The Terraform and Pandas toolchain confirms infrastructure-as-code pipeline management, and the presence of ClickHouse signals adoption of high-throughput analytics databases suited to pipeline output ingestion. Firms at the bottom — Procter & Gamble (3) and Kellanova (3) — have the furthest to go before they can feed fine-tuned AI models with the production-quality data pipelines those models require.

Model Registry & Versioning — Top Company: Lego (19)

Lego leads Model Registry & Versioning at 19, tied with Johnson & Johnson (19) and LVMH (19). Lego’s co-leadership here is noteworthy — it signals that this toy and entertainment company has invested in MLOps governance infrastructure at a level that matches sector leader Johnson & Johnson, a reflection of Lego’s aggressive digital transformation program. Semantic Kernel and TensorFlow in the toolchain indicate that model serving frameworks have been adopted alongside version control infrastructure. Both Kraft Heinz (4) and Coca-Cola (4) at the bottom are at risk of model management debt: as their AI programs scale, the absence of systematic versioning and artifact management will create deployment instability and compliance exposure.

Multimodal Infrastructure — Top Company: Johnson & Johnson (19)

Johnson & Johnson leads Multimodal Infrastructure at 19, ahead of LVMH (17) and Lego (15). Consumer Goods is a naturally multimodal domain — product photography, packaging design, video advertising, nutritional label imagery, and social content all require AI systems capable of processing visual and textual inputs simultaneously. Adobe Creative Suite and Photoshop are universally deployed across 23 firms, establishing a baseline visual content production infrastructure that multimodal AI can extend. Johnson & Johnson’s healthcare-adjacent investments in medical imagery AI likely contribute to its multimodal lead, while LVMH’s luxury brand creative demands drive its investment in high-quality visual AI infrastructure.

Domain Specialization — Top Company: Reckitt Benckiser (2)

Domain Specialization tops out at just 2 across the entire Consumer Goods sector, with Reckitt Benckiser, Adidas, Kimberly-Clark, Unilever, Hasbro, Johnson & Johnson, and LVMH all sharing the maximum score. The uniformly low ceiling confirms a sector-wide failure to invest in proprietary, domain-adapted AI models tuned for consumer behavior prediction, brand voice synthesis, product formulation optimization, or category demand forecasting. Consumer Goods is one of the most data-rich sectors in the global economy — purchase transaction data, consumer panel data, brand equity metrics, and social listening signals are collected at massive scale — yet none of that proprietary data advantage has been converted into domain-specialized AI capability. The first firms to close this gap will gain persistent advantages in consumer intelligence that general-purpose LLMs cannot replicate.


Layer 4: Efficiency & Specialization

Efficiency & Specialization captures investment in automation, containerized workloads, platform engineering, and operational tooling that enable AI systems to run reliably and cost-effectively at scale.

Automation — Top Company: Johnson & Johnson (70)

Johnson & Johnson leads Automation with a score of 70, followed by LVMH (51) and Reckitt Benckiser (49) and 3M (48). The bottom of the distribution — Coca-Cola (27) and L’Oréal (26) — reveals meaningful divergence in operational technology sophistication. Terraform and PowerShell are universally deployed as automation primitives, but automation depth at this score level reflects investment in higher-order automation: workflow orchestration (Apache Airflow, ServiceNow), infrastructure lifecycle management, and CI/CD pipeline maturity. Johnson & Johnson’s automation lead directly benefits its AI program: automated testing, model deployment pipelines, and infrastructure provisioning are the unglamorous but essential infrastructure of reliable AI production.

Containers — Top Company: Johnson & Johnson (34)

Johnson & Johnson leads Containers at 34, ahead of LVMH (28) and Lego (26). Container adoption in Consumer Goods extends well beyond development convenience — it is a direct enabler of cost-efficient AI inference scaling, particularly for firms running multiple concurrent AI models across product categories, geographies, and retail channels. Mattel (8) and Kellanova (9) at the bottom of the distribution represent legacy systems contexts where containerization has not yet been prioritized, creating deployment flexibility limitations that will impede their AI scaling programs.

Platform — Top Company: Johnson & Johnson (41)

Johnson & Johnson leads Platform adoption at 41, ahead of Reckitt Benckiser (37) and Kimberly-Clark (37). The near-universal deployment of ServiceNow, Datadog, Salesforce, and New Relic across 23 firms reflects a sector that has standardized on enterprise platform tooling. Platform depth at Johnson & Johnson’s level enables internal developer portal capabilities, self-service AI experimentation environments, and shared model serving infrastructure — capabilities that compress the time between AI concept and production deployment for engineering teams across business units.

Operations — Top Company: Johnson & Johnson (77)

Johnson & Johnson leads Operations at 77, its highest single score across the Efficiency & Specialization layer, followed by LVMH (61). The sector-wide operations toolchain includes Datadog, New Relic, Prometheus, and ServiceNow at near-universal deployment, establishing a mature observability and incident management foundation. Operations depth at 77 signals that Johnson & Johnson has invested in advanced operational practices — chaos engineering, reliability SLOs, and operational runbook automation — that create stable production environments for AI system deployment. The concentration of operations investment at the top of the leaderboard, with Coca-Cola (22) and Kellanova (26) materially behind, suggests that lagging firms may face operational stability challenges as they scale their first production AI workloads.


Layer 5: Productivity

Productivity captures how Consumer Goods organizations leverage AI-adjacent tooling — including coding assistants, copilots, and SaaS platforms — to accelerate engineering and business output.

Software As A Service (SaaS) — Top Company: Henkel (2)

Henkel leads SaaS Productivity at a score of 2, tied with Johnson & Johnson — the lowest meaningful scores across any area in the entire dataset. The near-zero scores confirm that AI-native SaaS tools, such as coding assistants, AI-powered document analysis, and intelligent creative workflow platforms, have not yet been adopted at scale across Consumer Goods. The universal base SaaS estate (MailChimp, Salesforce, LinkedIn, Microsoft Office, Adobe Creative Suite) is well established, but these are conventional productivity tools rather than AI-augmented productivity platforms. Consumer Goods firms that integrate AI coding assistants into their engineering organizations and AI creative assistants into their marketing teams will realize compounding productivity gains well ahead of peers who delay these relatively low-cost investments.

Code — Top Company: Johnson & Johnson (41)

Johnson & Johnson leads Code Productivity at 41, followed by Hasbro (32) and LVMH (32). The gap between leaders and laggards in Code — Procter & Gamble at 18 and Kellanova at 19 — is particularly consequential for AI program execution: firms with low code practice maturity will struggle to build, test, and deploy AI-adjacent software at the cadence that competitive AI programs require. The universal GitHub, Bitbucket, and Terraform presence confirms version control and infrastructure automation are established, but the differential scores reflect whether engineering culture has embraced full CI/CD, automated quality gates, and developer experience investment.

Services — Top Company: Johnson & Johnson (278)

Johnson & Johnson posts a Services Productivity score of 278, the highest raw score in this layer, ahead of LVMH (262) and a long tail of firms stretching down to Coca-Cola and Kellanova at 160 and below. The Services score reflects the aggregate breadth of the enterprise service portfolio — MailChimp, ServiceNow, Datadog, Salesforce, LinkedIn, Microsoft 365, Adobe, Instagram, Facebook, Google Analytics, and Adobe Analytics deployed across virtually all 23 firms. This breadth creates an enormous integration surface for AI-powered productivity tooling: copilots that read CRM data, AI assistants that summarize ServiceNow tickets, or creative AI tools that generate social content informed by Adobe Analytics engagement signals are all technically feasible given the existing service estate.


Layer 6: Integration & Interoperability

Integration & Interoperability captures how Consumer Goods organizations connect AI systems to enterprise data sources, event streams, retailer networks, and open standards.

API — Top Company: Johnson & Johnson (25)

Johnson & Johnson leads API adoption at 25, ahead of Hasbro (22) and the mid-field cluster. Consumer Goods firms manage complex multi-party API ecosystems: retailer portals, distributor integrations, e-commerce platform APIs, loyalty program interfaces, and ingredient supplier data feeds all require formally managed API surfaces. Salesforce and ServiceNow in the services stack serve as de facto API middleware for many of these integrations. Hasbro’s strong API score (22) relative to its size reflects its investment in digital licensing and DTC commerce connectivity — an API-driven business model that requires stronger interface discipline than traditional wholesale-only distribution.

Integrations — Top Company: Johnson & Johnson (37)

Johnson & Johnson leads Integrations at 37, ahead of Kimberly-Clark (30) and the field. The breadth of the Consumer Goods integration estate spans CRM, marketing automation, analytics, social listening, and supply chain management — a multi-system fabric that requires robust integration tooling to maintain coherence. Kimberly-Clark’s second-place position reflects its investment in connecting manufacturing operations, retailer analytics portals, and consumer insights platforms into a unified data architecture. Firms at the bottom of the Integrations ranking will struggle to operationalize AI that needs to span functional boundaries, as fragmented integrations create data handoff failures that corrupt AI inputs.

Event-Driven — Top Company: Hasbro (22)

Hasbro leads Event-Driven adoption at 22, ahead of Johnson & Johnson (16) in a notable reversal of the typical sector ordering. Event-driven architecture in Consumer Goods enables real-time AI applications: product launch surge detection, social sentiment monitoring, supply chain disruption alerts, and direct-to-consumer behavior triggers all benefit from event-driven event processing. Hasbro’s lead suggests investment in real-time commerce and consumer event streams, possibly driven by its entertainment and licensing businesses where product demand can spike sharply on media release events. Consumer Goods firms that have not invested in event-driven foundations will find their AI systems operating on stale data — a fundamental limitation for applications where speed of insight translates directly to revenue.

Patterns — Top Company: LVMH (18)

LVMH leads Patterns at 18, narrowly ahead of Kimberly-Clark (17) and in this dimension edging past Johnson & Johnson (16). LVMH’s leadership in architectural patterns reflects the luxury group’s investment in resilient, globally distributed commerce infrastructure — a business that must maintain 99.9%+ uptime across multi-brand, multi-region e-commerce while sustaining brand-exclusive experiences that prohibit generic platform fallbacks. TypeScript and Angular in the toolchain reinforce LVMH’s investment in well-structured, typed frontend architectures. Pattern maturity at this level provides the reliability scaffolding that AI systems — which introduce new failure modes through model latency, hallucination, and context window limits — need to operate safely in production.

Specifications — Top Company: Hasbro (13)

Hasbro and Johnson & Johnson both lead Specifications at 13. The Consumer Goods sector’s higher Specifications scores compared to Construction reflect the multi-channel commerce architecture that consumer goods firms must maintain — OpenAPI specifications for retailer integrations, commerce platform APIs, and consumer loyalty systems are structural requirements for operating in modern retail. Nike (11), LVMH (10), and Kimberly-Clark (9) round out a respectable middle tier. At the bottom, Coca-Cola (3) and Mars (3) suggest that some of the sector’s largest legacy brands still rely on underdocumented integration estates that will constrain AI agent development.

Apache — Top Company: Hasbro (8)

Hasbro and Nike tie for the Apache ecosystem leadership at 8, confirming that open-source data infrastructure is distributed across the sector rather than concentrated at the largest companies. Apache Spark, Apache Airflow, and Apache Ant are the primary representations of the Apache ecosystem in Consumer Goods toolchains. Hasbro and Nike’s co-leadership in Apache adoption, combined with their strong positions in Data Pipelines, Event-Driven, and Specifications, paints a portrait of digitally native companies that have invested more deliberately in open-source data infrastructure than some of their larger but more legacy-constrained peers.

CNCF — Top Company: LVMH (34)

LVMH leads CNCF adoption at 34, closely trailed by Johnson & Johnson (33) and a competitive mid-field. CNCF tooling — Kubernetes, Prometheus, Envoy, Argo — provides the portable, cloud-native substrate on which AI inference services can be deployed, monitored, and scaled. LVMH’s leadership here is consistent with its aggressive digital transformation program across its 70+ luxury brands and reflects an architectural philosophy of infrastructure independence from any single cloud provider. Consumer Goods firms at the bottom of CNCF adoption will face higher vendor lock-in risk as AI model serving infrastructure consolidates around cloud-native Kubernetes patterns.


Layer 7: Statefulness

Statefulness captures how Consumer Goods organizations manage persistent state across AI systems, including observability, governance, security, and data lifecycle management.

Observability — Top Company: Johnson & Johnson (38)

Johnson & Johnson leads Observability at 38, ahead of Adidas (34) in a notable second-place performance for the sportswear brand. The sector’s universal deployment of Datadog and New Relic establishes a baseline observability floor — every company in the sector has instrumented its infrastructure with commercial observability platforms. Johnson & Johnson’s lead reflects investment in more granular, cross-system tracing that spans clinical, commercial, and operational workloads. Adidas’s strong second-place position is consistent with its digital-first positioning and its investment in real-time performance monitoring for e-commerce and direct-to-consumer channels.

Governance — Top Company: Johnson & Johnson (38)

Johnson & Johnson leads Governance at 38, ahead of Kimberly-Clark (30). Consumer Goods governance depth in this range covers data stewardship, access control, policy enforcement, and audit trail management — capabilities that Johnson & Johnson’s healthcare-adjacent operations have honed through years of pharmaceutical data governance requirements. Kimberly-Clark’s second-place position reflects its investment in data governance frameworks driven by consumer product safety compliance and retailer data sharing programs. Governance depth is a direct readiness indicator for responsible AI deployment: firms with mature governance infrastructure will extend it to AI-specific controls faster and with less organizational friction than those building governance capability from scratch.

Security — Top Company: Johnson & Johnson (74)

Johnson & Johnson leads Security at 74, followed by LVMH (61) — both posting the highest Security scores in this industry. Johnson & Johnson’s healthcare adjacency drives elevated security investment: consumer health data, pharmaceutical formulation data, and clinical trial information are subject to HIPAA and FDA security requirements that far exceed standard Consumer Goods expectations. LVMH’s 61 score reflects the luxury group’s persistent exposure to counterfeit supply chain threats and its investment in digital authentication infrastructure to protect brand integrity. For AI systems processing consumer data, transaction records, and proprietary formulation databases, Security scores at this level provide meaningful protection coverage — but both firms should explicitly extend their security frameworks to cover AI model supply chain risks.

Data — Top Company: Johnson & Johnson (131)

The Data scoring area reappears in the Statefulness layer with Johnson & Johnson at 131. In a statefulness context, data depth enables AI systems to maintain rich session context, longitudinal consumer engagement histories, and cross-channel behavioral profiles — all of which power the personalization capabilities that define Consumer Goods competitive differentiation at the consumer touchpoint. Nestlé (48) and Kraft Heinz (49) at the bottom represent the most significant statefulness risk: without deep data estates, AI systems at these firms will operate on thin context windows that constrain application sophistication.


Layer 8: Measurement & Accountability

Measurement & Accountability captures how Consumer Goods organizations quantify AI system performance, developer productivity, and business returns.

Testing & Quality — Top Company: Johnson & Johnson (16)

Johnson & Johnson leads Testing & Quality at 16, followed by Lego (12). Lego’s second-place position is consistent with its engineering-first digital transformation culture and its investment in software quality practices that underpin its digital product and licensing businesses. Testing depth at 16 is modest in absolute terms — it reflects testing infrastructure that covers critical paths but not comprehensive automated quality assurance across all AI-adjacent systems. Consumer Goods firms deploying AI in product safety contexts (ingredient verification, allergen detection, label compliance) face regulatory consequences for testing failures that make this area a non-negotiable investment priority.

Observability — Top Company: Johnson & Johnson (38)

As in the Statefulness layer, Datadog and New Relic universally deployed across 23 firms establish a consistent observability baseline. In the Measurement context, this infrastructure directly enables AI performance monitoring — tracking model accuracy, inference latency, and recommendation acceptance rates across the consumer goods portfolio. The gap between Johnson & Johnson’s leadership score and the field (Adidas at 34, mid-field at 20-25) indicates that depth of observability instrumentation — rather than presence of observability tooling — is the differentiating factor.

Developer Experience — Top Company: LVMH (23)

LVMH edges to the top of Developer Experience at 23, one point ahead of Johnson & Johnson (22). Developer Experience covers internal tooling quality, API documentation, onboarding programs, and developer portal investments. LVMH’s lead in this dimension reflects its investment in engineering enablement across its multi-brand technology organization — building shared platforms, internal SDKs, and self-service tooling that reduce friction for engineers working across its diverse brand portfolio. Consumer Goods firms with high developer experience scores attract and retain the AI engineering talent whose scarcity is the single most important constraint on the pace of AI program execution.

ROI & Business Metrics — Top Company: Johnson & Johnson (54)

Johnson & Johnson and LVMH tie for the ROI & Business Metrics leadership at 54. Consumer Goods is a sector where commercial performance metrics are intensely measured — market share, brand equity, promotional ROI, and category revenue are tracked at weekly cadence. The Salesforce, Adobe Analytics, Google Analytics, and ServiceNow platforms deployed universally across the sector provide the commercial metrics infrastructure needed to attribute AI interventions to business outcomes. Both Johnson & Johnson and LVMH operate commercial analytics programs sophisticated enough to close the loop between AI-generated recommendations and measured revenue impact — a capability most firms at the bottom of the distribution (Coca-Cola at 30, Kellanova at 31) have not yet built.


Layer 9: Governance & Risk

Governance & Risk captures how Consumer Goods organizations manage regulatory compliance, AI review processes, security posture, and data privacy in the context of AI deployment.

Regulatory Posture — Top Company: 3M (10)

3M and Johnson & Johnson both score 10 in Regulatory Posture, leading a sector where formal engagement with AI-specific regulatory frameworks is early-stage. 3M’s leadership here is consistent with its industrial and healthcare product portfolio, which is subject to EPA, FDA, and EU REACH chemical regulations — a compliance infrastructure that can be extended to AI regulatory frameworks faster than pure consumer brands. The EU AI Act’s provisions affecting consumer-facing AI systems (product recommendations, pricing algorithms, hiring tools) will require Consumer Goods firms to build formal AI regulatory compliance programs — a capability that currently scores in single digits across the entire sector.

AI Review & Approval — Top Company: Johnson & Johnson (16)

Johnson & Johnson leads AI Review & Approval at 16, ahead of 3M (13). The pharmaceutical and consumer health context drives Johnson & Johnson’s lead: internal model risk assessment frameworks developed for clinical AI applications translate directly to commercial AI review processes. 3M’s regulatory-heavy industrial portfolio similarly drives systematic review culture. The rest of the sector — with scores ranging from 5 to 12 — has not yet built formal AI approval workflows, which represents meaningful deployment risk as AI systems begin influencing advertising claims, product formulations, and consumer pricing.

Security — Top Company: Johnson & Johnson (74)

Johnson & Johnson leads Security at 74, followed by LVMH (61). As noted in the Statefulness layer, healthcare regulatory requirements drive elevated security investment at Johnson & Johnson. In the Governance context, this security depth translates to stronger controls over AI training data custody, model access governance, and output audit trails. Consumer Goods AI systems that process consumer health claims, children’s product formulations, or dietary supplement data will face heightened scrutiny from FTC, FDA, and equivalent EU bodies — firms that have invested in security infrastructure for regulated data are better positioned to demonstrate AI compliance.

Governance — Top Company: Johnson & Johnson (38)

Johnson & Johnson leads Governance at 38, followed by Kimberly-Clark (30). Governance depth in the sector broadly covers data stewardship and policy enforcement, but AI-specific governance — model cards, responsible AI principles, algorithmic impact assessments — remains nascent at even the leading firms. The sector’s universal SharePoint and Confluence deployments provide documentation infrastructure, but content governance and AI model governance are distinct disciplines. Procter & Gamble’s governance score (15) at the lower end is notable given the company’s scale and its history of sophisticated consumer data programs — suggesting governance investment has not kept pace with data collection capability.

Privacy & Data Rights — Top Company: Lego (5)

Lego leads Privacy & Data Rights at 5, tied with Colgate Palmolive — a striking finding given Lego’s core consumer base of children, where COPPA and EU children’s privacy regulations impose the strictest privacy obligations in the Consumer Goods sector. Lego’s leadership here reflects its deliberate investment in privacy engineering ahead of regulatory enforcement, including data minimization, parental consent workflows, and purpose-limitation controls. The low absolute ceiling (5) across the entire sector is a systemic risk: Consumer Goods firms are among the world’s largest collectors of consumer behavioral data, yet their privacy engineering infrastructure scores indicate that most have not built the technical controls that emerging privacy regulations will require.


Layer 10: Economics & Sustainability

Economics & Sustainability captures how Consumer Goods organizations manage AI cost structures, provider relationships, technology partnerships, talent strategy, and data center sustainability.

AI FinOps — Top Company: Reckitt Benckiser (7)

Reckitt Benckiser leads AI FinOps at 7, tied with Adidas — the highest scores in this area across the Consumer Goods sector. Both companies operate under demanding cost discipline cultures: Reckitt through its health and hygiene brand portfolio optimization, and Adidas through margin management in a highly competitive sportswear market. The low absolute ceiling (7) confirms that AI-specific financial operations — cost attribution per AI workload, chargeback for model inference, cost optimization for embedding generation — are not yet formally operational at any Consumer Goods firm. As AI workloads scale and cloud AI service costs grow, firms that have not established FinOps disciplines will face opaque cost structures that undermine AI program ROI.

Provider Strategy — Top Company: Johnson & Johnson (17)

Johnson & Johnson leads Provider Strategy at 17, followed by LVMH (15). Both firms operate with deliberately diversified provider portfolios — AWS, Microsoft Azure, Google Cloud, and OpenAI alongside specialized providers — that reflect sophisticated vendor risk management. Provider strategy at 17 indicates that Johnson & Johnson has moved beyond opportunistic multi-cloud to deliberate architectural guidance governing which provider hosts which workload category. The rest of the sector clusters between 5 and 12, indicating a sector where cloud strategy is largely dictated by historical licensing relationships rather than AI capability roadmap alignment.

Partnerships & Ecosystem — Top Company: LVMH (24)

LVMH edges to the top of Partnerships & Ecosystem at 24, ahead of Lego (20). LVMH’s leadership reflects its active partnership strategy with luxury technology platforms, digital authentication providers, and generative AI creative tools — partnerships that are essential for a company competing on brand exclusivity in an age when AI can democratize creative production. Lego’s second-place position reflects its co-creation ecosystem with the global Lego developer community and its partnerships with digital entertainment platforms. Consumer Goods partnerships at this score level are beginning to extend from traditional vendor relationships to co-development arrangements — a transition that will accelerate as AI capability becomes a competitive differentiator in brand building.

Talent & Organizational Design — Top Company: LVMH (17)

LVMH leads Talent & Organizational Design at 17, ahead of Hasbro (14). LVMH’s leadership reflects its investment in AI center of excellence structures across its brand portfolio and its deliberate talent acquisition strategy for AI engineers who can work at the intersection of luxury brand identity and generative AI capability. Hasbro’s second-place position reflects its investment in digital production talent as it has transitioned from a pure toy company to an entertainment and licensing company. Consumer Goods firms at the bottom of talent investment — Procter & Gamble (5), Nestlé (5), and Kellanova (3) — face organizational readiness gaps that could prevent them from executing AI programs even when technical infrastructure is available.

Data Centers — (No ranked signals)

Data Centers does not surface individual company rankings across Consumer Goods, confirming that the sector universally consumes AI compute through cloud provider relationships rather than building owned GPU infrastructure. This is appropriate given the sector’s scale and the current economics of AI compute provisioning — but firms should monitor carbon reporting requirements for Scope 3 AI compute emissions as ESG regulatory expectations evolve.


Layer 11: Storytelling & Entertainment & Theater

Storytelling & Entertainment & Theater captures how Consumer Goods organizations communicate AI vision, align stakeholder expectations, standardize knowledge practices, and experiment with novel approaches.

Alignment — Top Company: Johnson & Johnson (27)

Johnson & Johnson leads Alignment at 27, ahead of Adidas (25). Alignment in this layer measures how effectively an organization’s AI communications connect executive vision to engineering execution and consumer-facing outcomes. Adidas’s strong second-place Alignment score reflects its high-profile commitment to AI-powered product design, personalized consumer experiences, and supply chain sustainability — communications programs that have earned external credibility and internal employee alignment. Consumer Goods brands that frame AI transformation around consumer benefit and brand purpose narratives, rather than technology-first messaging, will secure broader internal and external buy-in for their AI programs.

Standardization — Top Company: Johnson & Johnson (12)

Johnson & Johnson leads Standardization at 12, followed by LVMH (11). Standardization covers the development of reusable AI frameworks, playbooks, model templates, and internal platforms that prevent fragmented, project-by-project AI approaches from proliferating across business units. Johnson & Johnson’s lead here reflects its investment in enterprise AI platforms that centralize model development, data access, and deployment workflows. For Consumer Goods firms with multiple brands, categories, and geographies, standardization multiplies the value of each AI investment by making it replicable across the portfolio.

Mergers & Acquisitions — Top Company: Johnson & Johnson (25)

Johnson & Johnson leads M&A Signals at 25, ahead of Reckitt Benckiser (22). Johnson & Johnson’s M&A score reflects both its historical pattern of healthcare technology acquisitions and its recent strategic investments in digital health and AI-powered diagnostics platforms. Reckitt’s strong second-place position reflects its portfolio optimization strategy — divesting non-core businesses while acquiring digital-native health and hygiene brands. Consumer Goods firms that build M&A capability to identify, assess, and integrate AI-enabled technology companies will outpace organic-only AI development programs.

Experimentation & Prototyping — (No ranked signals)

Experimentation & Prototyping does not yet surface individual company rankings across Consumer Goods, indicating that structured AI experimentation programs — model sandboxes, innovation labs with defined throughput metrics, venture-style pilots — are not yet visible in the sector’s investment signals. Given Consumer Goods firms’ access to massive consumer datasets, retail channel partnerships, and brand experimentation budgets, the absence of formal AI experimentation infrastructure represents one of the sector’s most accessible and highest-return investment opportunities.


Industry Strategic Assessment

Consumer Goods enters 2026 with a mature operational foundation — Johnson & Johnson’s Cloud score of 114, LVMH’s Data score of 117, and sector-wide Services Productivity scores in the 160-278 range confirm that enterprise infrastructure is well established across the leading firms. The sector has also achieved broad toolchain standardization: Terraform, Pandas, NumPy, TensorFlow, Datadog, Salesforce, and GitHub are deployed at near-universal coverage across 23 of 24 measured companies, creating a common technical substrate from which AI programs can be launched. The core strength of Consumer Goods is its data depth and brand portfolio breadth — assets that are uniquely valuable as AI programs demand both rich training signals and diverse application surfaces.

The most urgent strategic gaps are concentrated in the upper layers of the AI maturity stack. Domain Specialization scores of 2 across the entire sector confirm that no Consumer Goods firm has meaningfully invested in proprietary, brand- or category-trained AI models despite controlling some of the world’s richest consumer behavior datasets. AI FinOps scores of 7 at the ceiling indicate that cost management frameworks for scaled AI workloads do not yet exist. Privacy & Data Rights scores topping out at 5 represent a regulatory time bomb as consumer privacy enforcement accelerates globally. And Experimentation & Prototyping producing no ranked signals across 24 companies reveals a systemic deficit in structured AI innovation practice. Firms that address these gaps — Domain Specialization, FinOps, Privacy Engineering, and Experimentation Infrastructure — will compound their advantages in consumer intelligence, product development velocity, and brand AI differentiation faster than peers.

Johnson & Johnson and LVMH are the two companies whose investment posture most clearly positions them to lead the sector’s AI transition: Johnson & Johnson through its breadth of operational leadership (Cloud, AI, Data, Automation, Security, Governance, ROI Metrics), and LVMH through its distinctive strengths in CNCF adoption, Event-Driven architecture, Developer Experience, Alignment, and Partnerships — a profile that suggests a company optimizing for AI agility rather than raw scale. Naftiko’s design partnership model is built for Consumer Goods organizations at this exact juncture: firms that have built the operational foundation and now need the product strategy, AI design architecture, and implementation scaffolding to convert that foundation into proprietary consumer intelligence products.


This report was prepared by Naftiko using proprietary signal analysis across job posting, technology adoption, and public investment data. Scores reflect aggregate depth signals and are not financial forecasts.

Companies — Total:83

  • 3M
    A diversified global manufacturing and technology company producing thousands of products across safety, industrial, transportation,...
  • Adidas
    A German multinational corporation designing and manufacturing athletic shoes, apparel, and accessories. One of the...
  • Altria
    Fortune 1000 company Altria. Public API documentation has not yet been catalogued in the API...
  • Anheuser-Busch
    An American brewing company and subsidiary of AB InBev producing iconic beer brands including Budweiser,...
  • AptarGroup
    AptarGroup is a global supplier of consumer-product dispensing, sealing, and active packaging solutions serving the...
  • Archer Daniels Midland
    Archer Daniels Midland (ADM) is a Fortune 100 global leader in agricultural processing and food...
  • Brown-Forman
    Brown-Forman Corporation is one of the largest American-owned spirits and wine companies in the world,...
  • Bunge
    A global agribusiness and food company connecting farmers to consumers by sourcing, processing, and supplying...
  • Cal-Maine Foods
    Cal-Maine Foods, Inc. is the largest producer and distributor of fresh shell eggs in the...
  • Caleres
    Caleres is an American footwear company headquartered in Clayton, Missouri, established in 1878 (rebranded from...
  • Campbell Soup
    Campbell Soup Company (now rebranded as The Campbell's Company) is a manufacturer and marketer of...
  • Central Garden and Pet
    Central Garden and Pet is a major US corporation and Fortune 1000 company. The Central...
  • Chefs' Warehouse
    The Chefs' Warehouse is a premier distributor of specialty food products to high-end independent restaurants,...
  • Church and Dwight
    Church & Dwight Co., Inc. is a Fortune 500 American consumer packaged goods (CPG) company...
  • Clorox
    An American multinational consumer goods company manufacturing cleaning, household, and personal care products. Known for...
  • Coca-Cola
    The world's largest beverage company producing and distributing over 200 brands of drinks globally. Known...
  • Colgate Palmolive
    A global consumer products company specializing in oral care, personal care, and home care products....
  • Columbia Sportswear
    Columbia Sportswear is a global designer, marketer, and distributor of outdoor, active, and everyday lifestyle...
  • Conagra Brands
    Conagra Brands is a leading North American branded consumer packaged goods (CPG) food company headquartered...
  • ConAgra Foods
    ConAgra Foods, Inc. was the prior corporate name of Conagra Brands. In 2015 the company...
  • Constellation Brands
    Constellation Brands is a Fortune 500 producer and marketer of beer, wine, and spirits brands...
  • Coty
    Coty Inc. is one of the world's largest beauty companies with an iconic portfolio of...
  • Crocs
    Crocs, Inc. is a global designer, manufacturer, and retailer of casual footwear known for its...
  • Darling Ingredients
    Darling Ingredients is a global developer and producer of sustainable natural ingredients from edible and...
  • Deckers Outdoor
    Profile for Deckers Outdoor in the API Evangelist network. Fortune F1000 (rank 989).
  • Ecolab
    Ecolab is a Fortune 500 global leader in water, hygiene, and infection prevention solutions and...
  • Energizer Holdings
    Energizer Holdings is a major US corporation and Fortune 1000 company. The Energizer Holdings API...
  • Estee Lauder
    Estée Lauder Companies is a global manufacturer and marketer of skincare, makeup, fragrance, and hair...
  • Flowers Foods
    Flowers Foods is one of the largest producers and marketers of packaged bakery foods in...
  • General Mills
    A leading global food company manufacturing and marketing branded consumer foods including cereals, snacks, baking...
  • H.B. Fuller Company
    H.B. Fuller Company is a major US corporation and Fortune 1000 company. The H.B. Fuller...
  • Hanesbrands
    Hanesbrands is a global consumer apparel company designing, manufacturing, and selling everyday basic apparel under...
  • Hasbro
    A global toy, game, and entertainment company behind iconic brands including Monopoly, Transformers, My Little...
  • Heineken
    A Dutch multinational brewing company and one of the world's largest beer producers. Operates over...
  • Henkel
    A German multinational company operating in adhesives, beauty care, and laundry and home care markets....
  • Hershey
    Hersheyland is home to our favorite dessert recipes, the latest candy innovations and endless sweet...
  • Hormel Foods
    Hormel Foods Corporation is a global branded food company with over $12 billion in annual...
  • Ingredion
    Ingredion partners with food and beverage manufacturers to deliver innovative clean label, sugar reduction, plant-based...
  • International Flavors & Fragrances
    International Flavors & Fragrances (IFF) is a global creator of flavors, fragrances, and ingredients for...
  • Johnson & Johnson
    A global healthcare company operating in pharmaceuticals, medical devices, and consumer health products. One of...
  • Kellanova
    A global snacking, international cereal, and noodle company spun off from Kellogg Company. Produces popular...
  • Keurig Dr Pepper
    Keurig Dr Pepper is a leading North American beverage company formed by the 2018 merger...
  • Kimberly-Clark
    A global consumer goods company producing essential hygiene and personal care products. Maker of well-known...
  • Kirby
    For over a century, Kirby has set the standard in high-performance home cleaning. From powerful...
  • Kraft Heinz
    One of the largest food and beverage companies in the world co-headquartered in Chicago and...
  • Land O'Lakes
    Land O'Lakes is a member-owned agricultural cooperative providing food, agriculture, and animal nutrition products to...
  • Lego
    A Danish toy company and the world's largest manufacturer of interlocking plastic building bricks. Extends...
  • L'Oréal
    The world's largest cosmetics and beauty company producing skincare, makeup, haircare, and fragrance products. Operates...
  • Lululemon Athletica
    Lululemon Athletica is a designer, distributor, and retailer of technical athletic apparel, footwear, and accessories...
  • LVMH
    The world's largest luxury goods conglomerate headquartered in Paris, operating over 75 prestigious brands. Portfolio...
  • Mars
    One of the world's largest privately held companies producing confectionery, pet food, and food products....
  • Mattel
    A global toy and entertainment company behind iconic brands including Barbie, Hot Wheels, Fisher-Price, and...
  • McCormick
    McCormick spices and products have been kitchen must-haves since 1889. Learn about seasoning and cuisine...
  • Molson Coors Beverage
    Molson Coors Beverage Company is one of the world's largest brewers, with a portfolio of...
  • Mondelez International
    A global snacking company and one of the world's largest producers of chocolate, biscuits, and...
  • Monster Beverage
    Monster Beverage Corporation is a marketer and distributor of energy drinks and alternative beverages, offering...
  • Nestlé
    The world's largest food and beverage company by revenue, operating in nearly every country with...
  • Newell Brands
    Newell Brands is a Fortune 500 global consumer goods company with a strong portfolio of...
  • Nike
    The world's largest athletic footwear and apparel company designing products for sports, fitness, and lifestyle....
  • PepsiCo
    A global food and beverage company with a portfolio spanning snacks, drinks, and nutrition products....
  • Performance Food Group
    Performance Food Group is one of the largest foodservice distributors in North America, marketing and...
  • Philip Morris
    Philip Morris International is a leading international tobacco company offering smoke-free products and combustible tobacco...
  • Post Holdings
    Post Holdings is a consumer packaged goods holding company with businesses in center-of-the-store, refrigerated, foodservice,...
  • PPG Industries
    PPG Industries is a Fortune 500 global supplier of paints, coatings, and specialty materials serving...
  • Procter & Gamble
    One of the world's largest consumer goods companies producing household, health, and personal care products....
  • Reckitt Benckiser
    A British multinational consumer goods company focused on health, hygiene, and nutrition products. Produces well-known...
  • RPM International
    RPM International Inc. is a multinational specialty coatings and sealants company headquartered in Medina, Ohio,...
  • Scotts Miracle Gro
    The Scotts Miracle-Gro Company is the world's largest marketer of branded consumer lawn and garden...
  • Seaboard
    Seaboard Corporation is a diverse global agribusiness and transportation company involved in pork, commodity merchandising,...
  • Sealed Air
    Sealed Air is a global packaging company that creates innovative packaging solutions and automation systems...
  • Sherwin-Williams
    The Sherwin-Williams Company is a global leader in the paint and coatings industry, offering products...
  • Silgan Holdings
    Silgan Holdings Inc. is a leading global sustainable packaging provider for consumer goods products. The...
  • Skechers U.S.A.
    Skechers U.S.A. is an American lifestyle and performance footwear company (Fortune 500) that designs, develops,...
  • Spectrum Brands
    Fortune 1000 company Spectrum Brands. Public API documentation has not yet been catalogued in the...
  • Tempur Sealy International
    Tempur Sealy International is one of the world's largest bedding providers, developing, manufacturing, marketing, and...
  • Topgolf Callaway Brands
    Topgolf Callaway Brands is a global golf and entertainment company that designs, manufactures, and sells...
  • TreeHouse Foods
    TreeHouse Foods is one of the largest manufacturers of private label packaged foods and beverages...
  • Tyson Foods
    Tyson Foods is one of the world's largest food companies and a Fortune 100 company,...
  • Under Armour
    An American sportswear company manufacturing performance athletic apparel, footwear, and accessories. Founded on moisture-wicking fabric...
  • Unilever
    A British-Dutch multinational consumer goods company with a portfolio spanning food, personal care, and household...
  • United Natural Foods (UNFI)
    United Natural Foods, Inc. (UNFI) is the largest publicly traded wholesale distributor of health and...
  • VF Corporation
    VF Corporation is a global apparel and footwear company headquartered in Denver, Colorado. VF owns...
  • Vista Outdoor
    Profile for Vista Outdoor in the API Evangelist network. Fortune F1000 (rank 976).

Capabilities are Naftiko definitions for how industry-common services, tools, and standards can be combined to deliver business value using AI. Each capability defines the integrations, workflows, and orchestrations available across this vertical — run them with the Naftiko Framework or browse the shipped set in the Naftiko Fleet.

Sort
Expand
1787 capabilities

When Workday detects a role change, syncs the updated job profile to Microsoft Identity Manager, updates ServiceNow group memberships, and notifies the employee in Microsoft Teams.

naftiko: '0.5'
info:
  label: Identity and Access Provisioning
  description: When Workday detects a role change, syncs the updated job profile to Microsoft Identity Manager, updates ServiceNow group memberships, and notifies the employee in Microsoft Teams.
  tags:
  - iam
  - identity
  - workday
  - microsoft-identity-manager
  - servicenow
  - microsoft-teams
  - security
capability:
  exposes:
  - type: mcp
    namespace: iam-provisioning
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID and new role, update Microsoft Identity Manager, adjust ServiceNow group access, and notify the employee in Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: new_role
        in: body
        type: string
        description: The new job role or title as defined in Workday.
      - name: effective_date
        in: body
        type: string
        description: Effective date of the role change in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-mim
        type: call
        call: mim.update-person
        with:
          upn: '{{get-employee.work_email}}'
          job_title: '{{new_role}}'
          department: '{{get-employee.department}}'
          effective_date: '{{effective_date}}'
      - name: update-snow-group
        type: call
        call: servicenow.update-group-membership
        with:
          user_email: '{{get-employee.work_email}}'
          role: '{{new_role}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Your system access has been updated for your new role: {{new_role}} (effective {{effective_date}}). Contact IT if you need additional access.'
  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: mim
    baseUri: https://3m-mim.internal/identitymanagement/api/v1
    authentication:
      type: bearer
      token: $secrets.mim_token
    resources:
    - name: persons
      path: /persons/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: update-person
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: group-members
      path: /table/sys_user_grmember
      operations:
      - name: update-group-membership
        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
Open in Framework → View in Fleet → identity-and-access-provisioning.yml

Reconciles inventory cycle count discrepancies by comparing SAP book quantities against physical counts, logging adjustments, and alerting the warehouse manager in Teams.

naftiko: '0.5'
info:
  label: Inventory Cycle Count Reconciliation
  description: Reconciles inventory cycle count discrepancies by comparing SAP book quantities against physical counts, logging adjustments, and alerting the warehouse manager in Teams.
  tags:
  - inventory
  - warehouse
  - sap
  - sap-s4hana
  - microsoft-teams
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: inventory-management
    port: 8080
    tools:
    - name: reconcile-cycle-count
      description: Given a plant, storage location, and count results, compare against SAP, post adjustments, and notify warehouse manager.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: storage_location
        in: body
        type: string
        description: SAP storage location.
      - name: material_number
        in: body
        type: string
        description: Material number counted.
      - name: physical_count
        in: body
        type: string
        description: Physical count quantity.
      steps:
      - name: get-book-quantity
        type: call
        call: sap.get-stock
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          storage_location: '{{storage_location}}'
      - name: post-adjustment
        type: call
        call: sap.post-inventory-adjustment
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          storage_location: '{{storage_location}}'
          book_qty: '{{get-book-quantity.available_qty}}'
          physical_qty: '{{physical_count}}'
      - name: notify-warehouse
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.warehouse_team_id
          channel_id: $secrets.warehouse_channel_id
          text: 'Cycle Count: {{material_number}} at {{plant_code}}/{{storage_location}} | Book: {{get-book-quantity.available_qty}} | Physical: {{physical_count}} | Adjustment: {{post-adjustment.document_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MaterialStock(Material='{{material}}',Plant='{{plant}}',StorageLocation='{{storage_location}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      - name: storage_location
        in: path
      operations:
      - name: get-stock
        method: GET
    - name: adjustments
      path: /InventoryAdjustment
      operations:
      - name: post-inventory-adjustment
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → inventory-cycle-count-reconciliation.yml

Generates a vendor performance scorecard by pulling delivery and quality metrics from SAP, computing scores in Snowflake, and publishing results to a Power BI dashboard and the procurement Teams channel.

naftiko: '0.5'
info:
  label: Vendor Scorecard Generation
  description: Generates a vendor performance scorecard by pulling delivery and quality metrics from SAP, computing scores in Snowflake, and publishing results to a Power BI dashboard and the procurement Teams channel.
  tags:
  - procurement
  - vendor-management
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-performance
    port: 8080
    tools:
    - name: generate-vendor-scorecard
      description: Given a vendor number and period, pull SAP metrics, compute scores, refresh Power BI, and notify procurement.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      - name: period
        in: body
        type: string
        description: Evaluation period (e.g., 2026-Q1).
      steps:
      - name: get-vendor-metrics
        type: call
        call: sap.get-vendor-evaluation
        with:
          vendor: '{{vendor_number}}'
          period: '{{period}}'
      - name: compute-scorecard
        type: call
        call: snowflake.run-query
        with:
          statement: CALL PROCUREMENT.COMPUTE_VENDOR_SCORECARD('{{vendor_number}}', '{{period}}')
          warehouse: PROCUREMENT_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: $secrets.procurement_pbi_group
          dataset_id: $secrets.vendor_scorecard_dataset
      - name: notify-procurement
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.procurement_team_id
          channel_id: $secrets.procurement_channel_id
          text: Vendor scorecard for {{vendor_number}} ({{period}}) published. Dashboard refreshed.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_VENDOR_EVAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendor-evaluations
      path: /VendorEvaluation(Vendor='{{vendor}}',Period='{{period}}')
      inputParameters:
      - name: vendor
        in: path
      - name: period
        in: path
      operations:
      - name: get-vendor-evaluation
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → vendor-scorecard-generation.yml

Queries SAP S/4HANA for current raw material inventory levels by plant and storage location, returning available stock, reserved quantities, and reorder point status.

naftiko: '0.5'
info:
  label: Raw Material Inventory Lookup
  description: Queries SAP S/4HANA for current raw material inventory levels by plant and storage location, returning available stock, reserved quantities, and reorder point status.
  tags:
  - inventory
  - manufacturing
  - sap
  - sap-s4hana
  - supply-chain
  - materials
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-raw-material-stock
      description: Look up raw material inventory in SAP S/4HANA by material number and plant. Returns available stock, reserved quantity, and reorder point.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the raw material.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      call: sap.get-material-stock
      with:
        material_number: '{{material_number}}'
        plant: '{{plant_code}}'
      outputParameters:
      - name: available_qty
        type: string
        mapping: $.d.AvailableQuantity
      - name: reserved_qty
        type: string
        mapping: $.d.ReservedQuantity
      - name: reorder_point
        type: string
        mapping: $.d.ReorderPoint
      - name: unit_of_measure
        type: string
        mapping: $.d.BaseUnitOfMeasure
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MaterialStock(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → raw-material-inventory-lookup.yml

When a manufacturing line goes down, creates a SAP Plant Maintenance work order, opens a ServiceNow incident, and alerts the plant operations team in Microsoft Teams with downtime details.

naftiko: '0.5'
info:
  label: Manufacturing Line Downtime Alert
  description: When a manufacturing line goes down, creates a SAP Plant Maintenance work order, opens a ServiceNow incident, and alerts the plant operations team in Microsoft Teams with downtime details.
  tags:
  - manufacturing
  - downtime
  - sap
  - servicenow
  - microsoft-teams
  - maintenance
capability:
  exposes:
  - type: mcp
    namespace: plant-operations
    port: 8080
    tools:
    - name: report-line-downtime
      description: Given a production line ID and downtime reason, create a SAP PM work order, open a ServiceNow incident, and notify the plant operations team in Teams.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The manufacturing line identifier.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: downtime_reason
        in: body
        type: string
        description: Reason for the production line downtime.
      - name: estimated_duration_hours
        in: body
        type: string
        description: Estimated downtime duration in hours.
      steps:
      - name: create-pm-order
        type: call
        call: sap.create-maintenance-order
        with:
          plant: '{{plant_code}}'
          equipment: '{{line_id}}'
          order_type: PM02
          short_text: 'Line Down: {{line_id}} — {{downtime_reason}}'
          priority: '1'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Production Line Down: {{line_id}} at {{plant_code}}'
          description: '{{downtime_reason}} | Est. Duration: {{estimated_duration_hours}}h | SAP Order: {{create-pm-order.order_number}}'
          urgency: '1'
          category: manufacturing
      - name: notify-operations
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.plant_ops_team_id
          channel_id: $secrets.plant_ops_channel_id
          text: 'ALERT: Line {{line_id}} DOWN at {{plant_code}} | Reason: {{downtime_reason}} | Est: {{estimated_duration_hours}}h | SAP: {{create-pm-order.order_number}} | SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder
      operations:
      - name: create-maintenance-order
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → manufacturing-line-downtime-alert.yml

Detects material cost variances in SAP cost accounting, logs an investigation task in Jira, and alerts the plant controller and finance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Material Cost Variance Alert
  description: Detects material cost variances in SAP cost accounting, logs an investigation task in Jira, and alerts the plant controller and finance team in Microsoft Teams.
  tags:
  - finance
  - cost-accounting
  - sap
  - jira
  - microsoft-teams
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: cost-management
    port: 8080
    tools:
    - name: alert-cost-variance
      description: Given a material, plant, and variance details, retrieve SAP cost data, create Jira investigation, and alert finance.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: variance_amount
        in: body
        type: string
        description: Cost variance amount in USD.
      - name: variance_type
        in: body
        type: string
        description: Type of variance (e.g., purchase_price, production_quantity, usage).
      steps:
      - name: get-cost-data
        type: call
        call: sap.get-material-cost
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          issuetype: Task
          summary: 'Cost Variance: {{material_number}} at {{plant_code}} (${{variance_amount}})'
          description: 'Variance type: {{variance_type}} | Amount: ${{variance_amount}} | Standard cost: {{get-cost-data.standard_cost}} | Actual cost: {{get-cost-data.actual_cost}}'
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.cost_alerts_channel_id
          text: 'Cost Variance Alert: {{material_number}} at {{plant_code}} | Type: {{variance_type}} | Amount: ${{variance_amount}} | Jira: {{create-investigation.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/CO_MATERIAL_COST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-costs
      path: /MaterialCostEstimate(Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-cost
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → material-cost-variance-alert.yml

Receives an invoice from SAP Ariba, validates vendor data against SAP S/4HANA master records, posts the accounting document, and notifies the AP team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Invoice Processing and AP Automation
  description: Receives an invoice from SAP Ariba, validates vendor data against SAP S/4HANA master records, posts the accounting document, and notifies the AP team in Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap-ariba
  - sap
  - invoice-processing
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: accounts-payable
    port: 8080
    tools:
    - name: process-invoice
      description: Given an Ariba invoice ID, validate the vendor in SAP, post the AP document, and notify the AP team in Teams.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice identifier.
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor master ID.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: validate-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: post-ap-document
        type: call
        call: sap.post-invoice
        with:
          vendor_id: '{{vendor_id}}'
          amount: '{{get-invoice.total_amount}}'
          currency: '{{get-invoice.currency}}'
          invoice_date: '{{get-invoice.invoice_date}}'
          reference: '{{invoice_id}}'
      - name: notify-ap-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: ap-team@3m.com
          text: 'Invoice Posted: {{invoice_id}} | Vendor: {{validate-vendor.name}} | Amount: {{get-invoice.total_amount}} {{get-invoice.currency}} | SAP Doc: {{post-ap-document.document_number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/API_VENDOR_0001
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
    - name: invoice-documents
      path: /A_SupplierInvoice
      operations:
      - name: post-invoice
        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
Open in Framework → View in Fleet → invoice-processing-and-ap-automation.yml

Retrieves the current status, quantities, and scheduling details of a SAP production order for manufacturing floor visibility.

naftiko: '0.5'
info:
  label: Production Order Status Lookup
  description: Retrieves the current status, quantities, and scheduling details of a SAP production order for manufacturing floor visibility.
  tags:
  - manufacturing
  - production
  - sap
  - sap-s4hana
  - erp
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: production
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP production order by number. Returns status, planned and actual quantities, start and finish dates.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-prod-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: planned_qty
        type: string
        mapping: $.d.TotalPlannedQty
      - name: actual_qty
        type: string
        mapping: $.d.ActualQuantityDelivered
      - name: start_date
        type: string
        mapping: $.d.BasicStartDate
      - name: finish_date
        type: string
        mapping: $.d.BasicEndDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-prod-order
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → production-order-status-lookup.yml

When a qualifying LinkedIn signal occurs, enriches the Salesforce contact record with current profile data, syncs to HubSpot, and alerts the owning sales rep in Microsoft Teams.

naftiko: '0.5'
info:
  label: Sales Lead Enrichment
  description: When a qualifying LinkedIn signal occurs, enriches the Salesforce contact record with current profile data, syncs to HubSpot, and alerts the owning sales rep in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - hubspot
  - linkedin
  - microsoft-teams
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: sales-intelligence
    port: 8080
    tools:
    - name: enrich-lead-from-linkedin
      description: Given a LinkedIn member URN and Salesforce contact ID, enrich the Salesforce record, sync to HubSpot, and notify the owning rep in Microsoft Teams.
      inputParameters:
      - name: linkedin_member_urn
        in: body
        type: string
        description: The LinkedIn member URN for the contact.
      - name: salesforce_contact_id
        in: body
        type: string
        description: The Salesforce contact record ID to enrich.
      - name: signal_type
        in: body
        type: string
        description: The LinkedIn signal type (e.g., job_change, content_share, profile_view).
      - name: rep_upn
        in: body
        type: string
        description: The Microsoft UPN of the owning sales rep.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
          title: '{{get-linkedin-profile.headline}}'
          company: '{{get-linkedin-profile.current_company}}'
          linkedin_url: '{{get-linkedin-profile.profile_url}}'
      - name: sync-hubspot
        type: call
        call: hubspot.update-contact
        with:
          email: '{{update-salesforce.email}}'
          jobtitle: '{{get-linkedin-profile.headline}}'
          company: '{{get-linkedin-profile.current_company}}'
          hs_lead_status: OPEN_DEAL
      - name: alert-rep
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rep_upn}}'
          text: 'Warm Lead Signal: {{get-linkedin-profile.first_name}} {{get-linkedin-profile.last_name}} | Signal: {{signal_type}} | Title: {{get-linkedin-profile.headline}} | Company: {{get-linkedin-profile.current_company}} | Salesforce updated.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: profiles
      path: /people/{{member_urn}}
      inputParameters:
      - name: member_urn
        in: path
      operations:
      - name: get-profile
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: 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
Open in Framework → View in Fleet → sales-lead-enrichment.yml

Posts a goods receipt in SAP against a purchase order, triggers a three-way match check, and notifies accounts payable in Microsoft Teams if discrepancies are found.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Processing
  description: Posts a goods receipt in SAP against a purchase order, triggers a three-way match check, and notifies accounts payable in Microsoft Teams if discrepancies are found.
  tags:
  - supply-chain
  - procurement
  - sap
  - sap-s4hana
  - microsoft-teams
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: goods-receipt
    port: 8080
    tools:
    - name: process-goods-receipt
      description: Given a PO number, material, and received quantity, post goods receipt in SAP and notify AP of any discrepancies.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: material_number
        in: body
        type: string
        description: The material number received.
      - name: received_quantity
        in: body
        type: string
        description: Quantity actually received.
      - name: storage_location
        in: body
        type: string
        description: Storage location for the received goods.
      steps:
      - name: post-goods-receipt
        type: call
        call: sap.post-gr
        with:
          po_number: '{{po_number}}'
          material: '{{material_number}}'
          quantity: '{{received_quantity}}'
          storage_location: '{{storage_location}}'
      - name: check-three-way-match
        type: call
        call: sap.check-invoice-match
        with:
          po_number: '{{po_number}}'
          gr_document: '{{post-goods-receipt.document_number}}'
      - name: notify-ap
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ap_team_id
          channel_id: $secrets.ap_channel_id
          text: 'Goods Receipt posted: PO {{po_number}} | Material: {{material_number}} | Qty: {{received_quantity}} | GR Doc: {{post-goods-receipt.document_number}} | Match Status: {{check-three-way-match.match_status}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_GOODS_RECEIPT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: goods-receipts
      path: /GoodsReceipt
      operations:
      - name: post-gr
        method: POST
    - name: invoice-match
      path: /ThreeWayMatch(PO='{{po_number}}',GR='{{gr_document}}')
      inputParameters:
      - name: po_number
        in: path
      - name: gr_document
        in: path
      operations:
      - name: check-invoice-match
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-processing.yml

Triggers SAP S/4HANA period-close tasks, pulls consolidated financials into Oracle Hyperion for intercompany elimination, and refreshes the Power BI executive financial dashboard.

naftiko: '0.5'
info:
  label: Financial Consolidation and Close
  description: Triggers SAP S/4HANA period-close tasks, pulls consolidated financials into Oracle Hyperion for intercompany elimination, and refreshes the Power BI executive financial dashboard.
  tags:
  - finance
  - financial-close
  - sap
  - oracle-hyperion
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-period-close
      description: Trigger SAP period-close postings for a company code and fiscal period, sync results to Oracle Hyperion, and refresh the Power BI financial dashboard.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code (e.g., 1000 for 3M US).
      - name: fiscal_year
        in: body
        type: string
        description: Four-digit fiscal year (e.g., 2025).
      - name: fiscal_period
        in: body
        type: string
        description: Two-digit fiscal period (e.g., 03 for March).
      steps:
      - name: trigger-close
        type: call
        call: sap.run-period-close
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          fiscal_period: '{{fiscal_period}}'
      - name: sync-hyperion
        type: call
        call: oracle-hyperion.load-data
        with:
          application: 3M_CONSOL
          period: '{{fiscal_year}}.{{fiscal_period}}'
          scenario: Actuals
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_name: executive-financial-{{fiscal_year}}-{{fiscal_period}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FAC_CLOSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-close
      path: /PeriodClose
      operations:
      - name: run-period-close
        method: POST
  - type: http
    namespace: oracle-hyperion
    baseUri: https://3m-hyperion.oracle.com/HyperionPlanning/rest/v3
    authentication:
      type: basic
      username: $secrets.hyperion_user
      password: $secrets.hyperion_password
    resources:
    - name: data-loads
      path: /applications/{{application}}/dataLoads
      inputParameters:
      - name: application
        in: path
      operations:
      - name: load-data
        method: POST
  - 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_name}}/refreshes
      inputParameters:
      - name: dataset_name
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → financial-consolidation-and-close.yml

Reconciles travel expenses by pulling reports from SAP Concur, matching against SAP FI postings, and creating a ServiceNow ticket for any discrepancies found.

naftiko: '0.5'
info:
  label: Travel Expense Reconciliation
  description: Reconciles travel expenses by pulling reports from SAP Concur, matching against SAP FI postings, and creating a ServiceNow ticket for any discrepancies found.
  tags:
  - finance
  - travel
  - sap-concur
  - sap
  - servicenow
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: travel-finance
    port: 8080
    tools:
    - name: reconcile-travel-expenses
      description: Given an employee ID and period, pull Concur reports, match against SAP postings, and flag discrepancies.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee ID in Concur.
      - name: period
        in: body
        type: string
        description: The reconciliation period (e.g., 2026-03).
      steps:
      - name: get-concur-reports
        type: call
        call: concur.get-expense-reports
        with:
          employee_id: '{{employee_id}}'
          period: '{{period}}'
      - name: get-sap-postings
        type: call
        call: sap.get-travel-postings
        with:
          employee_id: '{{employee_id}}'
          period: '{{period}}'
      - name: create-discrepancy-ticket
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Travel expense discrepancy: {{employee_id}} ({{period}})'
          description: 'Concur total: {{get-concur-reports.total_amount}} | SAP total: {{get-sap-postings.total_amount}} | Reports: {{get-concur-reports.report_count}}'
          category: finance
  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
      inputParameters:
      - name: employee_id
        in: query
      - name: period
        in: query
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FI_TRAVEL_EXPENSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: travel-postings
      path: /TravelExpensePosting
      inputParameters:
      - name: employee_id
        in: query
      - name: period
        in: query
      operations:
      - name: get-travel-postings
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → travel-expense-reconciliation.yml

When a new API is published to Kong Gateway, registers it in Confluence as documentation, creates a Datadog API monitor, and notifies the API governance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: API Lifecycle Management
  description: When a new API is published to Kong Gateway, registers it in Confluence as documentation, creates a Datadog API monitor, and notifies the API governance team in Microsoft Teams.
  tags:
  - api-management
  - kong
  - confluence
  - datadog
  - microsoft-teams
  - governance
capability:
  exposes:
  - type: mcp
    namespace: api-governance
    port: 8080
    tools:
    - name: register-new-api
      description: Given a Kong service name and API metadata, create a Confluence doc page, add a Datadog availability monitor, and notify the API governance team in Teams.
      inputParameters:
      - name: kong_service_name
        in: body
        type: string
        description: The Kong Gateway service name.
      - name: api_title
        in: body
        type: string
        description: Human-readable API title.
      - name: api_owner_team
        in: body
        type: string
        description: Team email owning this API.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key to publish docs to.
      steps:
      - name: create-doc-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'API: {{api_title}}'
          body: 'Kong service: {{kong_service_name}} | Owner: {{api_owner_team}}'
      - name: create-monitor
        type: call
        call: datadog.create-monitor
        with:
          name: 'API Availability: {{api_title}}'
          type: api
          message: API {{api_title}} ({{kong_service_name}}) is unavailable. Notify {{api_owner_team}}
      - name: notify-governance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: api-governance@3m.com
          text: 'New API Registered: {{api_title}} | Kong: {{kong_service_name}} | Owner: {{api_owner_team}} | Docs: {{create-doc-page.url}} | Monitor: {{create-monitor.id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://3m.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → api-lifecycle-management.yml

Verifies nightly Commvault and Veritas NetBackup job results, logs failures to Datadog, and opens a ServiceNow incident for any backup that did not complete successfully.

naftiko: '0.5'
info:
  label: Backup and Recovery Verification
  description: Verifies nightly Commvault and Veritas NetBackup job results, logs failures to Datadog, and opens a ServiceNow incident for any backup that did not complete successfully.
  tags:
  - backup
  - recovery
  - commvault
  - servicenow
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: backup-ops
    port: 8080
    tools:
    - name: verify-backup-job
      description: Given a Commvault job ID, check its completion status, log to Datadog, and open a ServiceNow incident if the backup failed.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The Commvault backup job ID.
      - name: backup_set_name
        in: body
        type: string
        description: Name of the backup set or client.
      - name: environment
        in: body
        type: string
        description: Environment the backup covers (prod, dr, staging).
      steps:
      - name: get-job-status
        type: call
        call: commvault.get-job
        with:
          job_id: '{{job_id}}'
      - name: log-result
        type: call
        call: datadog.create-event
        with:
          title: 'Backup Job {{job_id}}: {{get-job-status.status}}'
          text: 'BackupSet: {{backup_set_name}} | Env: {{environment}} | Size: {{get-job-status.size_gb}}GB | Duration: {{get-job-status.duration_minutes}}min'
          alert_type: info
          tags: backup:{{backup_set_name}},env:{{environment}}
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Backup failure: {{backup_set_name}} ({{environment}})'
          description: 'Commvault job {{job_id}} failed for {{backup_set_name}} in {{environment}}. Status: {{get-job-status.status}}. Datadog: {{log-result.url}}'
          category: backup_failure
          urgency: '2'
  consumes:
  - type: http
    namespace: commvault
    baseUri: https://3m-commvault.internal/commandcenter/api
    authentication:
      type: bearer
      token: $secrets.commvault_token
    resources:
    - name: jobs
      path: /Job/{{job_id}}
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.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
Open in Framework → View in Fleet → backup-and-recovery-verification.yml

Provisions IT equipment for a new hire by creating a ServiceNow request, linking the Workday employee record, and notifying the hiring manager and IT support in Teams.

naftiko: '0.5'
info:
  label: New Hire Equipment Provisioning
  description: Provisions IT equipment for a new hire by creating a ServiceNow request, linking the Workday employee record, and notifying the hiring manager and IT support in Teams.
  tags:
  - hr
  - it-service
  - servicenow
  - workday
  - microsoft-teams
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: hr-it-provisioning
    port: 8080
    tools:
    - name: provision-new-hire-equipment
      description: Given an employee ID, role, and start date, create equipment request in ServiceNow, verify Workday record, and notify stakeholders.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: role
        in: body
        type: string
        description: The new hire's role/job title.
      - name: start_date
        in: body
        type: string
        description: Employee start date.
      - name: manager_upn
        in: body
        type: string
        description: UPN of the hiring manager.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: create-equipment-request
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Equipment provisioning: {{get-employee.full_name}} ({{role}})'
          description: 'New hire starting {{start_date}}. Role: {{role}}. Manager: {{manager_upn}}'
          category: hardware
          requested_for: '{{employee_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'Equipment request created for {{get-employee.full_name}} ({{role}}), starting {{start_date}}. ServiceNow: {{create-equipment-request.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/3m
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_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: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → new-hire-equipment-provisioning.yml

Triggers a demand forecast model run in Snowflake, pushes forecast data back to SAP APO, and publishes updated forecast charts to the supply planning Teams channel.

naftiko: '0.5'
info:
  label: Demand Forecast Refresh
  description: Triggers a demand forecast model run in Snowflake, pushes forecast data back to SAP APO, and publishes updated forecast charts to the supply planning Teams channel.
  tags:
  - supply-chain
  - forecasting
  - snowflake
  - sap
  - microsoft-teams
  - planning
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: refresh-demand-forecast
      description: Given a product family and horizon, run forecast model, update SAP APO, and notify supply planning.
      inputParameters:
      - name: product_family
        in: body
        type: string
        description: The product family code for forecasting.
      - name: forecast_horizon_months
        in: body
        type: string
        description: Number of months to forecast ahead.
      steps:
      - name: run-forecast-model
        type: call
        call: snowflake.run-query
        with:
          statement: CALL SUPPLY_CHAIN.RUN_DEMAND_FORECAST('{{product_family}}', {{forecast_horizon_months}})
          warehouse: PLANNING_WH
      - name: push-to-sap
        type: call
        call: sap.update-forecast
        with:
          product_family: '{{product_family}}'
          forecast_data: '{{run-forecast-model.result}}'
      - name: notify-planning
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.supply_planning_team_id
          channel_id: $secrets.planning_channel_id
          text: Demand forecast refreshed for {{product_family}} ({{forecast_horizon_months}}M horizon). SAP APO updated.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/APO_FORECAST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: forecasts
      path: /ForecastData
      operations:
      - name: update-forecast
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → demand-forecast-refresh.yml

Reviews a customer credit limit by pulling AR aging from SAP, checking Salesforce account health, and routing the approval decision to the credit manager in Teams.

naftiko: '0.5'
info:
  label: Customer Credit Limit Review
  description: Reviews a customer credit limit by pulling AR aging from SAP, checking Salesforce account health, and routing the approval decision to the credit manager in Teams.
  tags:
  - finance
  - credit-management
  - sap
  - salesforce
  - microsoft-teams
  - accounts-receivable
capability:
  exposes:
  - type: mcp
    namespace: credit-management
    port: 8080
    tools:
    - name: review-credit-limit
      description: Given a customer number and requested limit, pull AR data, check CRM health, and route for approval.
      inputParameters:
      - name: customer_number
        in: body
        type: string
        description: The SAP customer account number.
      - name: requested_limit
        in: body
        type: string
        description: Requested credit limit in USD.
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID.
      - name: credit_manager_upn
        in: body
        type: string
        description: UPN of the credit manager.
      steps:
      - name: get-ar-aging
        type: call
        call: sap.get-ar-aging
        with:
          customer: '{{customer_number}}'
      - name: get-account-health
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{salesforce_account_id}}'
      - name: route-approval
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{credit_manager_upn}}'
          text: 'Credit Limit Review: Customer {{customer_number}} | Requested: ${{requested_limit}} | Current AR: ${{get-ar-aging.total_outstanding}} | Overdue: ${{get-ar-aging.overdue_amount}} | CRM Revenue: ${{get-account-health.annual_revenue}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FI_AR_AGING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: ar-aging
      path: /CustomerAging(Customer='{{customer}}')
      inputParameters:
      - name: customer
        in: path
      operations:
      - name: get-ar-aging
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → customer-credit-limit-review.yml

Queries Datadog for the current health status of a monitored service, returning monitor state, last triggered time, and alert details.

naftiko: '0.5'
info:
  label: Datadog Service Health Check
  description: Queries Datadog for the current health status of a monitored service, returning monitor state, last triggered time, and alert details.
  tags:
  - monitoring
  - datadog
  - observability
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-monitor-status
      description: Check the status of a Datadog monitor by monitor ID. Returns overall state, last triggered timestamp, and message.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: overall_state
        type: string
        mapping: $.overall_state
      - name: name
        type: string
        mapping: $.name
      - name: last_triggered
        type: string
        mapping: $.overall_state_modified
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-service-health-check.yml

Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and open line items. Used by procurement and finance teams to check PO health without logging into SAP.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status
  description: Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and open line items. Used by procurement and finance teams to check PO health without logging into SAP.
  tags:
  - procurement
  - erp
  - sap
  - sap-s4hana
  - purchase-order
  - finance
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, currency, and delivery date.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (10-digit).
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
      - name: delivery_date
        type: string
        mapping: $.d.DeliveryDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-purchase-order-status.yml

When AWS or Azure cost anomaly detection fires, annotates in Datadog, opens a ServiceNow cost-management ticket, and posts a summary to the FinOps Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Response
  description: When AWS or Azure cost anomaly detection fires, annotates in Datadog, opens a ServiceNow cost-management ticket, and posts a summary to the FinOps Microsoft Teams channel.
  tags:
  - finops
  - cloud-cost
  - aws
  - azure
  - datadog
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given a cloud cost anomaly event (AWS or Azure), create a Datadog annotation, open a ServiceNow cost-management ticket, and alert the FinOps team in Microsoft Teams.
      inputParameters:
      - name: cloud_provider
        in: body
        type: string
        description: Cloud provider where the anomaly was detected (aws or azure).
      - name: anomaly_id
        in: body
        type: string
        description: The anomaly identifier from the cloud provider.
      - name: service_name
        in: body
        type: string
        description: The cloud service or resource group with the anomaly.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated cost overage in USD.
      - name: business_unit
        in: body
        type: string
        description: The 3M business unit responsible for the spend.
      steps:
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: '{{cloud_provider}} Cost Anomaly: {{service_name}}'
          text: 'Anomaly {{anomaly_id}} — estimated overage: ${{estimated_overage_usd}} — BU: {{business_unit}}'
          alert_type: warning
          tags: cloud_provider:{{cloud_provider}},business_unit:{{business_unit}}
      - name: open-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Cloud Cost Anomaly: {{cloud_provider}} {{service_name}} — ${{estimated_overage_usd}} overage'
          description: 'Anomaly {{anomaly_id}} on {{service_name}} ({{cloud_provider}}). BU: {{business_unit}}. Datadog event: {{annotate-datadog.id}}'
          category: cloud_cost
          assigned_group: FinOps
      - name: notify-finops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: finops-alerts@3m.com
          text: 'Cost Anomaly: {{cloud_provider}} | Service: {{service_name}} | Overage: ${{estimated_overage_usd}} | BU: {{business_unit}} | Ticket: {{open-ticket.number}} | Datadog: {{annotate-datadog.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → cloud-cost-anomaly-response.yml

When a new engineer is added to GitHub org, provisions Jira and Confluence access, opens a ServiceNow onboarding ticket, and sends a welcome message with resource links via Microsoft Teams.

naftiko: '0.5'
info:
  label: Developer Onboarding
  description: When a new engineer is added to GitHub org, provisions Jira and Confluence access, opens a ServiceNow onboarding ticket, and sends a welcome message with resource links via Microsoft Teams.
  tags:
  - developer-experience
  - onboarding
  - github
  - jira
  - confluence
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dev-onboarding
    port: 8080
    tools:
    - name: onboard-developer
      description: Given a GitHub username and Workday employee ID, provision Jira/Confluence, create a ServiceNow onboarding task, and send Teams welcome message.
      inputParameters:
      - name: github_username
        in: body
        type: string
        description: The new developer's GitHub username.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: team_name
        in: body
        type: string
        description: The engineering team the developer is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: add-to-jira
        type: call
        call: jira.add-user-to-project
        with:
          username: '{{get-employee.work_email}}'
          project_key: '{{team_name}}'
          role: Developer
      - name: open-onboarding-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Developer onboarding: {{get-employee.full_name}} — {{team_name}}'
          category: dev_onboarding
          assigned_group: DevOps_Platform
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to 3M Engineering, {{get-employee.first_name}}! GitHub: {{github_username}} | Team: {{team_name}} | Jira access provisioned | Onboarding ticket: {{open-onboarding-task.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: project-roles
      path: /project/{{project_key}}/role
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: add-user-to-project
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → developer-onboarding.yml

Creates a patent filing tracking entry in Jira, uploads invention disclosure documents to SharePoint, and notifies the IP legal team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Patent Filing Tracker
  description: Creates a patent filing tracking entry in Jira, uploads invention disclosure documents to SharePoint, and notifies the IP legal team in Microsoft Teams.
  tags:
  - intellectual-property
  - legal
  - jira
  - sharepoint
  - microsoft-teams
  - research
capability:
  exposes:
  - type: mcp
    namespace: ip-management
    port: 8080
    tools:
    - name: track-patent-filing
      description: Given invention details, create a Jira tracker, upload documents to SharePoint, and notify IP legal.
      inputParameters:
      - name: invention_title
        in: body
        type: string
        description: Title of the invention.
      - name: inventor_names
        in: body
        type: string
        description: Comma-separated list of inventor names.
      - name: technology_area
        in: body
        type: string
        description: Technology domain (e.g., adhesives, abrasives, healthcare).
      steps:
      - name: create-patent-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: IP
          issuetype: Epic
          summary: 'Patent Filing: {{invention_title}}'
          description: 'Inventors: {{inventor_names}} | Technology: {{technology_area}}'
      - name: create-document-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: $secrets.ip_site_id
          parent_path: /Patents/{{technology_area}}
          folder_name: '{{create-patent-ticket.key}}-{{invention_title}}'
      - name: notify-ip-legal
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ip_legal_team_id
          channel_id: $secrets.ip_legal_channel_id
          text: 'New patent filing initiated: {{invention_title}} | Inventors: {{inventor_names}} | Tech: {{technology_area}} | Jira: {{create-patent-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:{{parent_path}}/{{folder_name}}
      inputParameters:
      - name: site_id
        in: path
      - name: parent_path
        in: path
      - name: folder_name
        in: path
      operations:
      - name: create-folder
        method: PUT
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → patent-filing-tracker.yml

When a GitHub Dependabot or SonarQube alert fires, enriches the finding with Datadog service context, opens a Jira security ticket, and routes a ServiceNow change request for high-severity vulnerabilities.

naftiko: '0.5'
info:
  label: Security Vulnerability Triage
  description: When a GitHub Dependabot or SonarQube alert fires, enriches the finding with Datadog service context, opens a Jira security ticket, and routes a ServiceNow change request for high-severity vulnerabilities.
  tags:
  - security
  - devsecops
  - github
  - datadog
  - jira
  - servicenow
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-vulnerability
      description: Given a GitHub vulnerability alert (Dependabot or SonarQube), fetch Datadog service metadata, open a Jira security ticket, and for CVSS >= 7.0 also open a ServiceNow change request.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: alert_number
        in: body
        type: string
        description: The GitHub Dependabot or code scanning alert number.
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier (e.g., CVE-2024-12345).
      - name: cvss_score
        in: body
        type: number
        description: The CVSS score of the vulnerability (0.0–10.0).
      - name: affected_package
        in: body
        type: string
        description: The name of the affected library or package.
      - name: service_name
        in: body
        type: string
        description: The Datadog service name associated with this repository.
      steps:
      - name: get-service-context
        type: call
        call: datadog.get-service
        with:
          service_name: '{{service_name}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Security Vulnerability
          summary: '[{{cve_id}}] {{affected_package}} in {{repository}} — CVSS {{cvss_score}}'
          description: 'CVE: {{cve_id}}

            Repo: {{repository}}

            Alert: {{alert_number}}

            Package: {{affected_package}}

            CVSS: {{cvss_score}}

            Service owner: {{get-service-context.team}}'
          priority: High
      - name: open-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Security patch: {{cve_id}} in {{affected_package}} ({{repository}})'
          description: 'High-severity vulnerability {{cve_id}} (CVSS {{cvss_score}}) found in {{affected_package}}. Jira: {{create-jira-ticket.key}}. Service: {{service_name}} owned by {{get-service-context.team}}.'
          category: security_patch
          risk: moderate
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: services
      path: /services/definitions/{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
Open in Framework → View in Fleet → security-vulnerability-triage.yml

When a SAP master data record is created or changed, routes the record for approval via ServiceNow, and notifies the responsible data steward in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Master Data Governance Alert
  description: When a SAP master data record is created or changed, routes the record for approval via ServiceNow, and notifies the responsible data steward in Microsoft Teams.
  tags:
  - master-data
  - sap
  - data-governance
  - servicenow
  - microsoft-teams
  - erp
capability:
  exposes:
  - type: mcp
    namespace: mdg
    port: 8080
    tools:
    - name: route-master-data-approval
      description: Given a SAP master data record type, ID, and change type, create a ServiceNow approval task and notify the data steward in Teams.
      inputParameters:
      - name: record_type
        in: body
        type: string
        description: Master data type (material, vendor, customer).
      - name: record_id
        in: body
        type: string
        description: The SAP master data record ID.
      - name: change_type
        in: body
        type: string
        description: Change type (create, update, block, delete).
      - name: data_steward_upn
        in: body
        type: string
        description: Microsoft UPN of the responsible data steward.
      steps:
      - name: create-approval-task
        type: call
        call: servicenow-mdg.create-task
        with:
          short_description: 'MDG approval: {{change_type}} {{record_type}} {{record_id}}'
          description: 'Record: {{record_id}} ({{record_type}}) | Change: {{change_type}}'
          category: master_data_governance
          assigned_to: '{{data_steward_upn}}'
      - name: notify-steward
        type: call
        call: msteams-mdg.send-message
        with:
          recipient_upn: '{{data_steward_upn}}'
          text: 'MDG Review Required: {{change_type}} on {{record_type}} {{record_id}} | ServiceNow: {{create-approval-task.number}}'
  consumes:
  - type: http
    namespace: servicenow-mdg
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-mdg
    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
Open in Framework → View in Fleet → sap-master-data-governance-alert.yml

Submits a SQL query to 3M's Snowflake data warehouse and returns the result set for ad-hoc analytics and data exploration.

naftiko: '0.5'
info:
  label: Snowflake Query Execution
  description: Submits a SQL query to 3M's Snowflake data warehouse and returns the result set for ad-hoc analytics and data exploration.
  tags:
  - analytics
  - snowflake
  - data-warehouse
  - sql
capability:
  exposes:
  - type: mcp
    namespace: data-analytics
    port: 8080
    tools:
    - name: run-query
      description: Execute a SQL query against the 3M Snowflake data warehouse. Returns the result set as JSON rows.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL query to execute.
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse to use (e.g., ANALYTICS_WH).
      call: snowflake.submit-query
      with:
        statement: '{{sql_statement}}'
        warehouse: '{{warehouse}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-query
        method: POST
Open in Framework → View in Fleet → snowflake-query-execution.yml

Captures R&D experiment results by logging data in Snowflake, updating the Jira research ticket, and archiving the experiment report in SharePoint for knowledge retention.

naftiko: '0.5'
info:
  label: R&D Experiment Log Capture
  description: Captures R&D experiment results by logging data in Snowflake, updating the Jira research ticket, and archiving the experiment report in SharePoint for knowledge retention.
  tags:
  - research
  - innovation
  - snowflake
  - jira
  - sharepoint
  - data-science
capability:
  exposes:
  - type: mcp
    namespace: rd-experiments
    port: 8080
    tools:
    - name: log-experiment
      description: Given experiment details, log results in Snowflake, update Jira, and archive report in SharePoint.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Unique experiment identifier.
      - name: jira_key
        in: body
        type: string
        description: The Jira R&D issue key.
      - name: result_summary
        in: body
        type: string
        description: Summary of experiment results.
      - name: technology_area
        in: body
        type: string
        description: Technology area (e.g., adhesives, abrasives, films).
      steps:
      - name: log-to-snowflake
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO RD.EXPERIMENT_LOG VALUES ('{{experiment_id}}', '{{jira_key}}', '{{result_summary}}', '{{technology_area}}', CURRENT_TIMESTAMP())
          warehouse: RD_WH
      - name: update-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{jira_key}}'
          body: 'Experiment {{experiment_id}} completed. Results: {{result_summary}}'
      - name: archive-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.rd_site_id
          folder_path: /Experiments/{{technology_area}}
          file_name: '{{experiment_id}}-report.json'
          content: '{{result_summary}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - 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:{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → r-d-experiment-log-capture.yml

Monitors Informatica IICS job completions and logs failures to Datadog, opens a Jira data incident, and notifies the ETL team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Informatica Data Integration Failure
  description: Monitors Informatica IICS job completions and logs failures to Datadog, opens a Jira data incident, and notifies the ETL team in Microsoft Teams.
  tags:
  - data-integration
  - informatica
  - datadog
  - jira
  - microsoft-teams
  - etl
capability:
  exposes:
  - type: mcp
    namespace: etl-ops
    port: 8080
    tools:
    - name: handle-informatica-failure
      description: Given an Informatica job name, source, and target, log the failure to Datadog, open a Jira incident, and notify the ETL team in Teams.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The Informatica mapping or workflow job name.
      - name: source_system
        in: body
        type: string
        description: Source system (e.g., SAP, Oracle, Salesforce).
      - name: target_system
        in: body
        type: string
        description: Target system (e.g., Snowflake, Oracle DW).
      - name: error_message
        in: body
        type: string
        description: Error message from the failed job.
      steps:
      - name: log-datadog
        type: call
        call: datadog-etl.create-event
        with:
          title: 'Informatica Failure: {{job_name}}'
          text: 'Source: {{source_system}} → Target: {{target_system}} | Error: {{error_message}}'
          alert_type: error
          tags: etl:informatica,source:{{source_system}},target:{{target_system}}
      - name: open-jira
        type: call
        call: jira-etl.create-issue
        with:
          project_key: DATA
          issuetype: Incident
          summary: 'Informatica failure: {{job_name}} ({{source_system}} → {{target_system}})'
          description: 'Job: {{job_name}}

            Source: {{source_system}}

            Target: {{target_system}}

            Error: {{error_message}}

            Datadog: {{log-datadog.url}}'
      - name: notify-team
        type: call
        call: msteams-etl.send-message
        with:
          recipient_upn: etl-team@3m.com
          text: 'Informatica Failure: {{job_name}} | {{source_system}} → {{target_system}} | Jira: {{open-jira.key}}'
  consumes:
  - type: http
    namespace: datadog-etl
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira-etl
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-etl
    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
Open in Framework → View in Fleet → informatica-data-integration-failure.yml

When a Jira change ticket is approved, creates a ServiceNow change request, updates the linked Confluence runbook, and notifies the change advisory board in Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Management Workflow
  description: When a Jira change ticket is approved, creates a ServiceNow change request, updates the linked Confluence runbook, and notifies the change advisory board in Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-change
    port: 8080
    tools:
    - name: submit-change-request
      description: Given an approved Jira change ticket, open a ServiceNow change request, link the Confluence runbook, and notify the CAB channel in Teams.
      inputParameters:
      - name: jira_issue_key
        in: body
        type: string
        description: The approved Jira change ticket key (e.g., CHG-1234).
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence runbook page ID to attach.
      - name: scheduled_start
        in: body
        type: string
        description: Planned change start time in ISO 8601 format.
      steps:
      - name: get-jira-issue
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{jira_issue_key}}'
      - name: get-runbook
        type: call
        call: confluence.get-page
        with:
          page_id: '{{confluence_page_id}}'
      - name: create-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: '{{get-jira-issue.summary}}'
          description: '{{get-jira-issue.description}}

            Runbook: {{get-runbook.url}}'
          start_date: '{{scheduled_start}}'
          category: infrastructure
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          recipient_upn: cab-board@3m.com
          text: 'Change Submitted: {{get-jira-issue.summary}} | Jira: {{jira_issue_key}} | ServiceNow: {{create-change.number}} | Start: {{scheduled_start}} | Runbook: {{get-runbook.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://3m.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-change-management-workflow.yml

Retrieves a document from SharePoint, sends it to Claude via the Anthropic API for summarization, saves the result back to SharePoint, and notifies the requester in Microsoft Teams.

naftiko: '0.5'
info:
  label: AI-Assisted Document Summarization
  description: Retrieves a document from SharePoint, sends it to Claude via the Anthropic API for summarization, saves the result back to SharePoint, and notifies the requester in Microsoft Teams.
  tags:
  - ai
  - anthropic
  - document-management
  - sharepoint
  - microsoft-teams
  - productivity
capability:
  exposes:
  - type: mcp
    namespace: ai-productivity
    port: 8080
    tools:
    - name: summarize-document
      description: Given a SharePoint document path and requester UPN, fetch the document, summarize via Claude, save the summary, and notify the requester in Teams.
      inputParameters:
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID containing the document.
      - name: document_path
        in: body
        type: string
        description: Path to the document within the SharePoint drive.
      - name: requester_upn
        in: body
        type: string
        description: Microsoft UPN of the person requesting the summary.
      steps:
      - name: get-document
        type: call
        call: sharepoint-ai.get-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_path: '{{document_path}}'
      - name: summarize
        type: call
        call: anthropic-ai.create-message
        with:
          model: claude-sonnet-4-6
          max_tokens: '1024'
          system: You are a concise business document summarizer for 3M executives.
          user_message: 'Summarize this document:


            {{get-document.content}}'
      - name: save-summary
        type: call
        call: sharepoint-ai.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_path: Summaries/{{document_path}}.summary.md
          content: '{{summarize.content}}'
      - name: notify-requester
        type: call
        call: msteams-ai.send-message
        with:
          recipient_upn: '{{requester_upn}}'
          text: 'Your document summary is ready: {{save-summary.url}}'
  consumes:
  - type: http
    namespace: sharepoint-ai
    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}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
      - name: create-file
        method: PUT
  - type: http
    namespace: anthropic-ai
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams-ai
    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
Open in Framework → View in Fleet → ai-assisted-document-summarization.yml

Retrieves a ServiceNow incident record by number, returning priority, state, assigned group, and resolution notes for IT support teams.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup
  description: Retrieves a ServiceNow incident record by number, returning priority, state, assigned group, and resolution notes for IT support teams.
  tags:
  - it-service
  - servicenow
  - incident
  - support
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number. Returns priority, state, assignment group, and short description.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: priority
        type: string
        mapping: $.result.priority
      - name: state
        type: string
        mapping: $.result.state
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
      - name: short_description
        type: string
        mapping: $.result.short_description
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: incident_number
        in: query
        value: number={{incident_number}}
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-lookup.yml

Onboards contractors for plant access by verifying training records in ServiceNow, creating a Workday contingent worker record, and issuing a badge request through Microsoft Power Automate.

naftiko: '0.5'
info:
  label: Contractor Safety Onboarding
  description: Onboards contractors for plant access by verifying training records in ServiceNow, creating a Workday contingent worker record, and issuing a badge request through Microsoft Power Automate.
  tags:
  - safety
  - contractor
  - servicenow
  - workday
  - microsoft-power-automate
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: contractor-safety
    port: 8080
    tools:
    - name: onboard-contractor
      description: Given contractor details, verify safety training, create worker record, and issue badge request.
      inputParameters:
      - name: contractor_name
        in: body
        type: string
        description: Full name of the contractor.
      - name: company_name
        in: body
        type: string
        description: Contractor's employer company.
      - name: plant_code
        in: body
        type: string
        description: 3M plant code for access.
      - name: start_date
        in: body
        type: string
        description: Contract start date.
      - name: training_cert_id
        in: body
        type: string
        description: Safety training certification ID.
      steps:
      - name: verify-training
        type: call
        call: servicenow.verify-training-cert
        with:
          cert_id: '{{training_cert_id}}'
          contractor_name: '{{contractor_name}}'
      - name: create-worker-record
        type: call
        call: workday.create-contingent-worker
        with:
          name: '{{contractor_name}}'
          company: '{{company_name}}'
          location: '{{plant_code}}'
          start_date: '{{start_date}}'
      - name: request-badge
        type: call
        call: power-automate.trigger-flow
        with:
          flow_id: $secrets.badge_request_flow_id
          contractor_name: '{{contractor_name}}'
          plant: '{{plant_code}}'
          worker_id: '{{create-worker-record.worker_id}}'
          training_status: '{{verify-training.status}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: training-certs
      path: /table/sn_ehs_training_cert
      inputParameters:
      - name: cert_id
        in: query
      - name: contractor_name
        in: query
      operations:
      - name: verify-training-cert
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/3m
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: contingent-workers
      path: /contingentWorkers
      operations:
      - name: create-contingent-worker
        method: POST
  - 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: trigger-flow
        method: POST
Open in Framework → View in Fleet → contractor-safety-onboarding.yml

When Palo Alto Networks fires a threat alert, correlates with Datadog network metrics, opens a ServiceNow security incident, and notifies the security operations center in Microsoft Teams.

naftiko: '0.5'
info:
  label: Network Security Event Triage
  description: When Palo Alto Networks fires a threat alert, correlates with Datadog network metrics, opens a ServiceNow security incident, and notifies the security operations center in Microsoft Teams.
  tags:
  - security
  - network
  - palo-alto-networks
  - datadog
  - servicenow
  - microsoft-teams
  - soc
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: triage-network-threat
      description: Given a Palo Alto threat alert ID and source IP, correlate with Datadog, open a ServiceNow security incident, and alert the SOC in Teams.
      inputParameters:
      - name: threat_id
        in: body
        type: string
        description: The Palo Alto Networks threat alert ID.
      - name: source_ip
        in: body
        type: string
        description: Source IP address of the threat.
      - name: threat_severity
        in: body
        type: string
        description: Threat severity level (critical, high, medium, low).
      - name: affected_host
        in: body
        type: string
        description: Hostname or resource affected by the threat.
      steps:
      - name: log-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'Network Threat: {{threat_id}} from {{source_ip}}'
          text: 'Severity: {{threat_severity}} | Host: {{affected_host}}'
          alert_type: error
          tags: security:network,severity:{{threat_severity}}
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Network Threat ({{threat_severity}}): {{threat_id}} — {{source_ip}}'
          description: 'Palo Alto alert {{threat_id}} | Source: {{source_ip}} | Host: {{affected_host}} | Datadog: {{log-datadog-event.url}}'
          category: security
          urgency: '1'
          impact: '1'
      - name: alert-soc
        type: call
        call: msteams.send-message
        with:
          recipient_upn: soc-team@3m.com
          text: 'Network Threat: {{threat_id}} | Severity: {{threat_severity}} | Source IP: {{source_ip}} | Host: {{affected_host}} | ServiceNow: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → network-security-event-triage.yml

Runs Terraform to provision AWS or Azure infrastructure, registers the new resources in Datadog for monitoring, and posts a provisioning summary to the DevOps Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Infrastructure Provisioning Pipeline
  description: Runs Terraform to provision AWS or Azure infrastructure, registers the new resources in Datadog for monitoring, and posts a provisioning summary to the DevOps Microsoft Teams channel.
  tags:
  - devops
  - infrastructure
  - terraform
  - aws
  - azure
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Trigger a Terraform infrastructure provisioning run for AWS or Azure, register resulting resources in Datadog, and notify the DevOps team in Teams.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The Terraform Cloud workspace name to trigger.
      - name: cloud_provider
        in: body
        type: string
        description: 'Target cloud provider: aws or azure.'
      - name: environment
        in: body
        type: string
        description: 'Target environment: dev, staging, or prod.'
      steps:
      - name: trigger-terraform
        type: call
        call: terraform.create-run
        with:
          workspace: '{{workspace_name}}'
          message: Provisioning {{environment}} on {{cloud_provider}}
      - name: register-monitor
        type: call
        call: datadog.create-monitor
        with:
          name: '{{workspace_name}} — {{environment}} health'
          type: service check
          message: Infrastructure {{workspace_name}} on {{cloud_provider}} in {{environment}} is unhealthy.
      - name: notify-devops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: devops-team@3m.com
          text: 'Infrastructure Provisioned: {{workspace_name}} | Cloud: {{cloud_provider}} | Env: {{environment}} | Terraform Run: {{trigger-terraform.run_id}} | Datadog Monitor: {{register-monitor.id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → infrastructure-provisioning-pipeline.yml

Aggregates campaign performance data from Adobe Analytics and HubSpot, updates Salesforce campaign records with current metrics, and posts a digest to the marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Digest
  description: Aggregates campaign performance data from Adobe Analytics and HubSpot, updates Salesforce campaign records with current metrics, and posts a digest to the marketing Microsoft Teams channel.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - hubspot
  - salesforce
  - microsoft-teams
  - campaign-management
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given a campaign ID, fetch Adobe Analytics web metrics and HubSpot email metrics, update the Salesforce campaign record, and post a summary to Teams.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The campaign identifier (shared across Adobe Analytics, HubSpot, and Salesforce).
      - name: date_range
        in: body
        type: string
        description: Date range for the report in YYYY-MM-DD/YYYY-MM-DD format.
      - name: salesforce_campaign_id
        in: body
        type: string
        description: The Salesforce campaign record ID.
      steps:
      - name: get-web-metrics
        type: call
        call: adobe-analytics.get-campaign-metrics
        with:
          campaign_id: '{{campaign_id}}'
          date_range: '{{date_range}}'
      - name: get-email-metrics
        type: call
        call: hubspot.get-campaign-stats
        with:
          campaign_id: '{{campaign_id}}'
      - name: update-salesforce-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{salesforce_campaign_id}}'
          impressions: '{{get-web-metrics.impressions}}'
          clicks: '{{get-web-metrics.clicks}}'
          email_opens: '{{get-email-metrics.opens}}'
          email_clicks: '{{get-email-metrics.clicks}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          recipient_upn: marketing-team@3m.com
          text: 'Campaign {{campaign_id}} digest ({{date_range}}): Impressions: {{get-web-metrics.impressions}} | Web Clicks: {{get-web-metrics.clicks}} | Email Opens: {{get-email-metrics.opens}} | Email Clicks: {{get-email-metrics.clicks}} | Salesforce updated.'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/{{company_id}}/reports
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: campaign-reports
      path: /campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      - name: date_range
        in: query
      operations:
      - name: get-campaign-metrics
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}/stats
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-stats
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - 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
Open in Framework → View in Fleet → marketing-campaign-performance-digest.yml

Creates an inter-plant stock transfer in SAP, logs the shipment in Oracle TMS, and notifies the receiving plant warehouse team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Transfer Order Creation
  description: Creates an inter-plant stock transfer in SAP, logs the shipment in Oracle TMS, and notifies the receiving plant warehouse team in Microsoft Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - oracle
  - microsoft-teams
  - warehouse
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: create-transfer-order
      description: Given source and destination plants, material, and quantity, create a SAP stock transfer, log the shipment, and notify receiving warehouse.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number to transfer.
      - name: source_plant
        in: body
        type: string
        description: The originating 3M plant code.
      - name: destination_plant
        in: body
        type: string
        description: The receiving 3M plant code.
      - name: quantity
        in: body
        type: string
        description: Quantity to transfer.
      steps:
      - name: create-sto
        type: call
        call: sap.create-stock-transfer
        with:
          material: '{{material_number}}'
          supplying_plant: '{{source_plant}}'
          receiving_plant: '{{destination_plant}}'
          quantity: '{{quantity}}'
      - name: log-shipment
        type: call
        call: oracle-tms.create-shipment
        with:
          origin: '{{source_plant}}'
          destination: '{{destination_plant}}'
          reference: '{{create-sto.transfer_order_number}}'
          weight: '{{quantity}}'
      - name: notify-receiving
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.warehouse_team_id
          channel_id: $secrets.warehouse_channel_id
          text: 'Inbound Transfer: {{material_number}} x{{quantity}} from {{source_plant}} | SAP STO: {{create-sto.transfer_order_number}} | Shipment: {{log-shipment.shipment_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/MM_STOCK_TRANSFER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock-transfers
      path: /StockTransferOrder
      operations:
      - name: create-stock-transfer
        method: POST
  - type: http
    namespace: oracle-tms
    baseUri: https://3m-ebs.oracle.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: shipments
      path: /shipments
      operations:
      - name: create-shipment
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → warehouse-transfer-order-creation.yml

Deploys a trained ML model by registering it in Azure Machine Learning, creating a Jira deployment ticket, updating the model registry in Snowflake, and notifying the data science team in Teams.

naftiko: '0.5'
info:
  label: Machine Learning Model Deployment
  description: Deploys a trained ML model by registering it in Azure Machine Learning, creating a Jira deployment ticket, updating the model registry in Snowflake, and notifying the data science team in Teams.
  tags:
  - data-science
  - machine-learning
  - azure-machine-learning
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-ops
    port: 8080
    tools:
    - name: deploy-model
      description: Given a model name, version, and endpoint, register in Azure ML, create Jira ticket, update registry, and notify data science.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: Name of the ML model.
      - name: model_version
        in: body
        type: string
        description: Model version to deploy.
      - name: endpoint_name
        in: body
        type: string
        description: Azure ML endpoint name.
      - name: use_case
        in: body
        type: string
        description: Business use case (e.g., demand_forecast, defect_detection, predictive_maintenance).
      steps:
      - name: register-model
        type: call
        call: azureml.register-model
        with:
          model_name: '{{model_name}}'
          model_version: '{{model_version}}'
          endpoint: '{{endpoint_name}}'
      - name: create-deployment-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: MLOPS
          issuetype: Task
          summary: 'Model Deployment: {{model_name}} v{{model_version}} to {{endpoint_name}}'
          description: 'Use case: {{use_case}} | Azure ML endpoint: {{endpoint_name}} | Registration: {{register-model.model_id}}'
      - name: update-registry
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO MLOPS.MODEL_REGISTRY VALUES ('{{model_name}}', '{{model_version}}', '{{endpoint_name}}', '{{use_case}}', CURRENT_TIMESTAMP())
          warehouse: MLOPS_WH
      - name: notify-data-science
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.datascience_team_id
          channel_id: $secrets.datascience_channel_id
          text: 'Model Deployed: {{model_name}} v{{model_version}} to {{endpoint_name}} | Use case: {{use_case}} | Jira: {{create-deployment-ticket.key}}'
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://3m-ml.api.azureml.ms
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: models
      path: /models/{{model_name}}/versions/{{model_version}}/deploy
      inputParameters:
      - name: model_name
        in: path
      - name: model_version
        in: path
      operations:
      - name: register-model
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → machine-learning-model-deployment.yml

Pulls a supplier profile from SAP Ariba, enriches it with ZoomInfo firmographic data, scores risk, and creates a ServiceNow vendor risk review task for the procurement team.

naftiko: '0.5'
info:
  label: Supplier Risk Assessment
  description: Pulls a supplier profile from SAP Ariba, enriches it with ZoomInfo firmographic data, scores risk, and creates a ServiceNow vendor risk review task for the procurement team.
  tags:
  - procurement
  - vendor-risk
  - sap-ariba
  - zoominfo
  - servicenow
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: Given an Ariba supplier ID and company name, enrich with ZoomInfo data, compute a risk tier, and open a ServiceNow vendor risk task.
      inputParameters:
      - name: ariba_supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      - name: company_name
        in: body
        type: string
        description: Legal company name for ZoomInfo enrichment.
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{ariba_supplier_id}}'
      - name: enrich-firmographics
        type: call
        call: zoominfo.get-company
        with:
          company_name: '{{company_name}}'
      - name: create-risk-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vendor risk review: {{company_name}}'
          description: 'Supplier: {{ariba_supplier_id}} | Revenue: {{enrich-firmographics.revenue}} | Employees: {{enrich-firmographics.employee_count}} | Country: {{get-supplier.country}} | Status: {{get-supplier.qualification_status}}'
          category: vendor_risk
          assigned_group: Procurement_Risk
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      inputParameters:
      - name: company_name
        in: query
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → supplier-risk-assessment.yml

Collects energy consumption data from SAP Plant Maintenance, calculates KPIs in Snowflake, and publishes a summary report to a Power BI dataset and the sustainability Teams channel.

naftiko: '0.5'
info:
  label: Plant Energy Consumption Report
  description: Collects energy consumption data from SAP Plant Maintenance, calculates KPIs in Snowflake, and publishes a summary report to a Power BI dataset and the sustainability Teams channel.
  tags:
  - sustainability
  - energy
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: generate-energy-report
      description: Given a plant code and reporting period, collect energy data, compute KPIs, refresh Power BI, and notify sustainability team.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., 2026-Q1).
      steps:
      - name: get-energy-data
        type: call
        call: sap.get-energy-readings
        with:
          plant: '{{plant_code}}'
          period: '{{period}}'
      - name: compute-kpis
        type: call
        call: snowflake.run-query
        with:
          statement: CALL SUSTAINABILITY.COMPUTE_ENERGY_KPIS('{{plant_code}}', '{{period}}')
          warehouse: SUSTAINABILITY_WH
      - name: refresh-powerbi
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: $secrets.sustainability_pbi_group
          dataset_id: $secrets.energy_dataset_id
      - name: notify-sustainability
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.sustainability_team_id
          channel_id: $secrets.sustainability_channel_id
          text: Energy report for {{plant_code}} ({{period}}) published. Power BI dashboard refreshed.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PM_MEASUREMENT_DOC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: energy-readings
      path: /MeasurementDocument
      inputParameters:
      - name: plant
        in: query
      - name: period
        in: query
      operations:
      - name: get-energy-readings
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → plant-energy-consumption-report.yml

Updates controlled documents for ISO compliance by versioning in SharePoint, creating a Jira review task, and notifying the document control team in Microsoft Teams.

naftiko: '0.5'
info:
  label: ISO Document Control Update
  description: Updates controlled documents for ISO compliance by versioning in SharePoint, creating a Jira review task, and notifying the document control team in Microsoft Teams.
  tags:
  - compliance
  - iso
  - sharepoint
  - jira
  - microsoft-teams
  - quality
  - document-control
capability:
  exposes:
  - type: mcp
    namespace: document-control
    port: 8080
    tools:
    - name: update-controlled-document
      description: Given a document ID, new version, and change summary, version in SharePoint, create review task, and notify.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: SharePoint document ID.
      - name: document_title
        in: body
        type: string
        description: Title of the controlled document.
      - name: new_version
        in: body
        type: string
        description: New document version number.
      - name: change_summary
        in: body
        type: string
        description: Summary of changes in this version.
      steps:
      - name: upload-new-version
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.qms_site_id
          folder_path: /ControlledDocs
          file_name: '{{document_id}}-v{{new_version}}.pdf'
          content: '{{change_summary}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: QMS
          issuetype: Task
          summary: 'Doc Review: {{document_title}} v{{new_version}}'
          description: 'Document: {{document_id}} | Version: {{new_version}} | Changes: {{change_summary}}'
      - name: notify-doc-control
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.quality_team_id
          channel_id: $secrets.doc_control_channel_id
          text: 'Document Updated: {{document_title}} v{{new_version}} | Changes: {{change_summary}} | Review: {{create-review-task.key}}'
  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:{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → iso-document-control-update.yml

Generates shipping labels by retrieving order details from SAP, creating a shipment in Oracle TMS, and posting the tracking information to the Salesforce opportunity record.

naftiko: '0.5'
info:
  label: Shipping Label Generation
  description: Generates shipping labels by retrieving order details from SAP, creating a shipment in Oracle TMS, and posting the tracking information to the Salesforce opportunity record.
  tags:
  - logistics
  - shipping
  - sap
  - oracle
  - salesforce
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: shipping
    port: 8080
    tools:
    - name: generate-shipping-label
      description: Given an order number, create shipment, generate label, and update Salesforce with tracking.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP sales order number.
      - name: salesforce_opportunity_id
        in: body
        type: string
        description: Linked Salesforce opportunity ID.
      steps:
      - name: get-order-details
        type: call
        call: sap.get-delivery
        with:
          order_number: '{{order_number}}'
      - name: create-shipment
        type: call
        call: oracle-tms.create-shipment
        with:
          origin: '{{get-order-details.shipping_plant}}'
          destination: '{{get-order-details.ship_to_address}}'
          weight: '{{get-order-details.total_weight}}'
          reference: '{{order_number}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{salesforce_opportunity_id}}'
          tracking_number: '{{create-shipment.tracking_number}}'
          ship_date: '{{create-shipment.ship_date}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_OutboundDelivery('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: oracle-tms
    baseUri: https://3m-ebs.oracle.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: shipments
      path: /shipments
      operations:
      - name: create-shipment
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → shipping-label-generation.yml

When Workday creates a new job requisition, schedules interviews via Microsoft Teams, creates a shared Confluence evaluation page, and notifies the hiring panel.

naftiko: '0.5'
info:
  label: Candidate Interview Pipeline
  description: When Workday creates a new job requisition, schedules interviews via Microsoft Teams, creates a shared Confluence evaluation page, and notifies the hiring panel.
  tags:
  - hr
  - recruiting
  - workday
  - microsoft-teams
  - confluence
  - hiring
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: schedule-interview-panel
      description: Given a Workday requisition ID and candidate name, create Teams meeting invites for the panel and a Confluence evaluation scorecard page.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      - name: candidate_name
        in: body
        type: string
        description: Full name of the candidate.
      - name: interview_date
        in: body
        type: string
        description: Interview date in YYYY-MM-DD format.
      - name: panel_upns
        in: body
        type: string
        description: Comma-separated list of interviewer Microsoft UPNs.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-teams-meeting
        type: call
        call: msteams.create-meeting
        with:
          subject: 'Interview: {{candidate_name}} — {{get-requisition.job_title}}'
          start_datetime: '{{interview_date}}T09:00:00'
          attendees: '{{panel_upns}}'
      - name: create-scorecard
        type: call
        call: confluence.create-page
        with:
          space_key: HR
          title: 'Interview Scorecard: {{candidate_name}} — {{get-requisition.job_title}}'
          body: 'Requisition: {{requisition_id}} | Role: {{get-requisition.job_title}} | Date: {{interview_date}} | Meeting: {{create-teams-meeting.join_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: job-requisitions
      path: /jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: meetings
      path: /me/onlineMeetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://3m.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → candidate-interview-pipeline.yml

On a protected-branch GitHub Actions pipeline failure, creates a New Relic deployment marker, opens a Jira bug, and alerts the engineering team in Microsoft Teams with full log context.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Triage
  description: On a protected-branch GitHub Actions pipeline failure, creates a New Relic deployment marker, opens a Jira bug, and alerts the engineering team in Microsoft Teams with full log context.
  tags:
  - devops
  - ci-cd
  - github
  - github-actions
  - jira
  - new-relic
  - microsoft-teams
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event, create a New Relic deployment marker, open a Jira bug, and alert the engineering channel in Microsoft Teams.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: branch
        in: body
        type: string
        description: The branch where the pipeline failed.
      - name: failed_job_name
        in: body
        type: string
        description: Name of the failing job in the pipeline.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the pipeline.
      - name: log_url
        in: body
        type: string
        description: URL to the failed pipeline run logs.
      steps:
      - name: create-marker
        type: call
        call: newrelic.create-deployment-marker
        with:
          entity_name: '{{repository}}'
          version: '{{commit_sha}}'
          description: 'Pipeline failure on {{branch}} — job: {{failed_job_name}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repository}} / {{branch}} — {{failed_job_name}}'
          description: 'Pipeline: {{pipeline_id}}

            Repo: {{repository}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Log: {{log_url}}

            New Relic marker: {{create-marker.id}}'
      - name: alert-engineering
        type: call
        call: msteams.send-message
        with:
          recipient_upn: engineering-alerts@3m.com
          text: 'Pipeline Failure: {{repository}} | Branch: {{branch}} | Job: {{failed_job_name}} | Jira: {{create-bug.key}} | Log: {{log_url}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.newrelic_api_key
      placement: header
    resources:
    - name: deployments
      path: /applications/{{entity_name}}/deployments.json
      inputParameters:
      - name: entity_name
        in: path
      operations:
      - name: create-deployment-marker
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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
Open in Framework → View in Fleet → ci-cd-pipeline-failure-triage.yml

Initiates a product specification change by creating a SAP engineering change order, opening a Jira review task, and notifying the product engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Specification Change Request
  description: Initiates a product specification change by creating a SAP engineering change order, opening a Jira review task, and notifying the product engineering team in Microsoft Teams.
  tags:
  - engineering
  - product-development
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-engineering
    port: 8080
    tools:
    - name: request-spec-change
      description: Given a material, change description, and justification, create SAP ECO, Jira task, and notify engineering.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number being changed.
      - name: change_description
        in: body
        type: string
        description: Description of the specification change.
      - name: justification
        in: body
        type: string
        description: Business justification for the change.
      - name: priority
        in: body
        type: string
        description: 'Change priority: low, medium, high, critical.'
      steps:
      - name: create-eco
        type: call
        call: sap.create-change-order
        with:
          material: '{{material_number}}'
          description: '{{change_description}}'
          reason: '{{justification}}'
          priority: '{{priority}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Task
          summary: 'Spec Change Review: {{material_number}} — {{change_description}}'
          description: 'SAP ECO: {{create-eco.change_number}} | Justification: {{justification}} | Priority: {{priority}}'
          priority: '{{priority}}'
      - name: notify-engineering
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.engineering_team_id
          channel_id: $secrets.engineering_channel_id
          text: 'Spec Change Request: {{material_number}} | {{change_description}} | Priority: {{priority}} | SAP ECO: {{create-eco.change_number}} | Jira: {{create-review-task.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PLM_CHANGE_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: change-orders
      path: /EngineeringChangeOrder
      operations:
      - name: create-change-order
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → product-specification-change-request.yml

Looks up a supply chain order across SAP S/4HANA and Oracle E-Business Suite, reconciles inventory and delivery status, and surfaces consolidated status to Salesforce customer-facing records.

naftiko: '0.5'
info:
  label: Supply Chain Order Status
  description: Looks up a supply chain order across SAP S/4HANA and Oracle E-Business Suite, reconciles inventory and delivery status, and surfaces consolidated status to Salesforce customer-facing records.
  tags:
  - supply-chain
  - erp
  - sap
  - oracle
  - salesforce
  - order-management
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: get-order-status
      description: Look up a customer order across SAP and Oracle EBS, return consolidated fulfillment status, inventory availability, and estimated delivery date.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The customer order number, present in both SAP and Oracle EBS.
      - name: salesforce_opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID linked to this order.
      steps:
      - name: get-sap-order
        type: call
        call: sap.get-sales-order
        with:
          order_number: '{{order_number}}'
      - name: get-oracle-inventory
        type: call
        call: oracle-ebs.get-inventory-status
        with:
          item_number: '{{get-sap-order.material_number}}'
          warehouse: '{{get-sap-order.shipping_plant}}'
      - name: update-salesforce-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{salesforce_opportunity_id}}'
          delivery_date: '{{get-sap-order.requested_delivery_date}}'
          fulfillment_status: '{{get-sap-order.overall_status}}'
          available_stock: '{{get-oracle-inventory.available_qty}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /A_SalesOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-sales-order
        method: GET
        outputRawFormat: json
  - type: http
    namespace: oracle-ebs
    baseUri: https://3m-ebs.oracle.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: inventory
      path: /inventoryOnhandQuantities
      inputParameters:
      - name: item_number
        in: query
      - name: warehouse
        in: query
      operations:
      - name: get-inventory-status
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → supply-chain-order-status.yml

When an Azure DevOps release pipeline reaches a manual gate, queries Datadog SLO status, checks ServiceNow for open P1 incidents, and posts a go/no-go recommendation to the release management Teams channel.

naftiko: '0.5'
info:
  label: Azure DevOps Release Gate
  description: When an Azure DevOps release pipeline reaches a manual gate, queries Datadog SLO status, checks ServiceNow for open P1 incidents, and posts a go/no-go recommendation to the release management Teams channel.
  tags:
  - devops
  - azure-devops
  - datadog
  - servicenow
  - release-management
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: release-gate
    port: 8080
    tools:
    - name: evaluate-release-gate
      description: Given a release ID and target environment, check Datadog SLO health and open P1 ServiceNow incidents to produce a go/no-go recommendation.
      inputParameters:
      - name: release_id
        in: body
        type: string
        description: The Azure DevOps release ID.
      - name: target_environment
        in: body
        type: string
        description: Target deployment environment (staging, prod).
      - name: service_name
        in: body
        type: string
        description: Datadog service name to check SLO for.
      steps:
      - name: check-slo
        type: call
        call: datadog.get-slo-status
        with:
          service: '{{service_name}}'
      - name: check-open-incidents
        type: call
        call: servicenow.get-incidents
        with:
          urgency: '1'
          state: '1'
      - name: notify-release-team
        type: call
        call: msteams-release.send-message
        with:
          recipient_upn: release-mgmt@3m.com
          text: 'Release Gate: {{release_id}} → {{target_environment}} | SLO: {{check-slo.status}} | Open P1s: {{check-open-incidents.count}} | Recommendation: review before proceeding.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slo-status
      path: /slo
      inputParameters:
      - name: service
        in: query
      operations:
      - name: get-slo-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: urgency
        in: query
      - name: state
        in: query
      operations:
      - name: get-incidents
        method: GET
  - type: http
    namespace: msteams-release
    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
Open in Framework → View in Fleet → azure-devops-release-gate.yml

Processes intercompany invoices by matching SAP FI documents between company codes, logging discrepancies in Jira, and notifying the shared services team in Teams.

naftiko: '0.5'
info:
  label: Intercompany Invoice Processing
  description: Processes intercompany invoices by matching SAP FI documents between company codes, logging discrepancies in Jira, and notifying the shared services team in Teams.
  tags:
  - finance
  - intercompany
  - sap
  - sap-s4hana
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: intercompany-finance
    port: 8080
    tools:
    - name: process-intercompany-invoice
      description: Given sending and receiving company codes and invoice number, match documents, log issues, and notify shared services.
      inputParameters:
      - name: sending_company
        in: body
        type: string
        description: SAP company code of the sending entity.
      - name: receiving_company
        in: body
        type: string
        description: SAP company code of the receiving entity.
      - name: invoice_number
        in: body
        type: string
        description: The intercompany invoice number.
      steps:
      - name: get-sending-doc
        type: call
        call: sap.get-fi-document
        with:
          company_code: '{{sending_company}}'
          invoice: '{{invoice_number}}'
      - name: get-receiving-doc
        type: call
        call: sap.get-fi-document
        with:
          company_code: '{{receiving_company}}'
          invoice: '{{invoice_number}}'
      - name: log-discrepancy
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          issuetype: Task
          summary: 'IC Match: Invoice {{invoice_number}} ({{sending_company}} → {{receiving_company}})'
          description: 'Sending amount: {{get-sending-doc.amount}} | Receiving amount: {{get-receiving-doc.amount}} | Currency: {{get-sending-doc.currency}}'
      - name: notify-shared-services
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.shared_services_team_id
          channel_id: $secrets.ic_channel_id
          text: 'IC Invoice {{invoice_number}}: {{sending_company}} → {{receiving_company}} | Sending: {{get-sending-doc.amount}} | Receiving: {{get-receiving-doc.amount}} | Jira: {{log-discrepancy.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FI_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: fi-documents
      path: /FIDocument(CompanyCode='{{company_code}}',Invoice='{{invoice}}')
      inputParameters:
      - name: company_code
        in: path
      - name: invoice
        in: path
      operations:
      - name: get-fi-document
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → intercompany-invoice-processing.yml

Processes incoming NPS survey responses from Salesforce, segments detractors for immediate follow-up via HubSpot, and updates the Power BI customer satisfaction dashboard.

naftiko: '0.5'
info:
  label: Customer NPS Survey Processing
  description: Processes incoming NPS survey responses from Salesforce, segments detractors for immediate follow-up via HubSpot, and updates the Power BI customer satisfaction dashboard.
  tags:
  - customer-experience
  - nps
  - salesforce
  - hubspot
  - power-bi
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: customer-experience
    port: 8080
    tools:
    - name: process-nps-response
      description: Given an NPS survey response and Salesforce contact ID, route detractors for follow-up in HubSpot and refresh the Power BI CX dashboard.
      inputParameters:
      - name: salesforce_contact_id
        in: body
        type: string
        description: The Salesforce contact ID of the survey respondent.
      - name: nps_score
        in: body
        type: integer
        description: NPS score 0–10.
      - name: survey_comment
        in: body
        type: string
        description: Optional open-text comment from the respondent.
      steps:
      - name: get-contact
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
      - name: update-salesforce-nps
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
          nps_score: '{{nps_score}}'
          nps_comment: '{{survey_comment}}'
      - name: create-hubspot-task
        type: call
        call: hubspot.create-task
        with:
          contact_email: '{{get-contact.email}}'
          subject: 'NPS Detractor Follow-up: {{get-contact.name}} (score {{nps_score}})'
          body: 'Comment: {{survey_comment}}'
          due_date_days: '2'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
      - name: update-contact
        method: PATCH
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: tasks
      path: /objects/tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → customer-nps-survey-processing.yml

When Workday records a termination, disables the Microsoft 365 account, raises a ServiceNow access revocation task, and notifies HR and IT in Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding
  description: When Workday records a termination, disables the Microsoft 365 account, raises a ServiceNow access revocation task, and notifies HR and IT in Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-365
  - servicenow
  - microsoft-teams
  - iam
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: Given a Workday employee ID and termination date, disable their Microsoft 365 account, open a ServiceNow revocation task, and notify HR and IT in Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: termination_date
        in: body
        type: string
        description: Effective termination date in YYYY-MM-DD format.
      - name: termination_type
        in: body
        type: string
        description: Type of termination (voluntary, involuntary, retirement).
      steps:
      - name: get-employee
        type: call
        call: workday-offboard.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: disable-m365
        type: call
        call: msgraph-offboard.disable-user
        with:
          upn: '{{get-employee.work_email}}'
      - name: create-revocation-task
        type: call
        call: servicenow-offboard.create-task
        with:
          short_description: 'Offboarding access revocation: {{get-employee.full_name}}'
          description: Employee {{employee_id}} terminated {{termination_date}} ({{termination_type}}). Revoke all system access.
          category: offboarding
          assigned_group: IT_Security
      - name: notify-hr-it
        type: call
        call: msteams-offboard.send-message
        with:
          recipient_upn: hr-it-ops@3m.com
          text: 'Offboarding: {{get-employee.full_name}} | Date: {{termination_date}} | Type: {{termination_type}} | M365 disabled | Task: {{create-revocation-task.number}}'
  consumes:
  - type: http
    namespace: workday-offboard
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-offboard
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow-offboard
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-offboard
    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
Open in Framework → View in Fleet → employee-offboarding.yml

When a supplier delivery is delayed, updates the SAP purchase order schedule, creates a ServiceNow case for procurement follow-up, and notifies the category manager in Teams.

naftiko: '0.5'
info:
  label: Supplier Delivery Delay Escalation
  description: When a supplier delivery is delayed, updates the SAP purchase order schedule, creates a ServiceNow case for procurement follow-up, and notifies the category manager in Teams.
  tags:
  - supply-chain
  - procurement
  - sap
  - servicenow
  - microsoft-teams
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-escalation
    port: 8080
    tools:
    - name: escalate-delivery-delay
      description: Given a PO number, new estimated delivery date, and delay reason, update SAP schedule, create a ServiceNow case, and notify the category manager.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: new_delivery_date
        in: body
        type: string
        description: The revised estimated delivery date.
      - name: delay_reason
        in: body
        type: string
        description: Reason provided by the supplier for the delay.
      - name: category_manager_upn
        in: body
        type: string
        description: Microsoft UPN of the procurement category manager.
      steps:
      - name: update-po-schedule
        type: call
        call: sap.update-po-delivery
        with:
          po_number: '{{po_number}}'
          delivery_date: '{{new_delivery_date}}'
          note: 'Supplier delay: {{delay_reason}}'
      - name: create-procurement-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Supplier Delivery Delay: PO {{po_number}}'
          description: 'PO {{po_number}} delayed to {{new_delivery_date}}. Reason: {{delay_reason}}'
          category: procurement
          priority: '2'
      - name: notify-category-manager
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{category_manager_upn}}'
          text: 'Supplier Delay on PO {{po_number}} | New ETA: {{new_delivery_date}} | Reason: {{delay_reason}} | ServiceNow: {{create-procurement-case.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-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: update-po-delivery
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → supplier-delivery-delay-escalation.yml

Routes a capital expenditure request through SAP for financial posting, creates a Jira approval workflow, and notifies the plant controller and finance VP in Teams.

naftiko: '0.5'
info:
  label: Capital Expenditure Approval
  description: Routes a capital expenditure request through SAP for financial posting, creates a Jira approval workflow, and notifies the plant controller and finance VP in Teams.
  tags:
  - finance
  - capital-expenditure
  - sap
  - jira
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: capex
    port: 8080
    tools:
    - name: submit-capex-request
      description: Given a project description, amount, cost center, and approver, create SAP investment order, Jira approval, and notify finance.
      inputParameters:
      - name: project_description
        in: body
        type: string
        description: Description of the capital project.
      - name: amount
        in: body
        type: string
        description: Requested capital amount in USD.
      - name: cost_center
        in: body
        type: string
        description: SAP cost center for the expenditure.
      - name: approver_upn
        in: body
        type: string
        description: UPN of the finance approver.
      steps:
      - name: create-investment-order
        type: call
        call: sap.create-investment-order
        with:
          description: '{{project_description}}'
          planned_amount: '{{amount}}'
          cost_center: '{{cost_center}}'
          order_type: I001
      - name: create-approval-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CAPEX
          issuetype: Task
          summary: 'CapEx Approval: {{project_description}} (${{amount}})'
          description: 'Cost Center: {{cost_center}} | SAP Order: {{create-investment-order.order_number}} | Amount: ${{amount}}'
      - name: notify-approver
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'CapEx request pending your approval: {{project_description}} | ${{amount}} | SAP: {{create-investment-order.order_number}} | Jira: {{create-approval-ticket.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/IM_INVESTMENT_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: investment-orders
      path: /InvestmentOrder
      operations:
      - name: create-investment-order
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → capital-expenditure-approval.yml

Queries Workday to retrieve employee profile details including department, manager, location, and job title for HR and people operations.

naftiko: '0.5'
info:
  label: Workday Employee Lookup
  description: Queries Workday to retrieve employee profile details including department, manager, location, and job title for HR and people operations.
  tags:
  - hr
  - workday
  - employee
  - people-operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee-profile
      description: Look up a Workday employee by employee ID. Returns name, department, manager, job title, and work location.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-worker
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.Worker.Name
      - name: department
        type: string
        mapping: $.Worker.Organization
      - name: manager
        type: string
        mapping: $.Worker.Manager.Name
      - name: job_title
        type: string
        mapping: $.Worker.JobTitle
      - name: location
        type: string
        mapping: $.Worker.Location
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/3m
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-lookup.yml

Retrieves a Safety Data Sheet from SAP EHS, uploads it to SharePoint, and distributes a notification to affected plant safety coordinators via Microsoft Teams.

naftiko: '0.5'
info:
  label: SDS Document Distribution
  description: Retrieves a Safety Data Sheet from SAP EHS, uploads it to SharePoint, and distributes a notification to affected plant safety coordinators via Microsoft Teams.
  tags:
  - safety
  - ehs
  - sap
  - sharepoint
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: ehs-documents
    port: 8080
    tools:
    - name: distribute-sds
      description: Given a material number, retrieve the SDS from SAP, upload to SharePoint, and notify plant safety coordinators.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: revision_reason
        in: body
        type: string
        description: Reason for the SDS revision.
      steps:
      - name: get-sds
        type: call
        call: sap.get-sds-document
        with:
          material: '{{material_number}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.ehs_site_id
          folder_path: /SDS/{{material_number}}
          file_name: SDS-{{material_number}}-latest.pdf
          content: '{{get-sds.document_content}}'
      - name: notify-safety-coordinators
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.safety_team_id
          channel_id: $secrets.safety_sds_channel_id
          text: 'Updated SDS for {{material_number}} now available on SharePoint. Reason: {{revision_reason}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/EHS_SDS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sds-documents
      path: /SafetyDataSheet(Material='{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-sds-document
        method: GET
  - 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:{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → sds-document-distribution.yml

Performs competitive pricing analysis by pulling 3M product prices from SAP, querying market intelligence from Snowflake, and publishing insights to the Salesforce opportunity and marketing Teams channel.

naftiko: '0.5'
info:
  label: Competitive Pricing Analysis
  description: Performs competitive pricing analysis by pulling 3M product prices from SAP, querying market intelligence from Snowflake, and publishing insights to the Salesforce opportunity and marketing Teams channel.
  tags:
  - sales
  - pricing
  - sap
  - snowflake
  - salesforce
  - microsoft-teams
  - market-intelligence
capability:
  exposes:
  - type: mcp
    namespace: competitive-analysis
    port: 8080
    tools:
    - name: analyze-competitive-pricing
      description: Given a product line and competitor, pull 3M prices, market data, and publish analysis.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: 3M product line identifier.
      - name: competitor_name
        in: body
        type: string
        description: Competitor name for comparison.
      - name: salesforce_opportunity_id
        in: body
        type: string
        description: Salesforce opportunity to attach analysis.
      steps:
      - name: get-3m-pricing
        type: call
        call: sap.get-product-pricing
        with:
          product_line: '{{product_line}}'
      - name: get-market-intel
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM MARKET_INTEL.COMPETITOR_PRICING WHERE competitor = '{{competitor_name}}' AND product_line = '{{product_line}}'
          warehouse: ANALYTICS_WH
      - name: update-opportunity
        type: call
        call: salesforce.add-note
        with:
          opportunity_id: '{{salesforce_opportunity_id}}'
          title: 'Competitive Pricing: {{product_line}} vs {{competitor_name}}'
          body: '3M avg price: {{get-3m-pricing.avg_price}} | Competitor avg: {{get-market-intel.competitor_avg_price}} | Delta: {{get-market-intel.price_delta_pct}}%'
      - name: notify-marketing
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.marketing_team_id
          channel_id: $secrets.pricing_channel_id
          text: 'Pricing Analysis: {{product_line}} vs {{competitor_name}} | 3M: {{get-3m-pricing.avg_price}} | Competitor: {{get-market-intel.competitor_avg_price}} | Opp: {{salesforce_opportunity_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/SD_PRICING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: product-pricing
      path: /ProductLinePricing(ProductLine='{{product_line}}')
      inputParameters:
      - name: product_line
        in: path
      operations:
      - name: get-product-pricing
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notes
      path: /sobjects/ContentNote
      inputParameters:
      - name: opportunity_id
        in: query
      operations:
      - name: add-note
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → competitive-pricing-analysis.yml

Pulls the current Salesforce sales forecast by region, writes the data into SAP Business Warehouse for planning, and refreshes the Power BI sales leadership dashboard.

naftiko: '0.5'
info:
  label: Sales Forecast Sync
  description: Pulls the current Salesforce sales forecast by region, writes the data into SAP Business Warehouse for planning, and refreshes the Power BI sales leadership dashboard.
  tags:
  - sales
  - forecasting
  - salesforce
  - sap
  - sap-bw
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-planning
    port: 8080
    tools:
    - name: sync-sales-forecast
      description: Pull Salesforce opportunity forecast for a region and period, load into SAP BW, and refresh the Power BI sales dashboard.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Sales region (e.g., APAC, EMEA, Americas).
      - name: forecast_period
        in: body
        type: string
        description: Forecast period in YYYY-MM format.
      steps:
      - name: get-forecast
        type: call
        call: salesforce.get-forecast
        with:
          region: '{{region}}'
          period: '{{forecast_period}}'
      - name: load-bw
        type: call
        call: sap-bw.load-forecast-data
        with:
          region: '{{region}}'
          period: '{{forecast_period}}'
          amount: '{{get-forecast.forecast_amount}}'
          currency: '{{get-forecast.currency}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_name: sales-forecast-{{region}}-{{forecast_period}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: forecasts
      path: /query
      inputParameters:
      - name: region
        in: query
      - name: period
        in: query
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: sap-bw
    baseUri: https://3m-bw.sap.com/sap/opu/odata/sap/ZBWFORECAST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: forecast-data
      path: /ForecastSet
      operations:
      - name: load-forecast-data
        method: POST
  - 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_name}}/refreshes
      inputParameters:
      - name: dataset_name
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → sales-forecast-sync.yml

Initiates a product batch recall by flagging the batch in SAP QM, creating a Jira tracking epic, notifying regulatory affairs via email, and posting to the quality leadership Teams channel.

naftiko: '0.5'
info:
  label: Batch Recall Initiation
  description: Initiates a product batch recall by flagging the batch in SAP QM, creating a Jira tracking epic, notifying regulatory affairs via email, and posting to the quality leadership Teams channel.
  tags:
  - quality
  - recall
  - sap
  - jira
  - microsoft-teams
  - regulatory
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: quality-recall
    port: 8080
    tools:
    - name: initiate-batch-recall
      description: Given a material number, batch number, and recall reason, flag the batch in SAP, create a Jira epic, notify regulatory, and alert quality leadership.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number of the recalled product.
      - name: batch_number
        in: body
        type: string
        description: The production batch number to recall.
      - name: recall_reason
        in: body
        type: string
        description: Reason for the product recall.
      - name: recall_class
        in: body
        type: string
        description: 'FDA recall classification: class_i, class_ii, or class_iii.'
      steps:
      - name: create-quality-notification
        type: call
        call: sap.create-qn
        with:
          material: '{{material_number}}'
          batch: '{{batch_number}}'
          notification_type: Q2
          short_text: 'RECALL: {{material_number}} Batch {{batch_number}}'
          long_text: '{{recall_reason}} | Classification: {{recall_class}}'
      - name: create-recall-epic
        type: call
        call: jira.create-issue
        with:
          project_key: RECALL
          issuetype: Epic
          summary: 'Recall: {{material_number}} Batch {{batch_number}} ({{recall_class}})'
          description: '{{recall_reason}} | SAP QN: {{create-quality-notification.notification_id}}'
      - name: notify-regulatory
        type: call
        call: msgraph.send-mail
        with:
          to: $secrets.regulatory_affairs_dl
          subject: 'URGENT: Batch Recall Initiated — {{material_number}} / {{batch_number}}'
          body: 'A {{recall_class}} recall has been initiated for material {{material_number}}, batch {{batch_number}}. Reason: {{recall_reason}}. SAP QN: {{create-quality-notification.notification_id}}. Jira: {{create-recall-epic.key}}'
      - name: alert-quality-leadership
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.quality_team_id
          channel_id: $secrets.quality_alerts_channel_id
          text: 'RECALL INITIATED: {{material_number}} Batch {{batch_number}} | Class: {{recall_class}} | Reason: {{recall_reason}} | SAP QN: {{create-quality-notification.notification_id}} | Jira: {{create-recall-epic.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality-notifications
      path: /QualityNotification
      operations:
      - name: create-qn
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_account_upn/sendMail
      operations:
      - name: send-mail
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → batch-recall-initiation.yml

Monitors Apache Airflow DAG run status, logs failures to Datadog, updates the Snowflake data pipeline audit table, and opens a Jira incident when a critical DAG fails.

naftiko: '0.5'
info:
  label: Data Pipeline Monitoring
  description: Monitors Apache Airflow DAG run status, logs failures to Datadog, updates the Snowflake data pipeline audit table, and opens a Jira incident when a critical DAG fails.
  tags:
  - data-engineering
  - apache-airflow
  - datadog
  - snowflake
  - jira
  - observability
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: handle-dag-failure
      description: Given a failed Airflow DAG run ID, log the failure to Datadog, write an audit record to Snowflake, and open a Jira incident for the data engineering team.
      inputParameters:
      - name: dag_id
        in: body
        type: string
        description: The Airflow DAG identifier.
      - name: run_id
        in: body
        type: string
        description: The Airflow DAG run ID.
      - name: failure_reason
        in: body
        type: string
        description: Error message or reason for failure.
      - name: data_domain
        in: body
        type: string
        description: Business data domain (e.g., finance, supply_chain, hr).
      steps:
      - name: log-to-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'Airflow DAG Failed: {{dag_id}}'
          text: 'Run {{run_id}} failed. Reason: {{failure_reason}}'
          alert_type: error
          tags: dag:{{dag_id}},domain:{{data_domain}}
      - name: open-jira-incident
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Incident
          summary: 'DAG Failure: {{dag_id}} — {{run_id}}'
          description: 'DAG {{dag_id}} run {{run_id}} failed.

            Domain: {{data_domain}}

            Reason: {{failure_reason}}

            Datadog: {{log-to-datadog.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → data-pipeline-monitoring.yml

Retrieves a Salesforce account record by ID, returning account name, industry, annual revenue, and account owner for sales and customer operations.

naftiko: '0.5'
info:
  label: Salesforce Account Lookup
  description: Retrieves a Salesforce account record by ID, returning account name, industry, annual revenue, and account owner for sales and customer operations.
  tags:
  - sales
  - salesforce
  - crm
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up a Salesforce account by account ID. Returns name, industry, revenue, owner, and billing country.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: industry
        type: string
        mapping: $.Industry
      - name: annual_revenue
        type: string
        mapping: $.AnnualRevenue
      - name: owner
        type: string
        mapping: $.Owner.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-account-lookup.yml

Generates a Certificate of Analysis by pulling test results from SAP QM, formatting the document, uploading to SharePoint, and emailing it to the customer.

naftiko: '0.5'
info:
  label: Quality Certificate Generation
  description: Generates a Certificate of Analysis by pulling test results from SAP QM, formatting the document, uploading to SharePoint, and emailing it to the customer.
  tags:
  - quality
  - sap
  - sharepoint
  - microsoft-outlook
  - manufacturing
  - certification
capability:
  exposes:
  - type: mcp
    namespace: quality-certs
    port: 8080
    tools:
    - name: generate-coa
      description: Given a batch number and customer email, pull SAP QM results, upload COA to SharePoint, and email to customer.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The production batch number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: customer_email
        in: body
        type: string
        description: Customer email address for the COA.
      steps:
      - name: get-test-results
        type: call
        call: sap.get-batch-results
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: upload-coa
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.quality_site_id
          folder_path: /COA/{{material_number}}
          file_name: COA-{{batch_number}}.pdf
          content: '{{get-test-results.certificate_content}}'
      - name: email-customer
        type: call
        call: msgraph.send-mail
        with:
          to: '{{customer_email}}'
          subject: 3M Certificate of Analysis — {{material_number}} Batch {{batch_number}}
          body: Please find attached the Certificate of Analysis for material {{material_number}}, batch {{batch_number}}. All test parameters within specification.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_BATCH_RESULTS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batch-results
      path: /BatchInspectionResult(Batch='{{batch}}',Material='{{material}}')
      inputParameters:
      - name: batch
        in: path
      - name: material
        in: path
      operations:
      - name: get-batch-results
        method: GET
  - 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:{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_account_upn/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → quality-certificate-generation.yml

When R&D lab test results are available, records them in SAP QM, updates the Jira R&D tracker, and notifies the project scientist in Microsoft Teams.

naftiko: '0.5'
info:
  label: Lab Test Result Processing
  description: When R&D lab test results are available, records them in SAP QM, updates the Jira R&D tracker, and notifies the project scientist in Microsoft Teams.
  tags:
  - research
  - quality
  - sap
  - jira
  - microsoft-teams
  - lab-testing
capability:
  exposes:
  - type: mcp
    namespace: rd-lab
    port: 8080
    tools:
    - name: process-lab-results
      description: Given test results, material, and project info, log results in SAP QM, update Jira, and notify the project lead.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: Material number tested.
      - name: test_plan_id
        in: body
        type: string
        description: SAP QM test plan identifier.
      - name: result_status
        in: body
        type: string
        description: 'Overall result: pass, fail, or conditional.'
      - name: jira_key
        in: body
        type: string
        description: The Jira R&D project issue key.
      - name: scientist_upn
        in: body
        type: string
        description: UPN of the lead scientist.
      steps:
      - name: record-results
        type: call
        call: sap.record-inspection-results
        with:
          inspection_plan: '{{test_plan_id}}'
          material: '{{material_number}}'
          result_status: '{{result_status}}'
      - name: update-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{jira_key}}'
          body: 'Lab test results recorded. Material: {{material_number}} | Status: {{result_status}} | SAP Inspection: {{record-results.inspection_lot}}'
      - name: notify-scientist
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{scientist_upn}}'
          text: 'Lab results for {{material_number}} are in: {{result_status}} | SAP: {{record-results.inspection_lot}} | Jira: {{jira_key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_RESULT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspection-results
      path: /InspectionResult
      operations:
      - name: record-inspection-results
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → lab-test-result-processing.yml

Aggregates 3M content performance from LinkedIn and Meta, pushes the combined metrics to HubSpot campaign records, and posts a weekly digest to the social media Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Social Media Performance Digest
  description: Aggregates 3M content performance from LinkedIn and Meta, pushes the combined metrics to HubSpot campaign records, and posts a weekly digest to the social media Microsoft Teams channel.
  tags:
  - marketing
  - social-media
  - linkedin
  - meta
  - hubspot
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: social-media
    port: 8080
    tools:
    - name: digest-social-performance
      description: Pull post engagement from LinkedIn and Meta for a given campaign ID, update HubSpot, and post a digest to Teams.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Campaign identifier shared across LinkedIn, Meta, and HubSpot.
      - name: date_range
        in: body
        type: string
        description: Reporting date range in YYYY-MM-DD/YYYY-MM-DD format.
      steps:
      - name: get-linkedin-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
          date_range: '{{date_range}}'
      - name: get-meta-stats
        type: call
        call: meta.get-campaign-insights
        with:
          campaign_id: '{{campaign_id}}'
          date_preset: '{{date_range}}'
      - name: update-hubspot-campaign
        type: call
        call: hubspot.update-campaign
        with:
          campaign_id: '{{campaign_id}}'
          linkedin_impressions: '{{get-linkedin-stats.impressions}}'
          linkedin_clicks: '{{get-linkedin-stats.clicks}}'
          meta_reach: '{{get-meta-stats.reach}}'
          meta_engagement: '{{get-meta-stats.engagement}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          recipient_upn: social-media@3m.com
          text: 'Social Digest ({{date_range}}): LinkedIn — {{get-linkedin-stats.impressions}} impressions, {{get-linkedin-stats.clicks}} clicks | Meta — {{get-meta-stats.reach}} reach, {{get-meta-stats.engagement}} engagements | HubSpot updated.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalytics
      inputParameters:
      - name: campaign_id
        in: query
      - name: date_range
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: campaign-insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      - name: date_preset
        in: query
      operations:
      - name: get-campaign-insights
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - 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
Open in Framework → View in Fleet → social-media-performance-digest.yml

Creates a hazardous waste shipping manifest by pulling waste profile data from SAP EHS, generating the manifest in ServiceNow, and notifying the plant EHS coordinator in Teams.

naftiko: '0.5'
info:
  label: Hazardous Waste Manifest Creation
  description: Creates a hazardous waste shipping manifest by pulling waste profile data from SAP EHS, generating the manifest in ServiceNow, and notifying the plant EHS coordinator in Teams.
  tags:
  - ehs
  - safety
  - sap
  - servicenow
  - microsoft-teams
  - waste-management
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: waste-management
    port: 8080
    tools:
    - name: create-waste-manifest
      description: Given waste stream details, pull SAP EHS data, create ServiceNow manifest, and notify EHS coordinator.
      inputParameters:
      - name: waste_stream_id
        in: body
        type: string
        description: SAP EHS waste stream identifier.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: quantity_kg
        in: body
        type: string
        description: Quantity of waste in kilograms.
      - name: disposal_facility
        in: body
        type: string
        description: Name of the disposal facility.
      steps:
      - name: get-waste-profile
        type: call
        call: sap.get-waste-profile
        with:
          waste_stream: '{{waste_stream_id}}'
          plant: '{{plant_code}}'
      - name: create-manifest
        type: call
        call: servicenow.create-manifest
        with:
          short_description: 'Hazwaste Manifest: {{waste_stream_id}} from {{plant_code}}'
          waste_class: '{{get-waste-profile.waste_class}}'
          un_number: '{{get-waste-profile.un_number}}'
          quantity: '{{quantity_kg}}'
          facility: '{{disposal_facility}}'
      - name: notify-ehs
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ehs_team_id
          channel_id: $secrets.ehs_waste_channel_id
          text: 'Hazwaste Manifest Created: {{waste_stream_id}} | {{quantity_kg}} kg | Class: {{get-waste-profile.waste_class}} | Facility: {{disposal_facility}} | Manifest: {{create-manifest.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/EHS_WASTE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: waste-profiles
      path: /WasteProfile(WasteStream='{{waste_stream}}',Plant='{{plant}}')
      inputParameters:
      - name: waste_stream
        in: path
      - name: plant
        in: path
      operations:
      - name: get-waste-profile
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: manifests
      path: /table/sn_ehs_manifest
      operations:
      - name: create-manifest
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → hazardous-waste-manifest-creation.yml

Monitors scrap rates by querying SAP production data, analyzing trends in Snowflake, and alerting the plant manager in Teams when thresholds are exceeded.

naftiko: '0.5'
info:
  label: Scrap Rate Monitoring
  description: Monitors scrap rates by querying SAP production data, analyzing trends in Snowflake, and alerting the plant manager in Teams when thresholds are exceeded.
  tags:
  - manufacturing
  - quality
  - sap
  - snowflake
  - microsoft-teams
  - production
capability:
  exposes:
  - type: mcp
    namespace: production-monitoring
    port: 8080
    tools:
    - name: check-scrap-rate
      description: Given a production line and period, check scrap rate against threshold and alert if exceeded.
      inputParameters:
      - name: production_line
        in: body
        type: string
        description: The production line identifier.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., 2026-03).
      - name: threshold_pct
        in: body
        type: string
        description: Scrap rate threshold percentage.
      steps:
      - name: get-scrap-data
        type: call
        call: sap.get-production-scrap
        with:
          line: '{{production_line}}'
          plant: '{{plant_code}}'
          period: '{{period}}'
      - name: analyze-trend
        type: call
        call: snowflake.run-query
        with:
          statement: CALL MANUFACTURING.ANALYZE_SCRAP_TREND('{{production_line}}', '{{plant_code}}', '{{period}}')
          warehouse: MANUFACTURING_WH
      - name: alert-plant-manager
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.plant_ops_team_id
          channel_id: $secrets.plant_ops_channel_id
          text: 'Scrap Rate Report: Line {{production_line}} at {{plant_code}} ({{period}}) | Current: {{get-scrap-data.scrap_rate}}% | Threshold: {{threshold_pct}}% | Trend: {{analyze-trend.trend_direction}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PP_SCRAP_ANALYSIS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: scrap-data
      path: /ProductionScrap
      inputParameters:
      - name: line
        in: query
      - name: plant
        in: query
      - name: period
        in: query
      operations:
      - name: get-production-scrap
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → scrap-rate-monitoring.yml

Retrieves the bill of materials for a finished good from SAP S/4HANA, returning component list, quantities, and assembly details for manufacturing engineering.

naftiko: '0.5'
info:
  label: SAP Bill of Materials Lookup
  description: Retrieves the bill of materials for a finished good from SAP S/4HANA, returning component list, quantities, and assembly details for manufacturing engineering.
  tags:
  - manufacturing
  - bom
  - sap
  - sap-s4hana
  - engineering
  - materials
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-engineering
    port: 8080
    tools:
    - name: get-bom
      description: Look up a SAP bill of materials by material number and plant. Returns component list with quantities and units.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP finished good material number.
      - name: plant_code
        in: body
        type: string
        description: The 3M manufacturing plant code.
      call: sap.get-bom
      with:
        material_number: '{{material_number}}'
        plant: '{{plant_code}}'
      outputParameters:
      - name: bom_number
        type: string
        mapping: $.d.BillOfMaterial
      - name: components
        type: string
        mapping: $.d.to_BillOfMaterialItem.results
      - name: base_quantity
        type: string
        mapping: $.d.BOMHeaderBaseQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /MaterialBOM(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-bom
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → sap-bill-of-materials-lookup.yml

When Workday creates a new employee, provisions their Microsoft 365 account, creates a personal SharePoint site, and raises a ServiceNow hardware provisioning task.

naftiko: '0.5'
info:
  label: Workspace Provisioning
  description: When Workday creates a new employee, provisions their Microsoft 365 account, creates a personal SharePoint site, and raises a ServiceNow hardware provisioning task.
  tags:
  - hr
  - it
  - microsoft-365
  - sharepoint
  - servicenow
  - workday
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: workspace-provisioning
    port: 8080
    tools:
    - name: provision-workspace
      description: Given a new Workday employee ID, create their Microsoft 365 account, SharePoint personal site, and a ServiceNow hardware request.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: hardware_type
        in: body
        type: string
        description: Required hardware type (e.g., laptop_windows, laptop_mac, mobile).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-m365-account
        type: call
        call: msgraph.create-user
        with:
          display_name: '{{get-employee.full_name}}'
          upn: '{{get-employee.work_email}}'
          department: '{{get-employee.department}}'
          job_title: '{{get-employee.job_title}}'
      - name: create-sharepoint-site
        type: call
        call: sharepoint.create-site
        with:
          owner_upn: '{{get-employee.work_email}}'
          site_name: '{{get-employee.full_name}}'
      - name: request-hardware
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Hardware request: {{hardware_type}} for {{get-employee.full_name}}'
          category: hardware
          requested_for: '{{get-employee.work_email}}'
  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: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
    - name: sites
      path: /sites
      operations:
      - name: create-site
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: sites
      path: /
      operations:
      - name: create-site
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
Open in Framework → View in Fleet → workspace-provisioning.yml

Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation ticket, and sending an acknowledgment email to the customer through Microsoft Graph.

naftiko: '0.5'
info:
  label: Customer Complaint Processing
  description: Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation ticket, and sending an acknowledgment email to the customer through Microsoft Graph.
  tags:
  - quality
  - customer-service
  - salesforce
  - sap
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: customer-quality
    port: 8080
    tools:
    - name: process-complaint
      description: Given a Salesforce case ID, create a SAP quality notification, open a Jira ticket, and send a customer acknowledgment email.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID for the complaint.
      - name: product_number
        in: body
        type: string
        description: The product material number.
      - name: complaint_description
        in: body
        type: string
        description: Description of the customer complaint.
      - name: customer_email
        in: body
        type: string
        description: Customer email for acknowledgment.
      steps:
      - name: create-sap-qn
        type: call
        call: sap.create-quality-notification
        with:
          material: '{{product_number}}'
          notification_type: Q3
          short_text: 'Customer Complaint: {{product_number}}'
          long_text: '{{complaint_description}} | Salesforce Case: {{case_id}}'
      - name: create-jira-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: QA
          issuetype: Task
          summary: 'Investigate complaint: {{product_number}} — Case {{case_id}}'
          description: '{{complaint_description}} | SAP QN: {{create-sap-qn.notification_id}}'
      - name: send-acknowledgment
        type: call
        call: msgraph.send-mail
        with:
          to: '{{customer_email}}'
          subject: 3M — Your complaint has been received (Case {{case_id}})
          body: 'Thank you for contacting 3M. Your complaint regarding product {{product_number}} has been logged and assigned for investigation. Reference: {{create-sap-qn.notification_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality-notifications
      path: /QualityNotification
      operations:
      - name: create-quality-notification
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_account_upn/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → customer-complaint-processing.yml

When a Snowflake data quality check fails (row count anomaly, null threshold breach, or schema drift), logs the failure to Datadog, opens a Jira data quality ticket, and notifies the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Alert
  description: When a Snowflake data quality check fails (row count anomaly, null threshold breach, or schema drift), logs the failure to Datadog, opens a Jira data quality ticket, and notifies the data engineering team in Microsoft Teams.
  tags:
  - data-quality
  - snowflake
  - datadog
  - jira
  - microsoft-teams
  - data-engineering
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: handle-data-quality-failure
      description: Given a Snowflake table and data quality check failure type, log to Datadog, open a Jira ticket, and notify the data team in Teams.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully-qualified Snowflake table name (database.schema.table).
      - name: check_type
        in: body
        type: string
        description: Type of check that failed (row_count, null_threshold, schema_drift, duplicate_key).
      - name: expected_value
        in: body
        type: string
        description: Expected value or threshold.
      - name: actual_value
        in: body
        type: string
        description: Actual observed value.
      - name: data_domain
        in: body
        type: string
        description: Business data domain (finance, hr, supply_chain, etc.).
      steps:
      - name: log-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'Data Quality Failure: {{check_type}} on {{table_name}}'
          text: 'Expected: {{expected_value}} | Actual: {{actual_value}} | Domain: {{data_domain}}'
          alert_type: error
          tags: data_quality:{{check_type}},domain:{{data_domain}}
      - name: open-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data Quality: {{check_type}} failure on {{table_name}}'
          description: 'Table: {{table_name}}

            Check: {{check_type}}

            Expected: {{expected_value}}

            Actual: {{actual_value}}

            Domain: {{data_domain}}

            Datadog: {{log-datadog.url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: data-engineering@3m.com
          text: 'Data Quality Failure: {{check_type}} on {{table_name}} | Expected: {{expected_value}} | Actual: {{actual_value}} | Jira: {{open-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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
Open in Framework → View in Fleet → snowflake-data-quality-alert.yml

Updates distributor pricing by pulling new price conditions from SAP, generating a price list in Snowflake, and distributing it via email to the channel sales team and distributor contacts.

naftiko: '0.5'
info:
  label: Distributor Price List Update
  description: Updates distributor pricing by pulling new price conditions from SAP, generating a price list in Snowflake, and distributing it via email to the channel sales team and distributor contacts.
  tags:
  - sales
  - pricing
  - sap
  - snowflake
  - microsoft-outlook
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: pricing
    port: 8080
    tools:
    - name: update-price-list
      description: Given a distributor ID and effective date, pull SAP pricing, generate price list, and distribute via email.
      inputParameters:
      - name: distributor_id
        in: body
        type: string
        description: SAP customer number of the distributor.
      - name: effective_date
        in: body
        type: string
        description: Effective date for new pricing.
      - name: distributor_email
        in: body
        type: string
        description: Distributor contact email.
      steps:
      - name: get-price-conditions
        type: call
        call: sap.get-pricing
        with:
          customer: '{{distributor_id}}'
          valid_from: '{{effective_date}}'
      - name: generate-price-list
        type: call
        call: snowflake.run-query
        with:
          statement: CALL SALES.GENERATE_PRICE_LIST('{{distributor_id}}', '{{effective_date}}')
          warehouse: SALES_WH
      - name: send-price-list
        type: call
        call: msgraph.send-mail
        with:
          to: '{{distributor_email}}'
          subject: 3M Updated Price List — Effective {{effective_date}}
          body: 'Please find the updated price list effective {{effective_date}}. Total items: {{generate-price-list.item_count}}. Contact your 3M representative for questions.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/SD_PRICING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing
      path: /PriceCondition
      inputParameters:
      - name: customer
        in: query
      - name: valid_from
        in: query
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://3m.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_account_upn/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → distributor-price-list-update.yml

When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.

naftiko: '0.5'
info:
  label: Procurement Approval Pipeline
  description: When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.
  tags:
  - procurement
  - ariba
  - sap-ariba
  - workday
  - microsoft-teams
  - approval
  - spend-management
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: route-requisition-approval
      description: Given an Ariba requisition ID and requestor employee ID, check the requisition amount, resolve the approver from Workday, and notify both parties in Microsoft Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition identifier.
      - name: requestor_employee_id
        in: body
        type: string
        description: The Workday employee ID of the requestor.
      - name: spend_amount
        in: body
        type: number
        description: The total spend amount on the requisition.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_employee_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-requestor.manager_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-manager.work_email}}'
          text: 'Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for ${{spend_amount}}. Vendor: {{get-requisition.vendor_name}}. Please review: {{get-requisition.approval_url}}'
      - name: notify-requestor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-requestor.work_email}}'
          text: Your requisition {{requisition_id}} (${{spend_amount}}) has been routed to {{get-manager.full_name}} for approval.
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: 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
Open in Framework → View in Fleet → procurement-approval-pipeline.yml

Triggers a Kubernetes rolling deployment from a GitHub Actions release, monitors rollout health via Datadog, and posts the deployment result to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Kubernetes Deployment Rollout
  description: Triggers a Kubernetes rolling deployment from a GitHub Actions release, monitors rollout health via Datadog, and posts the deployment result to the engineering Microsoft Teams channel.
  tags:
  - devops
  - kubernetes
  - github-actions
  - datadog
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: k8s-deploy
    port: 8080
    tools:
    - name: rollout-deployment
      description: Given a GitHub release tag and Kubernetes namespace, trigger a rolling deployment and monitor health via Datadog. Post the result to Teams.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: release_tag
        in: body
        type: string
        description: The Git tag to deploy (e.g., v2.4.1).
      - name: k8s_namespace
        in: body
        type: string
        description: Kubernetes namespace to deploy into.
      - name: service_name
        in: body
        type: string
        description: Datadog service name for health monitoring.
      steps:
      - name: trigger-workflow
        type: call
        call: github.create-workflow-dispatch
        with:
          repository: '{{repository}}'
          workflow_id: deploy.yml
          ref: '{{release_tag}}'
          namespace: '{{k8s_namespace}}'
      - name: create-deployment-marker
        type: call
        call: datadog.create-event
        with:
          title: 'Deployment: {{repository}} {{release_tag}} → {{k8s_namespace}}'
          text: 'Rolling deployment triggered. Workflow: {{trigger-workflow.run_id}}'
          alert_type: info
          tags: service:{{service_name}},env:{{k8s_namespace}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: engineering-deploys@3m.com
          text: 'Deployment: {{repository}} {{release_tag}} → {{k8s_namespace}} | Run: {{trigger-workflow.run_id}} | Datadog: {{create-deployment-marker.url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      path: /repos/{{repository}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: repository
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: create-workflow-dispatch
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kubernetes-deployment-rollout.yml

When a Salesforce opportunity closes as won, enrolls the customer in a HubSpot onboarding workflow, provisions a SharePoint customer portal, and notifies the customer success team in Teams.

naftiko: '0.5'
info:
  label: Customer Onboarding Provisioning
  description: When a Salesforce opportunity closes as won, enrolls the customer in a HubSpot onboarding workflow, provisions a SharePoint customer portal, and notifies the customer success team in Teams.
  tags:
  - sales
  - customer-success
  - salesforce
  - hubspot
  - sharepoint
  - microsoft-teams
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: provision-customer-onboarding
      description: Given a closed-won Salesforce opportunity ID, enroll in HubSpot onboarding, provision a SharePoint portal, and notify the CSM in Teams.
      inputParameters:
      - name: salesforce_opportunity_id
        in: body
        type: string
        description: The closed-won Salesforce opportunity ID.
      - name: Cm_upn
        in: body
        type: string
        description: Microsoft UPN of the assigned customer success manager.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-cx.get-opportunity
        with:
          opportunity_id: '{{salesforce_opportunity_id}}'
      - name: enroll-hubspot
        type: call
        call: hubspot-cx.enroll-workflow
        with:
          contact_email: '{{get-opportunity.primary_contact_email}}'
          workflow_name: enterprise-onboarding
      - name: create-portal
        type: call
        call: sharepoint-cx.create-folder
        with:
          site_id: customer_portals_site
          folder_path: Customers/{{get-opportunity.account_name}}
      - name: notify-csm
        type: call
        call: msteams-cx.send-message
        with:
          recipient_upn: '{{csm_upn}}'
          text: 'New Customer: {{get-opportunity.account_name}} | Value: {{get-opportunity.amount}} | Portal: {{create-portal.url}} | HubSpot enrolled.'
  consumes:
  - type: http
    namespace: salesforce-cx
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: hubspot-cx
    baseUri: https://api.hubapi.com/automation/v4
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: workflow-enrollments
      path: /flows/enrollments
      operations:
      - name: enroll-workflow
        method: POST
  - type: http
    namespace: sharepoint-cx
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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-cx
    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
Open in Framework → View in Fleet → customer-onboarding-provisioning.yml

Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.

naftiko: '0.5'
info:
  label: Expense Report Processing
  description: Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.
  tags:
  - finance
  - expense
  - concur
  - sap-concur
  - workday
  - servicenow
  - policy-compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-expense
    port: 8080
    tools:
    - name: review-expense-report
      description: Given a Concur expense report ID and employee ID, fetch the report details, validate the cost center against Workday, and flag any policy violations to ServiceNow.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the expense submitter.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: open-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}'
          description: 'Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}.'
          assigned_group: Finance_Audit
          category: expense_review
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → expense-report-processing.yml

Files customs declarations for international shipments by pulling export data from SAP GTS, creating a compliance record in ServiceNow, and notifying the trade compliance team in Teams.

naftiko: '0.5'
info:
  label: Customs Declaration Filing
  description: Files customs declarations for international shipments by pulling export data from SAP GTS, creating a compliance record in ServiceNow, and notifying the trade compliance team in Teams.
  tags:
  - logistics
  - trade-compliance
  - sap
  - servicenow
  - microsoft-teams
  - customs
capability:
  exposes:
  - type: mcp
    namespace: trade-compliance
    port: 8080
    tools:
    - name: file-customs-declaration
      description: Given a shipment reference and destination country, pull SAP GTS data, create compliance record, and notify trade team.
      inputParameters:
      - name: shipment_reference
        in: body
        type: string
        description: SAP shipment document number.
      - name: destination_country
        in: body
        type: string
        description: ISO country code of destination.
      - name: incoterms
        in: body
        type: string
        description: Incoterms code (e.g., FOB, CIF, DDP).
      steps:
      - name: get-export-data
        type: call
        call: sap.get-gts-declaration
        with:
          shipment: '{{shipment_reference}}'
          country: '{{destination_country}}'
      - name: create-compliance-record
        type: call
        call: servicenow.create-compliance-record
        with:
          short_description: 'Customs Declaration: {{shipment_reference}} to {{destination_country}}'
          classification: '{{get-export-data.tariff_code}}'
          value: '{{get-export-data.declared_value}}'
          incoterms: '{{incoterms}}'
      - name: notify-trade-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.trade_team_id
          channel_id: $secrets.trade_channel_id
          text: 'Customs Declaration Filed: {{shipment_reference}} to {{destination_country}} | Tariff: {{get-export-data.tariff_code}} | Value: {{get-export-data.declared_value}} | ServiceNow: {{create-compliance-record.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/GTS_DECLARATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: declarations
      path: /CustomsDeclaration(Shipment='{{shipment}}',Country='{{country}}')
      inputParameters:
      - name: shipment
        in: path
      - name: country
        in: path
      operations:
      - name: get-gts-declaration
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance
      path: /table/sn_compliance_record
      operations:
      - name: create-compliance-record
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → customs-declaration-filing.yml

Retrieves a procurement contract from SAP Ariba by contract ID, returning status, expiry date, supplier, and contract value for strategic sourcing.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Lookup
  description: Retrieves a procurement contract from SAP Ariba by contract ID, returning status, expiry date, supplier, and contract value for strategic sourcing.
  tags:
  - procurement
  - sap-ariba
  - contract-management
  - sourcing
capability:
  exposes:
  - type: mcp
    namespace: sourcing
    port: 8080
    tools:
    - name: get-contract
      description: Look up an SAP Ariba contract by contract ID. Returns status, supplier, value, and expiry date.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The SAP Ariba contract ID.
      call: ariba.get-contract
      with:
        contract_id: '{{contract_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: supplier
        type: string
        mapping: $.Supplier.Name
      - name: contract_value
        type: string
        mapping: $.Amount.Amount
      - name: expiry_date
        type: string
        mapping: $.ExpirationDate
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-compliance/v1/prod
    authentication:
      type: bearer
      token: $secrets.ariba_token
    inputParameters:
    - name: apiKey
      in: header
      value: $secrets.ariba_api_key
    resources:
    - name: contracts
      path: /contracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → sap-ariba-contract-lookup.yml

Creates a preventive maintenance work order in SAP Plant Maintenance, assigns a technician in ServiceNow, and sends a calendar invite via Microsoft Graph for scheduled maintenance windows.

naftiko: '0.5'
info:
  label: Preventive Maintenance Scheduling
  description: Creates a preventive maintenance work order in SAP Plant Maintenance, assigns a technician in ServiceNow, and sends a calendar invite via Microsoft Graph for scheduled maintenance windows.
  tags:
  - maintenance
  - sap
  - servicenow
  - microsoft-outlook
  - manufacturing
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: maintenance-scheduling
    port: 8080
    tools:
    - name: schedule-preventive-maintenance
      description: Given equipment ID, maintenance type, and scheduled date, create SAP PM order, assign in ServiceNow, and send calendar invite.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: maintenance_type
        in: body
        type: string
        description: Type of maintenance (e.g., calibration, inspection, overhaul).
      - name: scheduled_date
        in: body
        type: string
        description: Scheduled date for maintenance.
      - name: technician_upn
        in: body
        type: string
        description: UPN of the assigned maintenance technician.
      steps:
      - name: create-pm-order
        type: call
        call: sap.create-pm-order
        with:
          equipment: '{{equipment_id}}'
          plant: '{{plant_code}}'
          order_type: PM01
          short_text: 'PM: {{maintenance_type}} — {{equipment_id}}'
          scheduled_start: '{{scheduled_date}}'
      - name: create-snow-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'PM: {{maintenance_type}} for {{equipment_id}}'
          assigned_to: '{{technician_upn}}'
          scheduled_date: '{{scheduled_date}}'
          reference: '{{create-pm-order.order_number}}'
      - name: send-calendar-invite
        type: call
        call: msgraph.create-event
        with:
          attendee: '{{technician_upn}}'
          subject: 'Preventive Maintenance: {{maintenance_type}} — {{equipment_id}}'
          start: '{{scheduled_date}}T08:00:00'
          end: '{{scheduled_date}}T12:00:00'
          body: 'SAP Order: {{create-pm-order.order_number}} | Plant: {{plant_code}} | Equipment: {{equipment_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pm-orders
      path: /MaintenanceOrder
      operations:
      - name: create-pm-order
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{attendee}}/events
      inputParameters:
      - name: attendee
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → preventive-maintenance-scheduling.yml

When a Salesforce case breaches SLA, escalates to a ServiceNow priority incident, notifies the customer success manager in Microsoft Teams, and logs the escalation in Confluence.

naftiko: '0.5'
info:
  label: Customer Support Ticket Escalation
  description: When a Salesforce case breaches SLA, escalates to a ServiceNow priority incident, notifies the customer success manager in Microsoft Teams, and logs the escalation in Confluence.
  tags:
  - customer-support
  - crm
  - salesforce
  - servicenow
  - confluence
  - microsoft-teams
  - sla
capability:
  exposes:
  - type: mcp
    namespace: customer-support
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a Salesforce case ID that has breached SLA, open a ServiceNow priority incident, notify the CSM in Teams, and document in Confluence.
      inputParameters:
      - name: salesforce_case_id
        in: body
        type: string
        description: The Salesforce case record ID.
      - name: Cm_upn
        in: body
        type: string
        description: Microsoft UPN of the customer success manager.
      - name: escalation_reason
        in: body
        type: string
        description: Description of why SLA was breached.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{salesforce_case_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SLA Breach Escalation: {{get-case.subject}}'
          description: 'Salesforce Case {{salesforce_case_id}} breached SLA. Customer: {{get-case.account_name}}. Reason: {{escalation_reason}}'
          urgency: '2'
          impact: '2'
          category: customer_escalation
      - name: notify-csm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{csm_upn}}'
          text: 'SLA Breach: Case {{salesforce_case_id}} — {{get-case.subject}} | Customer: {{get-case.account_name}} | ServiceNow: {{create-incident.number}} | Reason: {{escalation_reason}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-support-ticket-escalation.yml

Monitors MuleSoft API Manager for failed flows, correlates with Datadog APM traces, opens a ServiceNow integration incident, and notifies the integration team in Microsoft Teams.

naftiko: '0.5'
info:
  label: MuleSoft Integration Health Monitor
  description: Monitors MuleSoft API Manager for failed flows, correlates with Datadog APM traces, opens a ServiceNow integration incident, and notifies the integration team in Microsoft Teams.
  tags:
  - integration
  - mulesoft
  - datadog
  - servicenow
  - microsoft-teams
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: integration-ops
    port: 8080
    tools:
    - name: handle-integration-failure
      description: Given a MuleSoft flow failure event, correlate with Datadog traces, open a ServiceNow incident, and alert the integration team in Teams.
      inputParameters:
      - name: flow_name
        in: body
        type: string
        description: The name of the failed MuleSoft flow.
      - name: environment
        in: body
        type: string
        description: MuleSoft environment (dev, staging, prod).
      - name: error_message
        in: body
        type: string
        description: Error message from the failed flow.
      - name: correlation_id
        in: body
        type: string
        description: MuleSoft correlation ID for trace lookup.
      steps:
      - name: log-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'MuleSoft Flow Failure: {{flow_name}} ({{environment}})'
          text: 'Error: {{error_message}} | Correlation: {{correlation_id}}'
          alert_type: error
          tags: integration:mulesoft,flow:{{flow_name}},env:{{environment}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Integration Failure: {{flow_name}} in {{environment}}'
          description: 'MuleSoft flow {{flow_name}} failed in {{environment}}.

            Error: {{error_message}}

            Correlation ID: {{correlation_id}}

            Datadog: {{log-datadog.url}}'
          category: integration
          urgency: '2'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: integration-ops@3m.com
          text: 'MuleSoft Failure: {{flow_name}} ({{environment}}) | Error: {{error_message}} | ServiceNow: {{create-incident.number}} | Datadog: {{log-datadog.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mulesoft-integration-health-monitor.yml

Tracks resolution of internal audit findings by creating corrective actions in ServiceNow, assigning owners in Jira, and reporting status to the audit committee in Teams.

naftiko: '0.5'
info:
  label: Plant Audit Finding Resolution
  description: Tracks resolution of internal audit findings by creating corrective actions in ServiceNow, assigning owners in Jira, and reporting status to the audit committee in Teams.
  tags:
  - audit
  - compliance
  - servicenow
  - jira
  - microsoft-teams
  - quality
capability:
  exposes:
  - type: mcp
    namespace: audit-management
    port: 8080
    tools:
    - name: resolve-audit-finding
      description: Given an audit finding, create corrective action in ServiceNow, assign in Jira, and notify audit committee.
      inputParameters:
      - name: finding_id
        in: body
        type: string
        description: The audit finding reference number.
      - name: finding_description
        in: body
        type: string
        description: Description of the audit finding.
      - name: severity
        in: body
        type: string
        description: 'Finding severity: minor, major, critical.'
      - name: owner_upn
        in: body
        type: string
        description: UPN of the corrective action owner.
      - name: due_date
        in: body
        type: string
        description: Due date for resolution.
      steps:
      - name: create-capa
        type: call
        call: servicenow.create-capa
        with:
          short_description: 'Audit Finding {{finding_id}}: {{finding_description}}'
          severity: '{{severity}}'
          assigned_to: '{{owner_upn}}'
          due_date: '{{due_date}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project_key: AUDIT
          issuetype: Task
          summary: 'CAPA: {{finding_id}} — {{finding_description}}'
          description: 'Severity: {{severity}} | Due: {{due_date}} | ServiceNow CAPA: {{create-capa.number}}'
          assignee: '{{owner_upn}}'
      - name: notify-audit-committee
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.audit_team_id
          channel_id: $secrets.audit_channel_id
          text: 'Audit Finding {{finding_id}} ({{severity}}): {{finding_description}} | Owner: {{owner_upn}} | Due: {{due_date}} | CAPA: {{create-capa.number}} | Jira: {{create-jira-task.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: capa
      path: /table/sn_quality_capa
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → plant-audit-finding-resolution.yml

When a product defect is reported from Salesforce field service, creates a Jira defect ticket, logs a SAP quality notification, and opens a ServiceNow change request for the engineering team.

naftiko: '0.5'
info:
  label: Product Defect Tracking
  description: When a product defect is reported from Salesforce field service, creates a Jira defect ticket, logs a SAP quality notification, and opens a ServiceNow change request for the engineering team.
  tags:
  - quality
  - product
  - salesforce
  - jira
  - sap
  - servicenow
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: quality-management
    port: 8080
    tools:
    - name: report-product-defect
      description: Given a Salesforce field service case ID and product number, open a Jira defect, log a SAP quality notification, and create a ServiceNow change for engineering review.
      inputParameters:
      - name: salesforce_case_id
        in: body
        type: string
        description: The Salesforce field service case ID.
      - name: product_number
        in: body
        type: string
        description: The SAP material/product number with the defect.
      - name: defect_description
        in: body
        type: string
        description: Description of the product defect.
      - name: batch_number
        in: body
        type: string
        description: The production batch number if known.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{salesforce_case_id}}'
      - name: create-jira-defect
        type: call
        call: jira.create-issue
        with:
          project_key: QA
          issuetype: Bug
          summary: 'Product Defect: {{product_number}} — {{defect_description}}'
          description: 'Customer: {{get-case.account_name}} | Batch: {{batch_number}} | Case: {{salesforce_case_id}} | Defect: {{defect_description}}'
      - name: log-sap-qn
        type: call
        call: sap.create-quality-notification
        with:
          material: '{{product_number}}'
          batch: '{{batch_number}}'
          short_text: 'Defect: {{defect_description}}'
          notification_type: Q1
      - name: create-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Engineering review: product defect {{product_number}}'
          description: 'Defect in {{product_number}} (batch {{batch_number}}). Jira: {{create-jira-defect.key}} | SAP QN: {{log-sap-qn.notification_id}}'
          category: product_quality
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality-notifications
      path: /QualityNotification
      operations:
      - name: create-quality-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
Open in Framework → View in Fleet → product-defect-tracking.yml

Retrieves vendor master data from SAP S/4HANA by vendor number, returning company name, payment terms, currency, and purchasing organization details.

naftiko: '0.5'
info:
  label: SAP Vendor Master Lookup
  description: Retrieves vendor master data from SAP S/4HANA by vendor number, returning company name, payment terms, currency, and purchasing organization details.
  tags:
  - procurement
  - vendor
  - sap
  - sap-s4hana
  - master-data
capability:
  exposes:
  - type: mcp
    namespace: vendor-management
    port: 8080
    tools:
    - name: get-vendor
      description: Look up SAP vendor master data by vendor number. Returns company name, payment terms, and purchasing organization.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor account number.
      call: sap.get-vendor
      with:
        vendor_number: '{{vendor_number}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.d.SupplierName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → sap-vendor-master-lookup.yml

Prepares for an OSHA compliance audit by pulling safety incident records from ServiceNow, gathering training completion data from Workday, and compiling an audit readiness report in SharePoint.

naftiko: '0.5'
info:
  label: OSHA Compliance Audit Preparation
  description: Prepares for an OSHA compliance audit by pulling safety incident records from ServiceNow, gathering training completion data from Workday, and compiling an audit readiness report in SharePoint.
  tags:
  - safety
  - compliance
  - osha
  - servicenow
  - workday
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: prepare-osha-audit
      description: Given a plant code and audit date, pull incident records, training data, and compile an audit report.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code being audited.
      - name: audit_date
        in: body
        type: string
        description: Scheduled audit date.
      - name: audit_scope
        in: body
        type: string
        description: Scope of the OSHA audit (e.g., general_safety, chemical_handling, lockout_tagout).
      steps:
      - name: get-incident-records
        type: call
        call: servicenow.get-ehs-cases
        with:
          location: '{{plant_code}}'
          date_range: last_12_months
          category: '{{audit_scope}}'
      - name: get-training-compliance
        type: call
        call: workday.get-training-completions
        with:
          location: '{{plant_code}}'
          training_category: '{{audit_scope}}'
      - name: upload-audit-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.ehs_site_id
          folder_path: /Audits/OSHA/{{plant_code}}
          file_name: OSHA-Audit-Prep-{{plant_code}}-{{audit_date}}.json
          content: 'Incidents: {{get-incident-records.total_count}} | Training Compliance: {{get-training-compliance.completion_rate}}%'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: ehs-cases
      path: /table/sn_ehs_case
      inputParameters:
      - name: location
        in: query
      - name: date_range
        in: query
      - name: category
        in: query
      operations:
      - name: get-ehs-cases
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/3m
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /trainingCompletions
      inputParameters:
      - name: location
        in: query
      - name: training_category
        in: query
      operations:
      - name: get-training-completions
        method: GET
  - 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:{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → osha-compliance-audit-preparation.yml

Triggers an Azure Databricks ML training job, tracks the experiment in the model registry, logs metrics to Datadog, and posts training results to the data science Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ML Model Training Pipeline
  description: Triggers an Azure Databricks ML training job, tracks the experiment in the model registry, logs metrics to Datadog, and posts training results to the data science Microsoft Teams channel.
  tags:
  - machine-learning
  - azure-databricks
  - datadog
  - microsoft-teams
  - data-science
  - mlops
capability:
  exposes:
  - type: mcp
    namespace: mlops
    port: 8080
    tools:
    - name: run-training-job
      description: Given a Databricks job ID and model name, trigger training, log metrics to Datadog, and post results to Teams.
      inputParameters:
      - name: databricks_job_id
        in: body
        type: string
        description: The Azure Databricks job ID for the training pipeline.
      - name: model_name
        in: body
        type: string
        description: The registered model name in Databricks MLflow.
      - name: experiment_name
        in: body
        type: string
        description: The MLflow experiment name.
      steps:
      - name: trigger-job
        type: call
        call: databricks.run-job
        with:
          job_id: '{{databricks_job_id}}'
      - name: log-metrics
        type: call
        call: datadog.create-event
        with:
          title: 'ML Training Started: {{model_name}}'
          text: 'Job {{databricks_job_id}} | Experiment: {{experiment_name}} | Run: {{trigger-job.run_id}}'
          alert_type: info
          tags: ml_model:{{model_name}},experiment:{{experiment_name}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: data-science@3m.com
          text: 'ML Training Job Started: {{model_name}} | Experiment: {{experiment_name}} | Databricks Run: {{trigger-job.run_id}} | Datadog: {{log-metrics.url}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-3m.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-runs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ml-model-training-pipeline.yml

Extracts financial and operational data from SAP S/4HANA into Snowflake, runs compliance aggregations via Azure Data Factory, and publishes the result to a Power BI dataset for regulatory reporting.

naftiko: '0.5'
info:
  label: Regulatory Compliance Reporting Pipeline
  description: Extracts financial and operational data from SAP S/4HANA into Snowflake, runs compliance aggregations via Azure Data Factory, and publishes the result to a Power BI dataset for regulatory reporting.
  tags:
  - compliance
  - finance
  - reporting
  - sap
  - snowflake
  - azure-data-factory
  - power-bi
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: compliance-reporting
    port: 8080
    tools:
    - name: run-compliance-report
      description: 'Trigger a regulatory compliance data pipeline: extract from SAP, load to Snowflake, refresh via Azure Data Factory, and push results to Power BI.'
      inputParameters:
      - name: report_period
        in: body
        type: string
        description: The reporting period in YYYY-MM format (e.g., 2025-03).
      - name: report_type
        in: body
        type: string
        description: The regulatory report type (e.g., sox_controls, ehs_emissions, product_safety).
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the reporting entity.
      steps:
      - name: extract-sap-data
        type: call
        call: sap.get-financial-posting
        with:
          company_code: '{{company_code}}'
          period: '{{report_period}}'
      - name: trigger-adf-pipeline
        type: call
        call: azure-data-factory.run-pipeline
        with:
          pipeline_name: compliance-{{report_type}}
          parameters: period={{report_period}},company={{company_code}}
      - name: refresh-powerbi-dataset
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_name: compliance-{{report_type}}-{{report_period}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FAC_GL_ITEMS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financial-postings
      path: /A_JournalEntry
      inputParameters:
      - name: company_code
        in: query
      - name: period
        in: query
      operations:
      - name: get-financial-posting
        method: GET
  - type: http
    namespace: azure-data-factory
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DataFactory/factories/{{factory_name}}
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: pipeline-runs
      path: /pipelines/{{pipeline_name}}/createRun
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: run-pipeline
        method: POST
  - 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_name}}/refreshes
      inputParameters:
      - name: dataset_name
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-reporting-pipeline.yml

When Datadog detects Oracle Database query latency or tablespace saturation anomalies, opens a ServiceNow DBA task and opens a Jira ticket for the database engineering team.

naftiko: '0.5'
info:
  label: Oracle Database Performance Alert
  description: When Datadog detects Oracle Database query latency or tablespace saturation anomalies, opens a ServiceNow DBA task and opens a Jira ticket for the database engineering team.
  tags:
  - database
  - oracle
  - datadog
  - servicenow
  - jira
  - performance
  - dba
capability:
  exposes:
  - type: mcp
    namespace: dba-ops
    port: 8080
    tools:
    - name: handle-db-performance-alert
      description: Given an Oracle DB performance alert from Datadog, open a ServiceNow DBA task and a Jira ticket for investigation.
      inputParameters:
      - name: db_instance
        in: body
        type: string
        description: Oracle database instance name.
      - name: alert_type
        in: body
        type: string
        description: Alert type (query_latency, tablespace_full, connection_pool, lock_wait).
      - name: metric_value
        in: body
        type: string
        description: The metric value that triggered the alert.
      - name: datadog_alert_url
        in: body
        type: string
        description: URL to the Datadog monitor event.
      steps:
      - name: create-snow-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Oracle DB Alert: {{alert_type}} on {{db_instance}}'
          description: 'Metric: {{metric_value}} | Alert: {{datadog_alert_url}}'
          category: database_performance
          assigned_group: DBA_Team
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: DBA
          issuetype: Task
          summary: 'Oracle DB: {{alert_type}} on {{db_instance}} ({{metric_value}})'
          description: 'ServiceNow: {{create-snow-task.number}}

            Datadog: {{datadog_alert_url}}

            Instance: {{db_instance}}

            Alert: {{alert_type}}

            Value: {{metric_value}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → oracle-database-performance-alert.yml

Queries Oracle E-Business Suite general ledger for account balances by period, returning beginning balance, net activity, and ending balance for finance teams.

naftiko: '0.5'
info:
  label: Oracle GL Balance Lookup
  description: Queries Oracle E-Business Suite general ledger for account balances by period, returning beginning balance, net activity, and ending balance for finance teams.
  tags:
  - finance
  - oracle
  - general-ledger
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-gl-balance
      description: Look up Oracle general ledger balance by account and period. Returns beginning balance, debits, credits, and ending balance.
      inputParameters:
      - name: account_code
        in: body
        type: string
        description: The GL account code combination.
      - name: period_name
        in: body
        type: string
        description: The accounting period (e.g., JAN-26).
      call: oracle-ebs.get-gl-balance
      with:
        account_code: '{{account_code}}'
        period_name: '{{period_name}}'
      outputParameters:
      - name: beginning_balance
        type: string
        mapping: $.BeginningBalance
      - name: net_activity
        type: string
        mapping: $.NetActivity
      - name: ending_balance
        type: string
        mapping: $.EndingBalance
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://3m-ebs.oracle.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: gl-balances
      path: /glBalances
      inputParameters:
      - name: account_code
        in: query
      - name: period_name
        in: query
      operations:
      - name: get-gl-balance
        method: GET
Open in Framework → View in Fleet → oracle-gl-balance-lookup.yml

When a SonarQube quality gate fails on a pull request, posts a quality report comment to the GitHub PR, opens a Jira engineering task, and notifies the team in Teams.

naftiko: '0.5'
info:
  label: SonarQube Code Quality Gate Failure
  description: When a SonarQube quality gate fails on a pull request, posts a quality report comment to the GitHub PR, opens a Jira engineering task, and notifies the team in Teams.
  tags:
  - code-quality
  - sonarqube
  - github
  - jira
  - microsoft-teams
  - devsecops
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: handle-quality-gate-failure
      description: Given a SonarQube project and GitHub PR number, post the quality report as a PR comment, open a Jira task, and alert the team in Teams.
      inputParameters:
      - name: sonarqube_project_key
        in: body
        type: string
        description: The SonarQube project key.
      - name: github_repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: string
        description: The GitHub pull request number.
      - name: failed_conditions
        in: body
        type: string
        description: Description of the failed gate conditions.
      steps:
      - name: get-sonar-report
        type: call
        call: sonarqube-cq.get-project-status
        with:
          project_key: '{{sonarqube_project_key}}'
      - name: post-pr-comment
        type: call
        call: github-cq.create-pr-comment
        with:
          repository: '{{github_repo}}'
          pr_number: '{{pr_number}}'
          body: 'SonarQube Quality Gate FAILED


            Conditions: {{failed_conditions}}

            Bugs: {{get-sonar-report.bugs}} | Vulnerabilities: {{get-sonar-report.vulnerabilities}} | Coverage: {{get-sonar-report.coverage}}%'
      - name: open-jira
        type: call
        call: jira-cq.create-issue
        with:
          project_key: ENG
          issuetype: Task
          summary: 'Quality gate failure: {{sonarqube_project_key}} PR #{{pr_number}}'
          description: 'Failed: {{failed_conditions}}

            Bugs: {{get-sonar-report.bugs}}

            Vulnerabilities: {{get-sonar-report.vulnerabilities}}

            Coverage: {{get-sonar-report.coverage}}%'
  consumes:
  - type: http
    namespace: sonarqube-cq
    baseUri: https://3m-sonar.internal/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: project-status
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-project-status
        method: GET
  - type: http
    namespace: github-cq
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pr-comments
      path: /repos/{{repository}}/issues/{{pr_number}}/comments
      inputParameters:
      - name: repository
        in: path
      - name: pr_number
        in: path
      operations:
      - name: create-pr-comment
        method: POST
  - type: http
    namespace: jira-cq
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sonarqube-code-quality-gate-failure.yml

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

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 to the new employee.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: The department or business unit the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding_site
          folder_path: OnboardingDocs/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to 3M, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.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
Open in Framework → View in Fleet → employee-onboarding-orchestrator.yml

When an environmental health and safety incident is reported, creates a ServiceNow EHS case, logs the event in SAP Plant Maintenance, and notifies the site safety officer and EHS leadership in Microsoft Teams.

naftiko: '0.5'
info:
  label: EHS Safety Incident Reporting
  description: When an environmental health and safety incident is reported, creates a ServiceNow EHS case, logs the event in SAP Plant Maintenance, and notifies the site safety officer and EHS leadership in Microsoft Teams.
  tags:
  - ehs
  - safety
  - servicenow
  - sap
  - microsoft-teams
  - compliance
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: ehs
    port: 8080
    tools:
    - name: report-safety-incident
      description: Given an EHS incident description and plant code, open a ServiceNow EHS case, log in SAP PM, and notify the site safety officer in Teams.
      inputParameters:
      - name: incident_description
        in: body
        type: string
        description: Description of the safety or environmental incident.
      - name: plant_code
        in: body
        type: string
        description: 3M plant or facility code where the incident occurred.
      - name: severity
        in: body
        type: string
        description: 'Incident severity: near_miss, first_aid, recordable, or lost_time.'
      - name: safety_officer_upn
        in: body
        type: string
        description: Microsoft UPN of the site safety officer.
      steps:
      - name: create-ehs-case
        type: call
        call: servicenow.create-ehs-case
        with:
          short_description: 'EHS Incident ({{severity}}): {{plant_code}}'
          description: '{{incident_description}}'
          category: safety_incident
          severity: '{{severity}}'
          location: '{{plant_code}}'
      - name: log-sap-notification
        type: call
        call: sap.create-pm-notification
        with:
          plant: '{{plant_code}}'
          notification_type: S2
          short_text: 'EHS: {{severity}} at {{plant_code}}'
          long_text: '{{incident_description}} | ServiceNow: {{create-ehs-case.number}}'
      - name: notify-safety-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{safety_officer_upn}}'
          text: 'EHS Incident Reported: {{severity}} at {{plant_code}} | ServiceNow: {{create-ehs-case.number}} | SAP Notification: {{log-sap-notification.notification_id}} | Details: {{incident_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: ehs-cases
      path: /table/sn_ehs_case
      operations:
      - name: create-ehs-case
        method: POST
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /MaintenanceNotification
      operations:
      - name: create-pm-notification
        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
Open in Framework → View in Fleet → ehs-safety-incident-reporting.yml

Automates production shift handover by collecting output data from SAP, summarizing open issues from ServiceNow, and posting a shift report to the plant operations Teams channel.

naftiko: '0.5'
info:
  label: Production Shift Handover
  description: Automates production shift handover by collecting output data from SAP, summarizing open issues from ServiceNow, and posting a shift report to the plant operations Teams channel.
  tags:
  - manufacturing
  - production
  - sap
  - servicenow
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: shift-management
    port: 8080
    tools:
    - name: generate-shift-handover
      description: Given a plant, line, and shift period, collect production data, open issues, and post handover report.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: production_line
        in: body
        type: string
        description: Production line identifier.
      - name: shift
        in: body
        type: string
        description: Shift identifier (e.g., day, swing, night).
      steps:
      - name: get-production-output
        type: call
        call: sap.get-shift-output
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
          shift: '{{shift}}'
      - name: get-open-issues
        type: call
        call: servicenow.get-open-incidents
        with:
          location: '{{plant_code}}'
          equipment: '{{production_line}}'
      - name: post-handover
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.plant_ops_team_id
          channel_id: $secrets.plant_ops_channel_id
          text: 'Shift Handover: {{production_line}} at {{plant_code}} ({{shift}}) | Output: {{get-production-output.total_qty}} units | Scrap: {{get-production-output.scrap_qty}} | Open Issues: {{get-open-issues.count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PP_SHIFT_REPORT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: shift-output
      path: /ShiftReport
      inputParameters:
      - name: plant
        in: query
      - name: line
        in: query
      - name: shift
        in: query
      operations:
      - name: get-shift-output
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: location
        in: query
      - name: equipment
        in: query
      operations:
      - name: get-open-incidents
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → production-shift-handover.yml

Retrieves a quality inspection lot from SAP QM by lot number, returning inspection results, usage decision, and defect counts for quality assurance teams.

naftiko: '0.5'
info:
  label: SAP Quality Inspection Lot Lookup
  description: Retrieves a quality inspection lot from SAP QM by lot number, returning inspection results, usage decision, and defect counts for quality assurance teams.
  tags:
  - quality
  - sap
  - sap-s4hana
  - inspection
  - manufacturing
  - quality-control
capability:
  exposes:
  - type: mcp
    namespace: quality-inspection
    port: 8080
    tools:
    - name: get-inspection-lot
      description: Look up a SAP quality inspection lot by number. Returns usage decision, inspection result, and defect count.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: The SAP inspection lot number.
      call: sap.get-inspection-lot
      with:
        lot_number: '{{lot_number}}'
      outputParameters:
      - name: usage_decision
        type: string
        mapping: $.d.UsageDecision
      - name: inspection_result
        type: string
        mapping: $.d.InspectionResult
      - name: defect_count
        type: string
        mapping: $.d.NumberOfDefects
      - name: material
        type: string
        mapping: $.d.Material
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_LOT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspection-lots
      path: /InspectionLot('{{lot_number}}')
      inputParameters:
      - name: lot_number
        in: path
      operations:
      - name: get-inspection-lot
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → sap-quality-inspection-lot-lookup.yml

When a Tableau workbook extract refresh fails, logs the failure to Datadog, opens a Jira ticket for the BI team, and notifies the dashboard owner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh Failure
  description: When a Tableau workbook extract refresh fails, logs the failure to Datadog, opens a Jira ticket for the BI team, and notifies the dashboard owner in Microsoft Teams.
  tags:
  - analytics
  - tableau
  - datadog
  - jira
  - microsoft-teams
  - business-intelligence
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: handle-tableau-refresh-failure
      description: Given a failed Tableau workbook name and owner, log to Datadog, open a Jira BI ticket, and notify the owner in Teams.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      - name: owner_upn
        in: body
        type: string
        description: Microsoft UPN of the workbook owner.
      - name: error_message
        in: body
        type: string
        description: Extract refresh error message.
      steps:
      - name: log-datadog
        type: call
        call: datadog-bi.create-event
        with:
          title: 'Tableau Refresh Failed: {{workbook_name}}'
          text: 'Workbook: {{workbook_id}} | Error: {{error_message}} | Owner: {{owner_upn}}'
          alert_type: error
          tags: bi:tableau,workbook:{{workbook_name}}
      - name: open-jira
        type: call
        call: jira-bi.create-issue
        with:
          project_key: BI
          issuetype: Bug
          summary: 'Tableau refresh failure: {{workbook_name}}'
          description: 'Workbook: {{workbook_name}} ({{workbook_id}})

            Owner: {{owner_upn}}

            Error: {{error_message}}

            Datadog: {{log-datadog.url}}'
      - name: notify-owner
        type: call
        call: msteams-bi.send-message
        with:
          recipient_upn: '{{owner_upn}}'
          text: 'Tableau Refresh Failed: {{workbook_name}} | Error: {{error_message}} | Jira: {{open-jira.key}}'
  consumes:
  - type: http
    namespace: datadog-bi
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira-bi
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-bi
    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
Open in Framework → View in Fleet → tableau-dashboard-refresh-failure.yml

Orchestrates a new product regulatory submission by gathering product specs from SAP, creating a Jira submission tracker, uploading documents to SharePoint, and notifying the regulatory affairs team.

naftiko: '0.5'
info:
  label: New Product Regulatory Submission
  description: Orchestrates a new product regulatory submission by gathering product specs from SAP, creating a Jira submission tracker, uploading documents to SharePoint, and notifying the regulatory affairs team.
  tags:
  - regulatory
  - compliance
  - sap
  - jira
  - sharepoint
  - product-development
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: submit-regulatory-package
      description: Given a product material number, submission type, and target market, gather specs, create a tracker, upload docs, and notify the regulatory team.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the new product.
      - name: submission_type
        in: body
        type: string
        description: Type of regulatory submission (e.g., 510k, CE_mark, REACH).
      - name: target_market
        in: body
        type: string
        description: Target market for the submission (e.g., US, EU, APAC).
      steps:
      - name: get-product-specs
        type: call
        call: sap.get-material-master
        with:
          material_number: '{{material_number}}'
      - name: create-submission-tracker
        type: call
        call: jira.create-issue
        with:
          project_key: REG
          issuetype: Task
          summary: 'Regulatory Submission: {{submission_type}} — {{material_number}} ({{target_market}})'
          description: 'Product: {{get-product-specs.material_description}} | Type: {{submission_type}} | Market: {{target_market}}'
      - name: create-sharepoint-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: $secrets.regulatory_site_id
          parent_path: /Submissions/{{submission_type}}
          folder_name: '{{material_number}}-{{target_market}}'
      - name: notify-regulatory-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.regulatory_team_id
          channel_id: $secrets.regulatory_channel_id
          text: 'New Regulatory Submission: {{submission_type}} for {{material_number}} ({{target_market}}) | Jira: {{create-submission-tracker.key}} | SharePoint folder created'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-master
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:{{parent_path}}/{{folder_name}}
      inputParameters:
      - name: site_id
        in: path
      - name: parent_path
        in: path
      - name: folder_name
        in: path
      operations:
      - name: create-folder
        method: PUT
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → new-product-regulatory-submission.yml

Assigns mandatory safety training in Workday Learning, creates a tracking record in ServiceNow, and sends a completion deadline reminder to the employee and their manager in Teams.

naftiko: '0.5'
info:
  label: Safety Training Assignment
  description: Assigns mandatory safety training in Workday Learning, creates a tracking record in ServiceNow, and sends a completion deadline reminder to the employee and their manager in Teams.
  tags:
  - safety
  - training
  - workday
  - servicenow
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: safety-training
    port: 8080
    tools:
    - name: assign-safety-training
      description: Given an employee ID, training course, and deadline, assign in Workday, track in ServiceNow, and notify via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID.
      - name: deadline
        in: body
        type: string
        description: Completion deadline date.
      - name: employee_upn
        in: body
        type: string
        description: Microsoft UPN of the employee.
      steps:
      - name: assign-course
        type: call
        call: workday.assign-learning
        with:
          employee_id: '{{employee_id}}'
          course_id: '{{course_id}}'
          due_date: '{{deadline}}'
      - name: create-tracking-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Safety training due: {{course_id}} for {{employee_id}}'
          assigned_to: '{{employee_upn}}'
          due_date: '{{deadline}}'
          category: safety_training
      - name: notify-employee
        type: call
        call: msteams.send-chat
        with:
          recipient_upn: '{{employee_upn}}'
          text: 'You have been assigned mandatory safety training: {{course_id}}. Please complete by {{deadline}}. ServiceNow: {{create-tracking-record.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/3m
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning
      path: /learningAssignments
      operations:
      - name: assign-learning
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-chat
        method: POST
Open in Framework → View in Fleet → safety-training-assignment.yml

Manages environmental permit renewals by pulling permit data from ServiceNow, creating renewal tasks in Jira, and notifying the EHS director and regulatory team in Teams.

naftiko: '0.5'
info:
  label: Environmental Permit Renewal
  description: Manages environmental permit renewals by pulling permit data from ServiceNow, creating renewal tasks in Jira, and notifying the EHS director and regulatory team in Teams.
  tags:
  - ehs
  - compliance
  - regulatory
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ehs-permits
    port: 8080
    tools:
    - name: initiate-permit-renewal
      description: Given a permit ID and plant code, pull permit data, create renewal tasks, and notify stakeholders.
      inputParameters:
      - name: permit_id
        in: body
        type: string
        description: The ServiceNow environmental permit record ID.
      - name: plant_code
        in: body
        type: string
        description: The 3M plant code.
      - name: permit_type
        in: body
        type: string
        description: Type of permit (e.g., air_emissions, water_discharge, waste_handling).
      - name: expiry_date
        in: body
        type: string
        description: Current permit expiry date.
      steps:
      - name: get-permit-details
        type: call
        call: servicenow.get-permit
        with:
          permit_id: '{{permit_id}}'
      - name: create-renewal-tasks
        type: call
        call: jira.create-issue
        with:
          project_key: EHS
          issuetype: Epic
          summary: 'Permit Renewal: {{permit_type}} — {{plant_code}} (expires {{expiry_date}})'
          description: 'Permit: {{permit_id}} | Type: {{permit_type}} | Plant: {{plant_code}} | Current expiry: {{expiry_date}} | Authority: {{get-permit-details.issuing_authority}}'
      - name: notify-ehs-leadership
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ehs_team_id
          channel_id: $secrets.ehs_permits_channel_id
          text: 'Permit Renewal Required: {{permit_type}} at {{plant_code}} | Expires: {{expiry_date}} | Jira: {{create-renewal-tasks.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: permits
      path: /table/sn_ehs_permit/{{permit_id}}
      inputParameters:
      - name: permit_id
        in: path
      operations:
      - name: get-permit
        method: GET
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → environmental-permit-renewal.yml

Retrieves a Jira issue by key, returning summary, status, assignee, and priority for engineering and project management teams.

naftiko: '0.5'
info:
  label: Jira Ticket Lookup
  description: Retrieves a Jira issue by key, returning summary, status, assignee, and priority for engineering and project management teams.
  tags:
  - engineering
  - jira
  - project-management
  - development
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key. Returns summary, status, assignee, priority, and sprint.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., PROJ-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://3m.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-ticket-lookup.yml

Checks the last refresh status and timing of a Power BI dataset to verify data freshness for reporting and analytics teams.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status
  description: Checks the last refresh status and timing of a Power BI dataset to verify data freshness for reporting and analytics teams.
  tags:
  - analytics
  - power-bi
  - reporting
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-dataset-refresh-status
      description: Check the last refresh status of a Power BI dataset. Returns status, start and end times, and error message if failed.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        group_id: '{{group_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - name: start_time
        type: string
        mapping: $.value[0].startTime
      - name: end_time
        type: string
        mapping: $.value[0].endTime
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh-history
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status.yml

Assembles a weekly executive briefing by pulling sales pipeline from Salesforce, financial KPIs from Power BI, and operational metrics from Snowflake, then publishes the digest to a SharePoint executive portal and Teams channel.

naftiko: '0.5'
info:
  label: Executive Briefing Digest
  description: Assembles a weekly executive briefing by pulling sales pipeline from Salesforce, financial KPIs from Power BI, and operational metrics from Snowflake, then publishes the digest to a SharePoint executive portal and Teams channel.
  tags:
  - executive
  - reporting
  - salesforce
  - power-bi
  - snowflake
  - sharepoint
  - microsoft-teams
  - digest
capability:
  exposes:
  - type: mcp
    namespace: executive-reporting
    port: 8080
    tools:
    - name: publish-executive-briefing
      description: Pull pipeline from Salesforce, KPIs from Power BI, and ops metrics from Snowflake, then publish the digest to SharePoint and notify leadership in Teams.
      inputParameters:
      - name: week_ending
        in: body
        type: string
        description: Week ending date in YYYY-MM-DD format.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint executive portal site ID.
      - name: leadership_channel_upn
        in: body
        type: string
        description: Microsoft Teams channel or distribution UPN for leadership.
      steps:
      - name: get-pipeline
        type: call
        call: salesforce.get-pipeline-summary
        with:
          week_ending: '{{week_ending}}'
      - name: get-financial-kpis
        type: call
        call: powerbi.get-dataset-rows
        with:
          dataset_name: executive-kpis
          filter: week_ending eq '{{week_ending}}'
      - name: publish-to-sharepoint
        type: call
        call: sharepoint.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_path: ExecutiveBriefings/briefing-{{week_ending}}.md
          content: '# 3M Executive Briefing — {{week_ending}}


            ## Pipeline

            {{get-pipeline.summary}}


            ## Financial KPIs

            {{get-financial-kpis.summary}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{leadership_channel_upn}}'
          text: 'Executive Briefing Published (week of {{week_ending}}): Pipeline: {{get-pipeline.total_value}} | SharePoint: {{publish-to-sharepoint.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://3m.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: pipeline
      path: /query
      inputParameters:
      - name: week_ending
        in: query
      operations:
      - name: get-pipeline-summary
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_name}}/tables/KPIs/rows
      inputParameters:
      - name: dataset_name
        in: path
      - name: filter
        in: query
      operations:
      - name: get-dataset-rows
        method: GET
  - 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}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - 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
Open in Framework → View in Fleet → executive-briefing-digest.yml

Promotes a SAP transport request through the landscape by triggering the release in SAP, logging the change in ServiceNow, and notifying the SAP Basis team in Teams.

naftiko: '0.5'
info:
  label: SAP Transport Request Promotion
  description: Promotes a SAP transport request through the landscape by triggering the release in SAP, logging the change in ServiceNow, and notifying the SAP Basis team in Teams.
  tags:
  - sap
  - sap-s4hana
  - servicenow
  - microsoft-teams
  - change-management
  - development
capability:
  exposes:
  - type: mcp
    namespace: sap-transport
    port: 8080
    tools:
    - name: promote-transport
      description: Given a transport number and target system, release the transport, log in ServiceNow, and notify SAP Basis.
      inputParameters:
      - name: transport_number
        in: body
        type: string
        description: The SAP transport request number.
      - name: target_system
        in: body
        type: string
        description: Target system (e.g., QAS, PRD).
      - name: change_ticket
        in: body
        type: string
        description: ServiceNow change ticket number.
      steps:
      - name: release-transport
        type: call
        call: sap.release-transport
        with:
          transport: '{{transport_number}}'
          target: '{{target_system}}'
      - name: update-change-ticket
        type: call
        call: servicenow.update-change
        with:
          change_number: '{{change_ticket}}'
          work_notes: 'Transport {{transport_number}} released to {{target_system}}. Status: {{release-transport.status}}'
      - name: notify-basis
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.sap_basis_team_id
          channel_id: $secrets.sap_basis_channel_id
          text: 'Transport {{transport_number}} released to {{target_system}} | Change: {{change_ticket}} | Status: {{release-transport.status}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/CTS_TRANSPORT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transports
      path: /Transport('{{transport}}')/Release
      inputParameters:
      - name: transport
        in: path
      operations:
      - name: release-transport
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request/{{change_number}}
      inputParameters:
      - name: change_number
        in: path
      operations:
      - name: update-change
        method: PATCH
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-transport-request-promotion.yml

When a manufacturing asset health monitor signals degradation, creates a ServiceNow maintenance work order, cross-references the SAP Plant Maintenance module for asset details, and notifies the facility team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Equipment Maintenance Request
  description: When a manufacturing asset health monitor signals degradation, creates a ServiceNow maintenance work order, cross-references the SAP Plant Maintenance module for asset details, and notifies the facility team in Microsoft Teams.
  tags:
  - manufacturing
  - maintenance
  - servicenow
  - sap
  - microsoft-teams
  - asset-management
  - industrial
capability:
  exposes:
  - type: mcp
    namespace: plant-operations
    port: 8080
    tools:
    - name: create-maintenance-request
      description: Given an equipment ID and failure signal, fetch asset details from SAP Plant Maintenance, open a ServiceNow work order, and notify the facility team in Microsoft Teams.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP Plant Maintenance equipment number.
      - name: failure_signal
        in: body
        type: string
        description: Description of the observed equipment fault or degradation signal.
      - name: plant_code
        in: body
        type: string
        description: The 3M manufacturing plant code where the equipment is located.
      - name: priority
        in: body
        type: string
        description: Maintenance priority (1=Emergency, 2=Urgent, 3=Normal, 4=Low).
      steps:
      - name: get-asset-details
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{equipment_id}}'
          plant: '{{plant_code}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Maintenance Request: {{get-asset-details.equipment_description}} — {{failure_signal}}'
          category: plant_maintenance
          asset_tag: '{{equipment_id}}'
          location: '{{plant_code}}'
          priority: '{{priority}}'
          description: 'Equipment: {{get-asset-details.equipment_description}}

            Plant: {{plant_code}}

            Fault: {{failure_signal}}

            Last PM: {{get-asset-details.last_pm_date}}'
      - name: notify-facility
        type: call
        call: msteams.send-message
        with:
          recipient_upn: plant-{{plant_code}}-ops@3m.com
          text: 'Maintenance Request: {{get-asset-details.equipment_description}} ({{equipment_id}}) | Plant: {{plant_code}} | Priority: {{priority}} | Signal: {{failure_signal}} | Work Order: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://3m.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-maintenance-request.yml

Retrieves a Confluence page by ID, returning title, content body, last modified date, and author for knowledge management and documentation teams.

naftiko: '0.5'
info:
  label: Confluence Page Lookup
  description: Retrieves a Confluence page by ID, returning title, content body, last modified date, and author for knowledge management and documentation teams.
  tags:
  - knowledge-management
  - confluence
  - documentation
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-confluence-page
      description: Look up a Confluence page by page ID. Returns title, body content, last modifier, and version.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: body
        type: string
        mapping: $.body.storage.value
      - name: last_modified
        type: string
        mapping: $.version.when
      - name: author
        type: string
        mapping: $.version.by.displayName
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://3m.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-lookup.yml

Coordinates a 3M product launch by publishing brand assets from Adobe Creative Cloud to SharePoint, scheduling the HubSpot email campaign, and posting launch readiness to the marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Product Launch Content Pipeline
  description: Coordinates a 3M product launch by publishing brand assets from Adobe Creative Cloud to SharePoint, scheduling the HubSpot email campaign, and posting launch readiness to the marketing Microsoft Teams channel.
  tags:
  - marketing
  - product-launch
  - adobe-creative-cloud
  - sharepoint
  - hubspot
  - microsoft-teams
  - content
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: execute-launch-content-pipeline
      description: Given a product name and HubSpot campaign ID, publish approved brand assets to SharePoint, activate the HubSpot email campaign, and notify the marketing team in Teams.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name being launched.
      - name: hubspot_campaign_id
        in: body
        type: string
        description: The HubSpot email campaign ID to activate.
      - name: sharepoint_library_id
        in: body
        type: string
        description: SharePoint document library ID for brand assets.
      - name: launch_date
        in: body
        type: string
        description: Planned launch date in YYYY-MM-DD format.
      steps:
      - name: publish-assets
        type: call
        call: sharepoint.create-folder
        with:
          site_id: marketing_assets_site
          folder_path: ProductLaunches/{{product_name}}_{{launch_date}}
      - name: activate-campaign
        type: call
        call: hubspot.activate-campaign
        with:
          campaign_id: '{{hubspot_campaign_id}}'
      - name: notify-marketing
        type: call
        call: msteams.send-message
        with:
          recipient_upn: marketing-team@3m.com
          text: 'Launch Pipeline Complete: {{product_name}} | Launch Date: {{launch_date}} | Assets: {{publish-assets.url}} | HubSpot Campaign: {{hubspot_campaign_id}} activated.'
  consumes:
  - 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: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}/activate
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: activate-campaign
        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
Open in Framework → View in Fleet → product-launch-content-pipeline.yml

Returns current headcount by department and cost center from Workday and ADP, cross-referenced against SAP cost center hierarchy, for use in headcount planning and budget reporting.

naftiko: '0.5'
info:
  label: Headcount and Payroll Snapshot
  description: Returns current headcount by department and cost center from Workday and ADP, cross-referenced against SAP cost center hierarchy, for use in headcount planning and budget reporting.
  tags:
  - hr
  - finance
  - payroll
  - workday
  - adp
  - sap
  - headcount
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns employee headcount grouped by department and cost center from Workday, enriched with ADP payroll classification data.
      call: workday.headcount-export
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
        items:
        - name: employee_id
          type: string
          mapping: $.workerId
        - name: full_name
          type: string
          mapping: $.name.formattedName
        - name: department
          type: string
          mapping: $.organizationInfo.department
        - name: cost_center
          type: string
          mapping: $.organizationInfo.costCenter
        - name: employment_type
          type: string
          mapping: $.workerType
    - name: get-payroll-by-cost-center
      description: Returns ADP payroll totals grouped by SAP cost center code for a given pay period. Use for budget vs. actuals reconciliation.
      inputParameters:
      - name: pay_period_start
        in: body
        type: string
        description: Start date of the pay period in YYYY-MM-DD format.
      - name: pay_period_end
        in: body
        type: string
        description: End date of the pay period in YYYY-MM-DD format.
      call: adp.payroll-summary
      with:
        start_date: '{{pay_period_start}}'
        end_date: '{{pay_period_end}}'
  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
      operations:
      - name: headcount-export
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll/v1/payroll-output
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: payroll-summary
        method: GET
Open in Framework → View in Fleet → headcount-and-payroll-snapshot.yml

Extracts actuals from SAP S/4HANA and budget from Oracle Hyperion, computes variance, and publishes the result to the Power BI finance dashboard and posts a summary to the finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Budget vs Actuals Reporting
  description: Extracts actuals from SAP S/4HANA and budget from Oracle Hyperion, computes variance, and publishes the result to the Power BI finance dashboard and posts a summary to the finance Microsoft Teams channel.
  tags:
  - finance
  - budgeting
  - sap
  - oracle-hyperion
  - power-bi
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: run-budget-vs-actuals
      description: Pull actuals from SAP and budget from Hyperion for a cost center and period, compute variance, refresh Power BI, and post a summary to Teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: SAP cost center code.
      - name: fiscal_year
        in: body
        type: string
        description: Four-digit fiscal year.
      - name: fiscal_period
        in: body
        type: string
        description: Two-digit fiscal period.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
          fiscal_year: '{{fiscal_year}}'
          fiscal_period: '{{fiscal_period}}'
      - name: get-budget
        type: call
        call: oracle-hyperion.get-budget
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_year}}.{{fiscal_period}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_name: budget-vs-actuals-{{cost_center}}-{{fiscal_year}}-{{fiscal_period}}
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: finance-reporting@3m.com
          text: 'Budget vs Actuals: Cost Center {{cost_center}} | Period {{fiscal_year}}.{{fiscal_period}} | Actuals: {{get-actuals.total_actual}} | Budget: {{get-budget.total_budget}} | Power BI refreshed.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://3m-s4.sap.com/sap/opu/odata/sap/FAC_CO_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-actuals
      path: /CostCenterActuals
      inputParameters:
      - name: cost_center
        in: query
      - name: fiscal_year
        in: query
      - name: fiscal_period
        in: query
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: oracle-hyperion
    baseUri: https://3m-hyperion.oracle.com/HyperionPlanning/rest/v3
    authentication:
      type: basic
      username: $secrets.hyperion_user
      password: $secrets.hyperion_password
    resources:
    - name: budget-data
      path: /applications/3M_CONSOL/dataExport
      inputParameters:
      - name: cost_center
        in: query
      - name: period
        in: query
      operations:
      - name: get-budget
        method: GET
  - 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_name}}/refreshes
      inputParameters:
      - name: dataset_name
        in: path
      operations:
      - name: refresh-dataset
        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
Open in Framework → View in Fleet → budget-vs-actuals-reporting.yml

When Datadog fires a critical alert, creates a ServiceNow P1 incident, posts an alert to the Microsoft Teams on-call channel, and attaches the Datadog dashboard link for rapid triage.

naftiko: '0.5'
info:
  label: IT Incident Response
  description: When Datadog fires a critical alert, creates a ServiceNow P1 incident, posts an alert to the Microsoft Teams on-call channel, and attaches the Datadog dashboard link for rapid triage.
  tags:
  - itsm
  - observability
  - datadog
  - servicenow
  - microsoft-teams
  - incident-response
  - operations
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog monitor alert, open a ServiceNow P1 incident and notify the on-call channel in Microsoft Teams with full context.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that fired.
      - name: monitor_name
        in: body
        type: string
        description: Human-readable name of the firing monitor.
      - name: host
        in: body
        type: string
        description: The affected host or service.
      - name: alert_url
        in: body
        type: string
        description: URL to the Datadog monitor event.
      - name: oncall_channel
        in: body
        type: string
        description: Microsoft Teams channel ID for on-call notifications.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'P1 Alert: {{monitor_name}} on {{host}}'
          urgency: '1'
          impact: '1'
          category: infrastructure
          description: 'Datadog monitor {{monitor_id}} fired for {{host}}. Dashboard: {{alert_url}}'
      - name: notify-oncall
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{oncall_channel}}'
          text: 'P1 Incident Opened: {{monitor_name}} | Host: {{host}} | ServiceNow: {{create-incident.number}} | Datadog: {{alert_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://3m.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-incident-response.yml

When Prometheus alerts on high CPU, scales the Azure Kubernetes Service cluster, creates a Datadog annotation, and posts a status update to Microsoft Teams.

naftiko: '0.5'
info:
  label: Infrastructure Scaling Automation
  description: When Prometheus alerts on high CPU, scales the Azure Kubernetes Service cluster, creates a Datadog annotation, and posts a status update to Microsoft Teams.
  tags:
  - infrastructure
  - autoscaling
  - prometheus
  - azure-kubernetes-service
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-scaling
    port: 8080
    tools:
    - name: auto-scale-cluster
      description: Given a cluster name and target node count, scale the AKS cluster, annotate Datadog, and notify the team.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The AKS cluster name.
      - name: target_node_count
        in: body
        type: string
        description: Desired number of nodes.
      - name: trigger_metric
        in: body
        type: string
        description: The Prometheus metric that triggered the scaling.
      steps:
      - name: scale-cluster
        type: call
        call: aks.scale-nodepool
        with:
          cluster_name: '{{cluster_name}}'
          node_count: '{{target_node_count}}'
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'AKS Auto-Scale: {{cluster_name}}'
          text: 'Scaled to {{target_node_count}} nodes. Trigger: {{trigger_metric}}'
          alert_type: info
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: platform-ops
          text: 'Auto-Scale Complete: {{cluster_name}} scaled to {{target_node_count}} nodes. Trigger: {{trigger_metric}}. Datadog event: {{annotate-datadog.id}}'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: nodepools
      path: /adidas-rg/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}/agentPools/default
      inputParameters:
      - name: cluster_name
        in: path
      operations:
      - name: scale-nodepool
        method: PUT
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → infrastructure-scaling-automation.yml

Pulls online inventory from BigCommerce and warehouse stock from SAP S/4HANA, reconciles discrepancies, and logs mismatches in ServiceNow and a Google Sheet.

naftiko: '0.5'
info:
  label: Omnichannel Inventory Reconciliation
  description: Pulls online inventory from BigCommerce and warehouse stock from SAP S/4HANA, reconciles discrepancies, and logs mismatches in ServiceNow and a Google Sheet.
  tags:
  - supply-chain
  - inventory
  - bigcommerce
  - sap-s4hana
  - servicenow
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: inventory-reconciliation
    port: 8080
    tools:
    - name: reconcile-inventory
      description: Given a product SKU, compare online and warehouse inventory and log any discrepancies.
      inputParameters:
      - name: sku
        in: body
        type: string
        description: The product SKU to reconcile.
      - name: warehouse_plant
        in: body
        type: string
        description: The SAP plant code for the warehouse.
      steps:
      - name: get-online-stock
        type: call
        call: bigcommerce.get-product-stock
        with:
          sku: '{{sku}}'
      - name: get-warehouse-stock
        type: call
        call: sap.get-material-stock
        with:
          material: '{{sku}}'
          plant: '{{warehouse_plant}}'
      - name: log-discrepancy
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Inventory mismatch: {{sku}} — Online: {{get-online-stock.quantity}} vs WH: {{get-warehouse-stock.quantity}}'
          category: inventory
          priority: '3'
          description: 'SKU {{sku}} at plant {{warehouse_plant}}. BigCommerce: {{get-online-stock.quantity}}, SAP: {{get-warehouse-stock.quantity}}.'
      - name: log-to-sheet
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: $secrets.inventory_reconciliation_sheet
          range: Discrepancies!A1
          values: '{{sku}},{{warehouse_plant}},{{get-online-stock.quantity}},{{get-warehouse-stock.quantity}},{{log-discrepancy.number}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      inputParameters:
      - name: sku
        in: query
      operations:
      - name: get-product-stock
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-material-stock
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → omnichannel-inventory-reconciliation.yml

Retrieves Jira issue status for Adidas engineering teams.

naftiko: '0.5'
info:
  label: Jira Issue Status
  description: Retrieves Jira issue status for Adidas engineering teams.
  tags:
  - devops
  - jira
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-issue
      description: Look up Jira issue at Adidas.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The issue_key to look up.
      call: jira.get-issue_key
      with:
        issue_key: '{{issue_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira_issue_status
        method: GET
Open in Framework → View in Fleet → jira-issue-status.yml

Retrieves Confluence page content for Adidas knowledge base.

naftiko: '0.5'
info:
  label: Confluence Page Retrieval
  description: Retrieves Confluence page content for Adidas knowledge base.
  tags:
  - collaboration
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-page
      description: Get page at Adidas.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The page_id to look up.
      call: confluence.get-page_id
      with:
        page_id: '{{page_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://adidas.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence_page_retrieval
        method: GET
Open in Framework → View in Fleet → confluence-page-retrieval.yml

Extracts customer behavior segments from Adobe Analytics, enriches with purchase history from SAP HANA, and pushes personalized recommendations to the BigCommerce storefront.

naftiko: '0.5'
info:
  label: Personalization Engine Data Sync
  description: Extracts customer behavior segments from Adobe Analytics, enriches with purchase history from SAP HANA, and pushes personalized recommendations to the BigCommerce storefront.
  tags:
  - personalization
  - adobe-analytics
  - sap-hana
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: personalization
    port: 8080
    tools:
    - name: sync-personalization
      description: Given a customer segment ID, pull behavior data and purchase history, then update storefront recommendations.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The Adobe Analytics segment ID.
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite.
      steps:
      - name: get-segment-data
        type: call
        call: adobe-analytics.get-segment-users
        with:
          segment_id: '{{segment_id}}'
          report_suite_id: '{{report_suite_id}}'
      - name: get-purchase-history
        type: call
        call: sap-hana.query-purchase-history
        with:
          segment_id: '{{segment_id}}'
      - name: update-recommendations
        type: call
        call: bigcommerce.update-customer-group
        with:
          segment_id: '{{segment_id}}'
          recommended_products: '{{get-purchase-history.top_products}}'
          behavioral_tags: '{{get-segment-data.interests}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/adidas
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_client_id
    resources:
    - name: segments
      path: /segments/{{segment_id}}/users
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-segment-users
        method: GET
  - type: http
    namespace: sap-hana
    baseUri: https://adidas-hana.sap.com/sap/hana/xs/api
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: purchase-history
      path: /analytics/purchases
      operations:
      - name: query-purchase-history
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: customer-groups
      path: /customers/groups
      operations:
      - name: update-customer-group
        method: PUT
Open in Framework → View in Fleet → personalization-engine-data-sync.yml

Checks ServiceNow incident status for Adidas IT operations.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Check
  description: Checks ServiceNow incident status for Adidas IT operations.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident
      description: Look up incident at Adidas.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The incident_id to look up.
      call: servicenow.get-incident_id
      with:
        incident_id: '{{incident_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow_incident_status_che
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-check.yml

Drafts a support article from a resolved Zendesk ticket, publishes it to Notion, and shares the link in a Microsoft Teams support channel.

naftiko: '0.5'
info:
  label: Knowledge Base Article Publisher
  description: Drafts a support article from a resolved Zendesk ticket, publishes it to Notion, and shares the link in a Microsoft Teams support channel.
  tags:
  - knowledge-management
  - zendesk
  - notion
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: publish-kb-article
      description: Given a resolved Zendesk ticket ID, extract the resolution, publish to Notion, and share in Teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID with the resolution to publish.
      - name: category
        in: body
        type: string
        description: The knowledge base category (e.g. shipping, returns, product-info).
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: create-article
        type: call
        call: notion.create-page
        with:
          parent_id: $secrets.kb_database_id
          title: '{{get-ticket.subject}}'
          properties_category: '{{category}}'
          content: '{{get-ticket.resolution_notes}}'
      - name: share-article
        type: call
        call: msteams.send-message
        with:
          channel: customer-support
          text: 'New KB Article: {{get-ticket.subject}} | Category: {{category}} | Link: {{create-article.url}} | Source: Ticket #{{ticket_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}.json
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    inputParameters:
    - name: Notion-Version
      in: header
      value: '2022-06-28'
    resources:
    - name: pages
      path: /pages
      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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → knowledge-base-article-publisher.yml

When SAP detects a supplier delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs a risk entry in SAP S/4HANA.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Alert
  description: When SAP detects a supplier delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs a risk entry in SAP S/4HANA.
  tags:
  - supply-chain
  - sap-s4hana
  - servicenow
  - microsoft-teams
  - risk-management
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: handle-disruption
      description: Given a supplier ID and delay details, create incident, notify the team, and log a supply chain risk.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier business partner ID.
      - name: delay_days
        in: body
        type: string
        description: Number of days the shipment is delayed.
      - name: affected_materials
        in: body
        type: string
        description: Comma-separated list of affected material numbers.
      steps:
      - name: get-supplier
        type: call
        call: sap.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply chain delay: {{get-supplier.name}} — {{delay_days}} days'
          category: supply_chain
          priority: '2'
          description: 'Supplier {{get-supplier.name}} ({{supplier_id}}) delayed by {{delay_days}} days. Affected materials: {{affected_materials}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: supply-chain-alerts
          text: 'Supplier Delay Alert: {{get-supplier.name}} | Delay: {{delay_days}} days | Materials: {{affected_materials}} | Incident: {{create-incident.number}}'
      - name: log-risk
        type: call
        call: sap.create-risk-entry
        with:
          supplier_id: '{{supplier_id}}'
          risk_type: DELIVERY_DELAY
          severity: HIGH
          description: '{{delay_days}} day delay affecting materials: {{affected_materials}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{supplier_id}}')
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
    - name: risk-entries
      path: /A_SupplierRisk
      operations:
      - name: create-risk-entry
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-alert.yml

Analyzes sell-through rates in Snowflake, calculates optimal markdowns, updates pricing in SAP, refreshes dashboards, and notifies merchandising.

naftiko: '0.5'
info:
  label: Seasonal Markdown Optimization
  description: Analyzes sell-through rates in Snowflake, calculates optimal markdowns, updates pricing in SAP, refreshes dashboards, and notifies merchandising.
  tags:
  - merchandising
  - snowflake
  - sap
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: merchandising
    port: 8080
    tools:
    - name: seasonal_markdown_optimization
      description: Orchestrate seasonal markdown optimization workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-sap
        type: call
        call: sap.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → seasonal-markdown-optimization.yml

Retrieves Datadog monitor status for Adidas infrastructure.

naftiko: '0.5'
info:
  label: Datadog Monitor Status
  description: Retrieves Datadog monitor status for Adidas infrastructure.
  tags:
  - monitoring
  - datadog
  - alerting
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-monitor
      description: Check monitor at Adidas.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The monitor_id to look up.
      call: datadog.get-monitor_id
      with:
        monitor_id: '{{monitor_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog_monitor_status
        method: GET
Open in Framework → View in Fleet → datadog-monitor-status.yml

Retrieves experiment results from Google Optimize and Adobe Analytics, consolidates them, and posts findings to a Notion knowledge base page.

naftiko: '0.5'
info:
  label: E-Commerce A/B Test Result Collector
  description: Retrieves experiment results from Google Optimize and Adobe Analytics, consolidates them, and posts findings to a Notion knowledge base page.
  tags:
  - experimentation
  - google-optimize
  - adobe-analytics
  - notion
capability:
  exposes:
  - type: mcp
    namespace: experimentation
    port: 8080
    tools:
    - name: collect-ab-results
      description: Given an experiment ID, collect results from Google Optimize and Adobe Analytics and write the summary to Notion.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: The Google Optimize experiment ID.
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: notion_page_id
        in: body
        type: string
        description: The Notion page ID where results will be appended.
      steps:
      - name: get-optimize-results
        type: call
        call: google-optimize.get-experiment
        with:
          experiment_id: '{{experiment_id}}'
      - name: get-adobe-segment
        type: call
        call: adobe-analytics.get-segment-report
        with:
          report_suite_id: '{{report_suite_id}}'
          experiment_id: '{{experiment_id}}'
      - name: write-to-notion
        type: call
        call: notion.append-block
        with:
          page_id: '{{notion_page_id}}'
          content: 'Experiment: {{experiment_id}} | Winner: {{get-optimize-results.winner_variant}} | Lift: {{get-optimize-results.improvement_pct}}% | Revenue Impact: {{get-adobe-segment.revenue_delta}} | Confidence: {{get-optimize-results.confidence}}%'
  consumes:
  - type: http
    namespace: google-optimize
    baseUri: https://www.googleapis.com/analytics/v3/management
    authentication:
      type: bearer
      token: $secrets.google_optimize_token
    resources:
    - name: experiments
      path: /accounts/adidas/webproperties/UA-XXXXX/profiles/YYYYY/experiments/{{experiment_id}}
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: get-experiment
        method: GET
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/adidas/reports
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_client_id
    resources:
    - name: reports
      path: /ranked
      operations:
      - name: get-segment-report
        method: POST
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    inputParameters:
    - name: Notion-Version
      in: header
      value: '2022-06-28'
    resources:
    - name: blocks
      path: /blocks/{{page_id}}/children
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: append-block
        method: PATCH
Open in Framework → View in Fleet → e-commerce-a-b-test-result-collector.yml

Retrieves QC results from SAP, runs statistical analysis in Snowflake, flags defective batches, creates Jira tasks, and notifies quality team.

naftiko: '0.5'
info:
  label: Product Quality Inspection Pipeline
  description: Retrieves QC results from SAP, runs statistical analysis in Snowflake, flags defective batches, creates Jira tasks, and notifies quality team.
  tags:
  - quality
  - sap
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: product_quality_inspection_pipeline
      description: Orchestrate product quality inspection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → product-quality-inspection-pipeline.yml

Queries Grafana dashboard data for Adidas monitoring.

naftiko: '0.5'
info:
  label: Grafana Dashboard Query
  description: Queries Grafana dashboard data for Adidas monitoring.
  tags:
  - monitoring
  - grafana
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-dashboard
      description: Query dashboard at Adidas.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The dashboard_uid to look up.
      call: grafana.get-dashboard_uid
      with:
        dashboard_uid: '{{dashboard_uid}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://adidas-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana_dashboard_query
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-query.yml

Validates inventory in SAP, checks marketing assets in Adobe, confirms pricing in Salesforce, updates e-commerce catalog, and notifies launch team.

naftiko: '0.5'
info:
  label: Product Launch Readiness Orchestrator
  description: Validates inventory in SAP, checks marketing assets in Adobe, confirms pricing in Salesforce, updates e-commerce catalog, and notifies launch team.
  tags:
  - product-launch
  - sap
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: product_launch_readiness_orchestrator
      description: Orchestrate product launch readiness orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → product-launch-readiness-orchestrator.yml

When seasonal markdowns are triggered, updates product prices in BigCommerce, adjusts SAP pricing conditions, and sends a promotional email via Adobe Campaign.

naftiko: '0.5'
info:
  label: Seasonal Markdown Execution
  description: When seasonal markdowns are triggered, updates product prices in BigCommerce, adjusts SAP pricing conditions, and sends a promotional email via Adobe Campaign.
  tags:
  - retail
  - pricing
  - bigcommerce
  - sap-s4hana
  - adobe-campaign
capability:
  exposes:
  - type: mcp
    namespace: markdown
    port: 8080
    tools:
    - name: execute-markdown
      description: Given a product category, discount percentage, and effective date, apply markdowns across all channels.
      inputParameters:
      - name: category
        in: body
        type: string
        description: Product category to markdown.
      - name: discount_pct
        in: body
        type: string
        description: Discount percentage to apply.
      - name: effective_date
        in: body
        type: string
        description: Markdown effective date in YYYY-MM-DD format.
      steps:
      - name: update-ecommerce-prices
        type: call
        call: bigcommerce.batch-update-prices
        with:
          category: '{{category}}'
          discount_pct: '{{discount_pct}}'
          effective_date: '{{effective_date}}'
      - name: update-sap-conditions
        type: call
        call: sap.update-pricing-condition
        with:
          condition_type: ZK07
          category: '{{category}}'
          discount_pct: '{{discount_pct}}'
          valid_from: '{{effective_date}}'
      - name: send-promo-email
        type: call
        call: adobe-campaign.create-delivery
        with:
          template: seasonal_markdown_v1
          category: '{{category}}'
          discount_pct: '{{discount_pct}}'
          scheduled_date: '{{effective_date}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: batch-update-prices
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: conditions
      path: /A_SlsPrcgCndnRecdValidity
      operations:
      - name: update-pricing-condition
        method: POST
  - type: http
    namespace: adobe-campaign
    baseUri: https://mc.adobe.io/adidas/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    resources:
    - name: deliveries
      path: /deliveries
      operations:
      - name: create-delivery
        method: POST
Open in Framework → View in Fleet → seasonal-markdown-execution.yml

When an order is placed on BigCommerce, checks SAP inventory, creates a shipment in SAP S/4HANA, and notifies the customer via Zendesk with tracking details.

naftiko: '0.5'
info:
  label: E-Commerce Order Fulfillment Tracker
  description: When an order is placed on BigCommerce, checks SAP inventory, creates a shipment in SAP S/4HANA, and notifies the customer via Zendesk with tracking details.
  tags:
  - ecommerce
  - fulfillment
  - bigcommerce
  - sap-s4hana
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: fulfill-order
      description: Given a BigCommerce order ID and customer email, verify inventory, create a shipment, and send tracking info to the customer.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email address for notification.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-inventory
        type: call
        call: sap.check-availability
        with:
          sku: '{{get-order.line_items[0].sku}}'
          quantity: '{{get-order.line_items[0].quantity}}'
      - name: create-shipment
        type: call
        call: sap.create-delivery
        with:
          order_reference: '{{order_id}}'
          sku: '{{get-order.line_items[0].sku}}'
          ship_to: '{{get-order.shipping_address}}'
      - name: notify-customer
        type: call
        call: zendesk.create-ticket
        with:
          requester_email: '{{customer_email}}'
          subject: Your Adidas order {{order_id}} has shipped!
          body: 'Tracking number: {{create-shipment.tracking_number}}. Estimated delivery: {{create-shipment.estimated_delivery}}.'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /A_MaterialStock
      operations:
      - name: check-availability
        method: GET
    - name: deliveries
      path: /A_OutbDeliveryHeader
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets.json
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → e-commerce-order-fulfillment-tracker.yml

Queries SAP S/4HANA for real-time stock levels of a given SKU across all regional warehouses. Used by merchandising and store operations teams.

naftiko: '0.5'
info:
  label: Product Inventory Lookup
  description: Queries SAP S/4HANA for real-time stock levels of a given SKU across all regional warehouses. Used by merchandising and store operations teams.
  tags:
  - retail
  - inventory
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-sku-inventory
      description: Look up current inventory levels for a product SKU across all Adidas distribution centers.
      inputParameters:
      - name: sku
        in: body
        type: string
        description: The Adidas product SKU identifier.
      call: sap.get-inventory
      with:
        sku: '{{sku}}'
      outputParameters:
      - name: total_available
        type: string
        mapping: $.d.AvailableStock
      - name: warehouse_breakdown
        type: string
        mapping: $.d.PlantStockDetails
      - name: reserved_quantity
        type: string
        mapping: $.d.ReservedQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → product-inventory-lookup.yml

Analyzes trend data in Snowflake, forecasts demand by category, creates collection plans in Jira, updates SAP materials, and notifies design team.

naftiko: '0.5'
info:
  label: Collection Planning Pipeline
  description: Analyzes trend data in Snowflake, forecasts demand by category, creates collection plans in Jira, updates SAP materials, and notifies design team.
  tags:
  - design
  - snowflake
  - jira
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: design
    port: 8080
    tools:
    - name: collection_planning_pipeline
      description: Orchestrate collection planning pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-sap
        type: call
        call: sap.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → collection-planning-pipeline.yml

Runs a PromQL instant query against the Adidas Prometheus cluster and returns the current metric value.

naftiko: '0.5'
info:
  label: Prometheus Metric Query
  description: Runs a PromQL instant query against the Adidas Prometheus cluster and returns the current metric value.
  tags:
  - observability
  - prometheus
  - metrics
capability:
  exposes:
  - type: mcp
    namespace: metrics
    port: 8080
    tools:
    - name: query-metric
      description: Execute a PromQL instant query and return the current value for the specified metric expression.
      inputParameters:
      - name: promql
        in: body
        type: string
        description: The PromQL expression to evaluate.
      call: prometheus.instant-query
      with:
        promql: '{{promql}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.data.result[0].value[1]
      - name: metric
        type: string
        mapping: $.data.result[0].metric
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.adidas.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
        value: '{{promql}}'
      operations:
      - name: instant-query
        method: GET
Open in Framework → View in Fleet → prometheus-metric-query.yml

Collects engagement metrics from social APIs, aggregates in Snowflake, updates HubSpot campaign records, refreshes dashboards, and notifies marketing.

naftiko: '0.5'
info:
  label: Social Media Campaign Tracker
  description: Collects engagement metrics from social APIs, aggregates in Snowflake, updates HubSpot campaign records, refreshes dashboards, and notifies marketing.
  tags:
  - marketing
  - hubspot
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: social_media_campaign_tracker
      description: Orchestrate social media campaign tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-hubspot
        type: call
        call: hubspot.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: hubspot-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → social-media-campaign-tracker.yml

Exports customer segments from Snowflake, syncs to Salesforce Marketing Cloud, validates delivery in Datadog, and notifies marketing.

naftiko: '0.5'
info:
  label: Personalization Engine Sync Pipeline
  description: Exports customer segments from Snowflake, syncs to Salesforce Marketing Cloud, validates delivery in Datadog, and notifies marketing.
  tags:
  - marketing
  - snowflake
  - salesforce
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: personalization_engine_sync_pipeline
      description: Orchestrate personalization engine sync pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-datadog
        type: call
        call: datadog.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → personalization-engine-sync-pipeline.yml

Validates shipment data from SAP against trade regulations, checks denied party lists, creates compliance records, and notifies trade compliance team.

naftiko: '0.5'
info:
  label: Cross-Border Trade Compliance
  description: Validates shipment data from SAP against trade regulations, checks denied party lists, creates compliance records, and notifies trade compliance team.
  tags:
  - trade-compliance
  - sap
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: trade-compliance
    port: 8080
    tools:
    - name: cross_border_trade_compliance
      description: Orchestrate cross-border trade compliance workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → cross-border-trade-compliance.yml

Deploys a trained model from Azure Machine Learning to Azure Kubernetes Service, registers the deployment in Datadog, and notifies the data science team in Teams.

naftiko: '0.5'
info:
  label: ML Model Deployment Pipeline
  description: Deploys a trained model from Azure Machine Learning to Azure Kubernetes Service, registers the deployment in Datadog, and notifies the data science team in Teams.
  tags:
  - machine-learning
  - azure-machine-learning
  - azure-kubernetes-service
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: deploy-model
      description: Given a model name and version, deploy to AKS, register in Datadog, and notify the team.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The Azure ML model name.
      - name: model_version
        in: body
        type: string
        description: The model version to deploy.
      - name: endpoint_name
        in: body
        type: string
        description: The AKS inference endpoint name.
      steps:
      - name: create-deployment
        type: call
        call: azure-ml.create-deployment
        with:
          model_name: '{{model_name}}'
          model_version: '{{model_version}}'
          endpoint_name: '{{endpoint_name}}'
      - name: register-monitor
        type: call
        call: datadog.create-monitor
        with:
          name: 'ML Model: {{model_name}} v{{model_version}}'
          type: metric alert
          query: avg(last_5m):avg:ml.inference.latency{model:{{model_name}}} > 500
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: data-science
          text: 'Model Deployed: {{model_name}} v{{model_version}} to {{endpoint_name}} | Status: {{create-deployment.provisioning_state}} | Monitor: {{register-monitor.id}}'
  consumes:
  - type: http
    namespace: azure-ml
    baseUri: https://ml.azure.com/api/subscriptions/$secrets.azure_subscription_id/resourceGroups/adidas-ml-rg/providers/Microsoft.MachineLearningServices/workspaces/adidas-ml
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: deployments
      path: /onlineEndpoints/{{endpoint_name}}/deployments
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: create-deployment
        method: PUT
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ml-model-deployment-pipeline.yml

When an Apache Spark job fails, logs the failure in Datadog, opens a ServiceNow incident, and notifies the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Data Pipeline Failure Handler
  description: When an Apache Spark job fails, logs the failure in Datadog, opens a ServiceNow incident, and notifies the data engineering team in Microsoft Teams.
  tags:
  - data-engineering
  - apache-spark
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: handle-spark-failure
      description: Given a Spark application ID and error details, create observability event, incident, and team alert.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Spark application ID.
      - name: job_name
        in: body
        type: string
        description: The name of the failed Spark job.
      - name: error_message
        in: body
        type: string
        description: The error message from the failure.
      steps:
      - name: log-event
        type: call
        call: datadog.create-event
        with:
          title: 'Spark Job Failure: {{job_name}}'
          text: 'App: {{application_id}} | Error: {{error_message}}'
          alert_type: error
          tags: spark,job:{{job_name}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[Data Pipeline] Spark job failed: {{job_name}}'
          category: data_engineering
          priority: '2'
          description: 'Application: {{application_id}}

            Job: {{job_name}}

            Error: {{error_message}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel: data-engineering-alerts
          text: 'Spark Failure: {{job_name}} | App: {{application_id}} | Error: {{error_message}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → data-pipeline-failure-handler.yml

Monitors order fulfillment times from SAP, checks against SLAs in Snowflake, creates escalations in ServiceNow, and notifies operations.

naftiko: '0.5'
info:
  label: Order Fulfillment SLA Monitor
  description: Monitors order fulfillment times from SAP, checks against SLAs in Snowflake, creates escalations in ServiceNow, and notifies operations.
  tags:
  - fulfillment
  - sap
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fulfillment
    port: 8080
    tools:
    - name: order_fulfillment_sla_monitor
      description: Orchestrate order fulfillment sla monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → order-fulfillment-sla-monitor.yml

Identifies affected batches in SAP, traces distribution, notifies retailers via Salesforce, creates recall task force in ServiceNow, and alerts legal.

naftiko: '0.5'
info:
  label: Product Recall Management Pipeline
  description: Identifies affected batches in SAP, traces distribution, notifies retailers via Salesforce, creates recall task force in ServiceNow, and alerts legal.
  tags:
  - quality
  - sap
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: product_recall_management_pipeline
      description: Orchestrate product recall management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → product-recall-management-pipeline.yml

Runs a Terraform plan via GitHub Actions, detects drift, opens a ServiceNow change request, and alerts the infrastructure team in Teams.

naftiko: '0.5'
info:
  label: Terraform Drift Detection and Remediation
  description: Runs a Terraform plan via GitHub Actions, detects drift, opens a ServiceNow change request, and alerts the infrastructure team in Teams.
  tags:
  - infrastructure
  - terraform
  - github-actions
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: iac-drift
    port: 8080
    tools:
    - name: detect-and-remediate-drift
      description: Given a Terraform workspace, run a plan, detect drift, and open a change request if drift is found.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      - name: repository
        in: body
        type: string
        description: The GitHub repository containing the Terraform code.
      steps:
      - name: trigger-plan
        type: call
        call: github-actions.trigger-workflow
        with:
          repository: '{{repository}}'
          workflow_id: terraform-plan.yml
          ref: main
          inputs_workspace: '{{workspace}}'
      - name: open-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Terraform drift detected: {{workspace}}'
          category: infrastructure
          description: 'Drift detected in workspace {{workspace}}. Plan run: {{trigger-plan.run_id}}. Repository: {{repository}}.'
          risk: moderate
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: infra-ops
          text: 'Terraform Drift: {{workspace}} | Change Request: {{open-change-request.number}} | Plan: {{trigger-plan.run_id}} | Repo: {{repository}}'
  consumes:
  - type: http
    namespace: github-actions
    baseUri: https://api.github.com/repos
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /{{repository}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: repository
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-drift-detection-and-remediation.yml

Receives wholesale orders in Salesforce, validates credit in SAP, creates fulfillment orders, updates Snowflake analytics, and notifies sales.

naftiko: '0.5'
info:
  label: Wholesale Order Processing Pipeline
  description: Receives wholesale orders in Salesforce, validates credit in SAP, creates fulfillment orders, updates Snowflake analytics, and notifies sales.
  tags:
  - wholesale
  - salesforce
  - sap
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: wholesale
    port: 8080
    tools:
    - name: wholesale_order_processing_pipeline
      description: Orchestrate wholesale order processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-salesforce
        type: call
        call: salesforce.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-sap
        type: call
        call: sap.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → wholesale-order-processing-pipeline.yml

Monitors transactions from Stripe, runs fraud scoring in Snowflake, blocks suspicious orders, creates cases in ServiceNow, and alerts fraud team.

naftiko: '0.5'
info:
  label: E-Commerce Fraud Detection Pipeline
  description: Monitors transactions from Stripe, runs fraud scoring in Snowflake, blocks suspicious orders, creates cases in ServiceNow, and alerts fraud team.
  tags:
  - fraud
  - stripe
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fraud
    port: 8080
    tools:
    - name: e_commerce_fraud_detection_pipeline
      description: Orchestrate e-commerce fraud detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-stripe
        type: call
        call: stripe.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: stripe-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → e-commerce-fraud-detection-pipeline.yml

Searches the Adidas product catalog index in Elasticsearch by keyword and returns matching product names, prices, and availability.

naftiko: '0.5'
info:
  label: Elasticsearch Product Search
  description: Searches the Adidas product catalog index in Elasticsearch by keyword and returns matching product names, prices, and availability.
  tags:
  - search
  - elasticsearch
  - product-catalog
capability:
  exposes:
  - type: mcp
    namespace: product-search
    port: 8080
    tools:
    - name: search-products
      description: Search the product catalog by keyword and return matching products with prices and availability.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Free-text search query for products.
      - name: limit
        in: body
        type: string
        description: Maximum number of results to return.
      call: elasticsearch.search
      with:
        query: '{{query}}'
        limit: '{{limit}}'
      outputParameters:
      - name: total_hits
        type: string
        mapping: $.hits.total.value
      - name: products
        type: string
        mapping: $.hits.hits
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://es.adidas.internal:9200
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: product-index
      path: /products/_search
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-product-search.yml

When SonarQube detects a critical vulnerability, creates a GitHub issue, opens a ServiceNow security incident, and alerts the security team via Teams.

naftiko: '0.5'
info:
  label: Security Vulnerability Response
  description: When SonarQube detects a critical vulnerability, creates a GitHub issue, opens a ServiceNow security incident, and alerts the security team via Teams.
  tags:
  - security
  - sonarqube
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-response
    port: 8080
    tools:
    - name: handle-vulnerability
      description: Given a SonarQube project and vulnerability details, create tracking issue, security incident, and alert the team.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      - name: vulnerability_id
        in: body
        type: string
        description: The SonarQube vulnerability issue key.
      - name: severity
        in: body
        type: string
        description: Vulnerability severity (CRITICAL, HIGH, MEDIUM, LOW).
      steps:
      - name: get-vulnerability
        type: call
        call: sonarqube.get-issue
        with:
          issue_key: '{{vulnerability_id}}'
      - name: create-gh-issue
        type: call
        call: github.create-issue
        with:
          repository: adidas/{{project_key}}
          title: '[Security] {{severity}}: {{get-vulnerability.message}}'
          body: 'SonarQube: {{vulnerability_id}}

            Severity: {{severity}}

            Component: {{get-vulnerability.component}}

            Line: {{get-vulnerability.line}}'
          labels: security,{{severity}}
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security vulnerability: {{project_key}} — {{severity}}'
          category: security
          priority: '1'
          description: '{{get-vulnerability.message}}. GitHub: {{create-gh-issue.html_url}}'
      - name: alert-security
        type: call
        call: msteams.send-message
        with:
          channel: security-alerts
          text: 'Security Alert: {{severity}} vulnerability in {{project_key}} | {{get-vulnerability.message}} | GH: {{create-gh-issue.html_url}} | Incident: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.adidas.internal/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: issues
      path: /issues/search
      inputParameters:
      - name: issues
        in: query
        value: '{{issue_key}}'
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com/repos
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /{{repository}}/issues
      inputParameters:
      - name: repository
        in: path
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-response.yml

Retrieves PagerDuty incident details for Adidas on-call teams.

naftiko: '0.5'
info:
  label: PagerDuty Incident Details
  description: Retrieves PagerDuty incident details for Adidas on-call teams.
  tags:
  - devops
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: incident-mgmt
    port: 8080
    tools:
    - name: get-incident
      description: Look up incident at Adidas.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The incident_id to look up.
      call: pagerduty.get-incident_id
      with:
        incident_id: '{{incident_id}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: pagerduty_incident_details
        method: GET
Open in Framework → View in Fleet → pagerduty-incident-details.yml

Calculates loyalty points from Stripe transactions, updates member profile in Salesforce, triggers reward notification, and syncs to analytics.

naftiko: '0.5'
info:
  label: Customer Loyalty Rewards Processor
  description: Calculates loyalty points from Stripe transactions, updates member profile in Salesforce, triggers reward notification, and syncs to analytics.
  tags:
  - loyalty
  - stripe
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: loyalty
    port: 8080
    tools:
    - name: customer_loyalty_rewards_processor
      description: Orchestrate customer loyalty rewards processor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-stripe
        type: call
        call: stripe.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: stripe-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → customer-loyalty-rewards-processor.yml

Tracks sponsorship contracts in SAP, validates deliverables, updates Salesforce, creates renewal tasks in Jira, and notifies partnership team.

naftiko: '0.5'
info:
  label: Athlete Sponsorship Contract Pipeline
  description: Tracks sponsorship contracts in SAP, validates deliverables, updates Salesforce, creates renewal tasks in Jira, and notifies partnership team.
  tags:
  - sponsorship
  - sap
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sponsorship
    port: 8080
    tools:
    - name: athlete_sponsorship_contract_pipeline
      description: Orchestrate athlete sponsorship contract pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → athlete-sponsorship-contract-pipeline.yml

When Palo Alto Networks detects a threat, blocks the source IP via Cisco firewall, creates a ServiceNow security incident, and alerts the SOC team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Network Incident Auto-Remediation
  description: When Palo Alto Networks detects a threat, blocks the source IP via Cisco firewall, creates a ServiceNow security incident, and alerts the SOC team in Microsoft Teams.
  tags:
  - security
  - network
  - palo-alto-networks
  - cisco
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: remediate-threat
      description: Given a threat event from Palo Alto, block the source IP, create a security incident, and alert the SOC.
      inputParameters:
      - name: threat_id
        in: body
        type: string
        description: The Palo Alto threat log ID.
      - name: source_ip
        in: body
        type: string
        description: The source IP address of the threat.
      - name: threat_type
        in: body
        type: string
        description: The threat classification.
      steps:
      - name: get-threat-details
        type: call
        call: paloalto.get-threat-log
        with:
          threat_id: '{{threat_id}}'
      - name: block-ip
        type: call
        call: cisco.add-acl-entry
        with:
          source_ip: '{{source_ip}}'
          action: deny
          description: 'Auto-blocked: {{threat_type}} — {{threat_id}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Network threat: {{threat_type}} from {{source_ip}}'
          category: security
          priority: '1'
          description: 'Threat: {{get-threat-details.description}} | Source: {{source_ip}} | Auto-blocked via Cisco ACL. Palo Alto log: {{threat_id}}.'
      - name: alert-soc
        type: call
        call: msteams.send-message
        with:
          channel: soc-alerts
          text: 'Network Threat Remediated: {{threat_type}} from {{source_ip}} | Blocked: YES | Incident: {{create-security-incident.number}} | PA Log: {{threat_id}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.adidas.com/api
    authentication:
      type: bearer
      token: $secrets.paloalto_api_key
    resources:
    - name: threat-logs
      path: /logs/threat/{{threat_id}}
      inputParameters:
      - name: threat_id
        in: path
      operations:
      - name: get-threat-log
        method: GET
  - type: http
    namespace: cisco
    baseUri: https://cisco-fw.adidas.internal/restconf/data
    authentication:
      type: basic
      username: $secrets.cisco_user
      password: $secrets.cisco_password
    resources:
    - name: acl
      path: /Cisco-IOS-XE-native:native/ip/access-list
      operations:
      - name: add-acl-entry
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → network-incident-auto-remediation.yml

Monitors POS anomalies from SAP, cross-references with video analytics, creates investigation cases in ServiceNow, and alerts loss prevention.

naftiko: '0.5'
info:
  label: Retail Theft Prevention Pipeline
  description: Monitors POS anomalies from SAP, cross-references with video analytics, creates investigation cases in ServiceNow, and alerts loss prevention.
  tags:
  - loss-prevention
  - sap
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: loss-prevention
    port: 8080
    tools:
    - name: retail_theft_prevention_pipeline
      description: Orchestrate retail theft prevention pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → retail-theft-prevention-pipeline.yml

Exports a GitLab project's issues and pipelines, creates corresponding work items in Azure DevOps, and logs the migration progress in a Google Sheet.

naftiko: '0.5'
info:
  label: GitLab to Azure DevOps Migration Tracker
  description: Exports a GitLab project's issues and pipelines, creates corresponding work items in Azure DevOps, and logs the migration progress in a Google Sheet.
  tags:
  - devops
  - migration
  - gitlab
  - azure-devops
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: devops-migration
    port: 8080
    tools:
    - name: migrate-project
      description: Given a GitLab project ID and Azure DevOps project, migrate issues and pipeline config and track progress.
      inputParameters:
      - name: gitlab_project_id
        in: body
        type: string
        description: The GitLab project ID.
      - name: azdo_project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: tracker_sheet_id
        in: body
        type: string
        description: Google Sheets ID for migration tracking.
      steps:
      - name: export-issues
        type: call
        call: gitlab.list-issues
        with:
          project_id: '{{gitlab_project_id}}'
      - name: create-work-items
        type: call
        call: azdo.create-work-item
        with:
          project: '{{azdo_project}}'
          type: User Story
          title: 'Migrated from GitLab: {{export-issues.title}}'
          description: '{{export-issues.description}}'
      - name: log-progress
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: '{{tracker_sheet_id}}'
          range: Migration!A1
          values: '{{gitlab_project_id}},{{azdo_project}},{{export-issues.total_count}},{{create-work-items.count}},completed'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.adidas.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: issues
      path: /projects/{{project_id}}/issues
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: list-issues
        method: GET
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/adidas
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: work-items
      path: /{{project}}/_apis/wit/workitems/$User Story
      inputParameters:
      - name: project
        in: path
      operations:
      - name: create-work-item
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → gitlab-to-azure-devops-migration-tracker.yml

Collects engagement metrics from Instagram, Facebook, Twitter, and YouTube for a given campaign hashtag and posts a consolidated summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Social Media Engagement Aggregator
  description: Collects engagement metrics from Instagram, Facebook, Twitter, and YouTube for a given campaign hashtag and posts a consolidated summary to Microsoft Teams.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - twitter
  - youtube
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: aggregate-engagement
      description: Given a campaign hashtag, collect engagement metrics from all social channels and post a summary to Teams.
      inputParameters:
      - name: hashtag
        in: body
        type: string
        description: 'The campaign hashtag to track (without #).'
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      steps:
      - name: get-instagram-metrics
        type: call
        call: instagram.get-hashtag-metrics
        with:
          hashtag: '{{hashtag}}'
          date_range: '{{date_range}}'
      - name: get-facebook-metrics
        type: call
        call: facebook.get-page-insights
        with:
          hashtag: '{{hashtag}}'
          date_range: '{{date_range}}'
      - name: get-twitter-metrics
        type: call
        call: twitter.get-tweet-metrics
        with:
          hashtag: '{{hashtag}}'
          date_range: '{{date_range}}'
      - name: get-youtube-metrics
        type: call
        call: youtube.get-video-metrics
        with:
          hashtag: '{{hashtag}}'
          date_range: '{{date_range}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel: marketing-analytics
          text: 'Campaign #{{hashtag}} Engagement Summary | IG: {{get-instagram-metrics.total_engagement}} | FB: {{get-facebook-metrics.total_engagement}} | Twitter: {{get-twitter-metrics.total_engagement}} | YT: {{get-youtube-metrics.total_views}}'
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: hashtag-search
      path: /ig_hashtag_search
      operations:
      - name: get-hashtag-metrics
        method: GET
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_page_token
    resources:
    - name: insights
      path: /{{page_id}}/insights
      operations:
      - name: get-page-insights
        method: GET
  - 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
      operations:
      - name: get-tweet-metrics
        method: GET
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_api_key
    resources:
    - name: search
      path: /search
      operations:
      - name: get-video-metrics
        method: GET
  - 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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → social-media-engagement-aggregator.yml

Validates product labels against regulatory databases, checks SAP material master data, creates compliance records, and notifies regulatory team.

naftiko: '0.5'
info:
  label: Compliance Labeling Verification
  description: Validates product labels against regulatory databases, checks SAP material master data, creates compliance records, and notifies regulatory team.
  tags:
  - compliance
  - sap
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: compliance_labeling_verification
      description: Orchestrate compliance labeling verification workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → compliance-labeling-verification.yml

Fetches open problems from Dynatrace for a given management zone and returns problem titles, severity levels, and impacted entities.

naftiko: '0.5'
info:
  label: Dynatrace Problem Query
  description: Fetches open problems from Dynatrace for a given management zone and returns problem titles, severity levels, and impacted entities.
  tags:
  - observability
  - dynatrace
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-open-problems
      description: Query Dynatrace for open problems in a management zone, returning severity and impacted entities.
      inputParameters:
      - name: management_zone
        in: body
        type: string
        description: The Dynatrace management zone name.
      call: dynatrace.list-problems
      with:
        management_zone: '{{management_zone}}'
      outputParameters:
      - name: total_count
        type: string
        mapping: $.totalCount
      - name: problems
        type: string
        mapping: $.problems
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://adidas.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems
      inputParameters:
      - name: problemSelector
        in: query
        value: managementZoneIds({{management_zone}}),status(OPEN)
      operations:
      - name: list-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-problem-query.yml

Runs a top-N sales query against SAP HANA for a given product category and region, returning aggregated revenue and units sold.

naftiko: '0.5'
info:
  label: SAP HANA Sales Cube Query
  description: Runs a top-N sales query against SAP HANA for a given product category and region, returning aggregated revenue and units sold.
  tags:
  - analytics
  - sap-hana
  - sales
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: query-sales-cube
      description: Query SAP HANA sales analytics cube for revenue and units sold by product category and region.
      inputParameters:
      - name: category
        in: body
        type: string
        description: Product category (e.g. footwear, apparel, accessories).
      - name: region
        in: body
        type: string
        description: Sales region code (e.g. EMEA, NAM, APAC).
      call: sap-hana.run-query
      with:
        category: '{{category}}'
        region: '{{region}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.results[0].REVENUE
      - name: units_sold
        type: string
        mapping: $.results[0].UNITS
  consumes:
  - type: http
    namespace: sap-hana
    baseUri: https://adidas-hana.sap.com/sap/hana/xs/api
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: sales-cube
      path: /analytics/sales
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → sap-hana-sales-cube-query.yml

Retrieves Okta user profile for Adidas identity management.

naftiko: '0.5'
info:
  label: Okta User Profile Lookup
  description: Retrieves Okta user profile for Adidas identity management.
  tags:
  - security
  - okta
  - identity
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user
      description: Look up user at Adidas.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user_email to look up.
      call: okta.get-user_email
      with:
        user_email: '{{user_email}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://adidas.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta_user_profile_lookup
        method: GET
Open in Framework → View in Fleet → okta-user-profile-lookup.yml

Collects carbon footprint data from SAP, aggregates in Snowflake, generates ESG reports in Power BI, and publishes to sustainability team.

naftiko: '0.5'
info:
  label: Sustainability Metrics Collection Pipeline
  description: Collects carbon footprint data from SAP, aggregates in Snowflake, generates ESG reports in Power BI, and publishes to sustainability team.
  tags:
  - sustainability
  - sap
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: sustainability_metrics_collector
      description: Orchestrate sustainability metrics collection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → sustainability-metrics-collection-pipeline.yml

Retrieves a Salesforce lead record and returns scoring details, source channel, and status. Used by sales development reps to prioritize outreach.

naftiko: '0.5'
info:
  label: Salesforce Lead Qualification
  description: Retrieves a Salesforce lead record and returns scoring details, source channel, and status. Used by sales development reps to prioritize outreach.
  tags:
  - sales
  - salesforce
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: get-lead-details
      description: Look up a Salesforce lead by ID and return qualification score, status, and source.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID.
      call: salesforce.get-lead
      with:
        lead_id: '{{lead_id}}'
      outputParameters:
      - name: lead_score
        type: string
        mapping: $.Lead_Score__c
      - name: status
        type: string
        mapping: $.Status
      - name: source
        type: string
        mapping: $.LeadSource
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
Open in Framework → View in Fleet → salesforce-lead-qualification.yml

Extracts return data from SAP, analyzes patterns in Snowflake, identifies quality issues, creates Jira tickets, and notifies product team.

naftiko: '0.5'
info:
  label: Product Return Analysis Pipeline
  description: Extracts return data from SAP, analyzes patterns in Snowflake, identifies quality issues, creates Jira tickets, and notifies product team.
  tags:
  - returns
  - sap
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: returns
    port: 8080
    tools:
    - name: product_return_analysis_pipeline
      description: Orchestrate product return analysis pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → product-return-analysis-pipeline.yml

Retrieves a BigCommerce order by ID and returns order status, total, shipping address, and line items.

naftiko: '0.5'
info:
  label: BigCommerce Order Lookup
  description: Retrieves a BigCommerce order by ID and returns order status, total, shipping address, and line items.
  tags:
  - ecommerce
  - bigcommerce
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: ecommerce
    port: 8080
    tools:
    - name: get-order
      description: Look up a BigCommerce order by ID and return its status, total, and shipping details.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      call: bigcommerce.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: total
        type: string
        mapping: $.total_inc_tax
      - name: shipping_address
        type: string
        mapping: $.shipping_addresses
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    inputParameters:
    - name: X-Auth-Token
      in: header
      value: $secrets.bigcommerce_auth_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → bigcommerce-order-lookup.yml

When OpenTelemetry detects high-latency traces, extracts span details, creates a Dynatrace problem annotation, and opens a ServiceNow incident with trace context.

naftiko: '0.5'
info:
  label: OpenTelemetry Trace to Incident
  description: When OpenTelemetry detects high-latency traces, extracts span details, creates a Dynatrace problem annotation, and opens a ServiceNow incident with trace context.
  tags:
  - observability
  - opentelemetry
  - dynatrace
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trace-incident
    port: 8080
    tools:
    - name: escalate-trace
      description: Given an OpenTelemetry trace ID, extract details, annotate in Dynatrace, and create an incident.
      inputParameters:
      - name: trace_id
        in: body
        type: string
        description: The OpenTelemetry trace ID.
      - name: service_name
        in: body
        type: string
        description: The affected service name.
      - name: latency_ms
        in: body
        type: string
        description: The observed latency in milliseconds.
      steps:
      - name: get-trace
        type: call
        call: otel.get-trace
        with:
          trace_id: '{{trace_id}}'
      - name: annotate-dynatrace
        type: call
        call: dynatrace.create-event
        with:
          entity_id: '{{service_name}}'
          event_type: CUSTOM_ANNOTATION
          description: 'High latency trace: {{trace_id}} — {{latency_ms}}ms'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'High latency: {{service_name}} — {{latency_ms}}ms'
          category: performance
          priority: '2'
          description: 'Trace ID: {{trace_id}} | Service: {{service_name}} | Latency: {{latency_ms}}ms | Root span: {{get-trace.root_span_name}} | Dynatrace event: {{annotate-dynatrace.id}}'
  consumes:
  - type: http
    namespace: otel
    baseUri: https://otel-collector.adidas.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.otel_token
    resources:
    - name: traces
      path: /traces/{{trace_id}}
      inputParameters:
      - name: trace_id
        in: path
      operations:
      - name: get-trace
        method: GET
  - type: http
    namespace: dynatrace
    baseUri: https://adidas.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: events
      path: /events/ingest
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
Open in Framework → View in Fleet → opentelemetry-trace-to-incident.yml

Tracks product stages in SAP PLM, syncs to Snowflake for analytics, creates phase-gate tasks in Jira, and notifies product management.

naftiko: '0.5'
info:
  label: Product Lifecycle Management Pipeline
  description: Tracks product stages in SAP PLM, syncs to Snowflake for analytics, creates phase-gate tasks in Jira, and notifies product management.
  tags:
  - plm
  - sap
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: plm
    port: 8080
    tools:
    - name: product_lifecycle_management_pipeline
      description: Orchestrate product lifecycle management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → product-lifecycle-management-pipeline.yml

Pulls vendor records from Oracle E-Business Suite, cross-references compliance data in SAP, and generates an audit report in SharePoint with findings logged to ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Compliance Audit
  description: Pulls vendor records from Oracle E-Business Suite, cross-references compliance data in SAP, and generates an audit report in SharePoint with findings logged to ServiceNow.
  tags:
  - compliance
  - oracle-e-business-suite
  - sap-s4hana
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-compliance
    port: 8080
    tools:
    - name: run-vendor-audit
      description: Given a vendor ID, pull records from Oracle and SAP, then generate an audit report and log findings.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The vendor identifier.
      - name: audit_type
        in: body
        type: string
        description: Type of audit (sustainability, labor, quality).
      steps:
      - name: get-oracle-vendor
        type: call
        call: oracle.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: get-sap-compliance
        type: call
        call: sap.get-vendor-compliance
        with:
          vendor_id: '{{vendor_id}}'
          audit_type: '{{audit_type}}'
      - name: create-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: compliance_audits
          folder_path: Vendors/{{get-oracle-vendor.vendor_name}}
          file_name: audit_{{audit_type}}_report.docx
          content: 'Vendor: {{get-oracle-vendor.vendor_name}} | Type: {{audit_type}} | Score: {{get-sap-compliance.score}} | Findings: {{get-sap-compliance.findings_count}}'
      - name: log-findings
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor audit: {{get-oracle-vendor.vendor_name}} — {{audit_type}}'
          category: compliance
          description: 'Score: {{get-sap-compliance.score}}. Findings: {{get-sap-compliance.findings_count}}. Report: {{create-report.url}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://oracle-ebs.adidas.com/webservices/rest/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: vendors
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: compliance
      path: /A_Supplier('{{vendor_id}}')/to_ComplianceData
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor-compliance
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
Open in Framework → View in Fleet → vendor-compliance-audit.yml

Tracks program participation from Workday, calculates engagement in Snowflake, updates Power BI reports, and notifies HR team.

naftiko: '0.5'
info:
  label: Employee Wellness Program Pipeline
  description: Tracks program participation from Workday, calculates engagement in Snowflake, updates Power BI reports, and notifies HR team.
  tags:
  - hr
  - workday
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: employee_wellness_program_pipeline
      description: Orchestrate employee wellness program pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/adidas
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → employee-wellness-program-pipeline.yml

Sends a message to a Slack channel for Adidas notifications.

naftiko: '0.5'
info:
  label: Slack Channel Post
  description: Sends a message to a Slack channel for Adidas notifications.
  tags:
  - collaboration
  - slack
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: send-message
      description: Post to Slack at Adidas.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: The channel to look up.
      call: slack.get-channel
      with:
        channel: '{{channel}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack_channel_post
        method: GET
Open in Framework → View in Fleet → slack-channel-post.yml

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

naftiko: '0.5'
info:
  label: ServiceNow Incident Status
  description: Looks up a ServiceNow incident by number and returns its state, priority, assigned group, and resolution notes.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident
      description: Retrieve a ServiceNow incident record by number including state, priority, and assignment.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g. INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state
      - name: priority
        type: string
        mapping: $.result[0].priority
      - name: assigned_group
        type: string
        mapping: $.result[0].assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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}}
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

Triggers Power BI dataset refresh for Adidas reporting.

naftiko: '0.5'
info:
  label: Power BI Refresh Trigger
  description: Triggers Power BI dataset refresh for Adidas reporting.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: trigger-refresh
      description: Trigger refresh at Adidas.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The dataset_id to look up.
      call: powerbi.get-dataset_id
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: power_bi_refresh_trigger
        method: GET
Open in Framework → View in Fleet → power-bi-refresh-trigger.yml

When a SAP S/4HANA purchase order exceeds a spend threshold, routes for manager approval via PeopleSoft and notifies the requestor in Microsoft Teams with approval status.

naftiko: '0.5'
info:
  label: SAP Purchase Order Approval Pipeline
  description: When a SAP S/4HANA purchase order exceeds a spend threshold, routes for manager approval via PeopleSoft and notifies the requestor in Microsoft Teams with approval status.
  tags:
  - procurement
  - sap-s4hana
  - peoplesoft
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: po-approval
    port: 8080
    tools:
    - name: route-po-approval
      description: Given a PO number and requestor ID, check the amount, route for approval, and notify both parties.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: requestor_id
        in: body
        type: string
        description: The PeopleSoft employee ID of the requestor.
      - name: spend_amount
        in: body
        type: string
        description: The total PO amount.
      steps:
      - name: get-po
        type: call
        call: sap.get-purchase-order
        with:
          po_number: '{{po_number}}'
      - name: get-approver
        type: call
        call: peoplesoft.get-manager
        with:
          employee_id: '{{requestor_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-approver.manager_email}}'
          text: 'PO Approval Required: PO {{po_number}} for {{spend_amount}} from {{get-po.vendor_name}}. Please review and approve.'
      - name: notify-requestor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-approver.employee_email}}'
          text: Your PO {{po_number}} ({{spend_amount}}) has been routed to {{get-approver.manager_name}} for approval.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-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-purchase-order
        method: GET
  - type: http
    namespace: peoplesoft
    baseUri: https://peoplesoft.adidas.com/psftapi/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees/{{employee_id}}/manager
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-manager
        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
Open in Framework → View in Fleet → sap-purchase-order-approval-pipeline.yml

Retrieves a HubSpot CRM contact by email address and returns lifecycle stage, last activity date, and deal associations.

naftiko: '0.5'
info:
  label: HubSpot Contact Lookup
  description: Retrieves a HubSpot CRM contact by email address and returns lifecycle stage, last activity date, and deal associations.
  tags:
  - crm
  - hubspot
  - contacts
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-contact-by-email
      description: Look up a HubSpot contact by email and return lifecycle stage, last activity, and associated deals.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The contact email address.
      call: hubspot.get-contact
      with:
        email: '{{email}}'
      outputParameters:
      - name: lifecycle_stage
        type: string
        mapping: $.properties.lifecyclestage
      - name: last_activity
        type: string
        mapping: $.properties.notes_last_updated
      - name: deal_count
        type: string
        mapping: $.properties.num_associated_deals
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}
      inputParameters:
      - name: email
        in: path
      - name: idProperty
        in: query
        value: email
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-contact-lookup.yml

Forecasts volume from Snowflake, optimizes shifts in Workday, syncs schedules to SAP, updates Grafana dashboards, and notifies warehouse managers.

naftiko: '0.5'
info:
  label: Warehouse Labor Scheduling Pipeline
  description: Forecasts volume from Snowflake, optimizes shifts in Workday, syncs schedules to SAP, updates Grafana dashboards, and notifies warehouse managers.
  tags:
  - logistics
  - snowflake
  - workday
  - sap
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: warehouse_labor_scheduling_pipeline
      description: Orchestrate warehouse labor scheduling pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-workday
        type: call
        call: workday.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-sap
        type: call
        call: sap.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-grafana
        type: call
        call: grafana.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/adidas
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://adidas-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → warehouse-labor-scheduling-pipeline.yml

Analyzes market data in Snowflake, evaluates regulatory requirements, creates business case in Confluence-equivalent, and notifies strategy team.

naftiko: '0.5'
info:
  label: New Market Entry Assessment
  description: Analyzes market data in Snowflake, evaluates regulatory requirements, creates business case in Confluence-equivalent, and notifies strategy team.
  tags:
  - strategy
  - snowflake
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: strategy
    port: 8080
    tools:
    - name: new_market_entry_assessment
      description: Orchestrate new market entry assessment workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → new-market-entry-assessment.yml

Orchestrates creative asset production by uploading a design brief to Box, triggering an Adobe Creative Cloud workflow, and publishing the final asset to SharePoint and Notion.

naftiko: '0.5'
info:
  label: Content Asset Production Pipeline
  description: Orchestrates creative asset production by uploading a design brief to Box, triggering an Adobe Creative Cloud workflow, and publishing the final asset to SharePoint and Notion.
  tags:
  - creative
  - content-production
  - box
  - adobe-creative-cloud
  - sharepoint
  - notion
capability:
  exposes:
  - type: mcp
    namespace: content-production
    port: 8080
    tools:
    - name: produce-asset
      description: Given an asset brief, upload to Box, trigger creative workflow, and publish to SharePoint and Notion.
      inputParameters:
      - name: brief_title
        in: body
        type: string
        description: Title of the creative brief.
      - name: campaign_name
        in: body
        type: string
        description: The marketing campaign name.
      - name: asset_type
        in: body
        type: string
        description: Type of asset (banner, video, social, email).
      steps:
      - name: upload-brief
        type: call
        call: box.upload-file
        with:
          folder_id: $secrets.creative_briefs_folder
          file_name: '{{brief_title}}_brief.pdf'
          campaign: '{{campaign_name}}'
      - name: trigger-creative
        type: call
        call: adobe-cc.start-workflow
        with:
          workflow_template: '{{asset_type}}_production'
          brief_url: '{{upload-brief.shared_link}}'
          campaign: '{{campaign_name}}'
      - name: publish-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: marketing_assets
          folder_path: Campaigns/{{campaign_name}}/{{asset_type}}
          file_url: '{{trigger-creative.output_url}}'
      - name: log-in-notion
        type: call
        call: notion.create-page
        with:
          parent_id: $secrets.creative_tracker_db
          title: '{{brief_title}}'
          properties_campaign: '{{campaign_name}}'
          properties_type: '{{asset_type}}'
          properties_sharepoint_url: '{{publish-sharepoint.url}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: adobe-cc
    baseUri: https://cc-api.adobe.io/v1
    authentication:
      type: bearer
      token: $secrets.adobe_cc_token
    resources:
    - name: workflows
      path: /workflows
      operations:
      - name: start-workflow
        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: upload-file
        method: PUT
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    inputParameters:
    - name: Notion-Version
      in: header
      value: '2022-06-28'
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → content-asset-production-pipeline.yml

Queries Microsoft Power Automate for failed flow runs, creates ServiceNow incidents for each failure, and posts a summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Power Automate Workflow Status Reporter
  description: Queries Microsoft Power Automate for failed flow runs, creates ServiceNow incidents for each failure, and posts a summary to Microsoft Teams.
  tags:
  - automation
  - microsoft-power-automate
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rpa-ops
    port: 8080
    tools:
    - name: report-failed-flows
      description: Given a date range, find all failed Power Automate flows, create incidents, and summarize in Teams.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date for the search in YYYY-MM-DD format.
      - name: date_to
        in: body
        type: string
        description: End date for the search in YYYY-MM-DD format.
      steps:
      - name: get-failed-runs
        type: call
        call: power-automate.list-failed-runs
        with:
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: create-incidents
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Power Automate failure: {{get-failed-runs.flow_name}}'
          category: automation
          priority: '3'
          description: 'Flow: {{get-failed-runs.flow_name}} | Run ID: {{get-failed-runs.run_id}} | Error: {{get-failed-runs.error_message}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel: automation-ops
          text: 'Power Automate Failure Summary ({{date_from}} to {{date_to}}): {{get-failed-runs.total_failures}} failed runs | Incident: {{create-incidents.number}}'
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flow-runs
      path: /environments/$secrets.pa_environment_id/flows
      operations:
      - name: list-failed-runs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-automate-workflow-status-reporter.yml

Collects vendor delivery data from SAP, calculates scores in Snowflake, updates Salesforce vendor records, and notifies procurement.

naftiko: '0.5'
info:
  label: Vendor Performance Scorecard Pipeline
  description: Collects vendor delivery data from SAP, calculates scores in Snowflake, updates Salesforce vendor records, and notifies procurement.
  tags:
  - procurement
  - sap
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: vendor_performance_scorecard_pipeline
      description: Orchestrate vendor performance scorecard pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-salesforce
        type: call
        call: salesforce.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → vendor-performance-scorecard-pipeline.yml

Retrieves a Zendesk support ticket by ID including status, priority, assignee, and customer satisfaction rating. Used by customer service managers.

naftiko: '0.5'
info:
  label: Zendesk Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID including status, priority, assignee, and customer satisfaction rating. Used by customer service managers.
  tags:
  - customer-service
  - zendesk
  - support
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk support ticket and return its status, priority, assignee, and satisfaction rating.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
      - name: assignee
        type: string
        mapping: $.ticket.assignee_id
      - name: satisfaction_rating
        type: string
        mapping: $.ticket.satisfaction_rating.score
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}.json
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-ticket-lookup.yml

Retrieves a Stripe payment intent by ID and returns amount, status, currency, and last four digits of the card used. Used by finance operations.

naftiko: '0.5'
info:
  label: Stripe Payment Lookup
  description: Retrieves a Stripe payment intent by ID and returns amount, status, currency, and last four digits of the card used. Used by finance operations.
  tags:
  - finance
  - stripe
  - payments
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment
      description: Look up a Stripe payment intent by ID and return its amount, status, and payment method details.
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: The Stripe payment intent ID (e.g. pi_xxx).
      call: stripe.get-payment-intent
      with:
        payment_intent_id: '{{payment_intent_id}}'
      outputParameters:
      - name: amount
        type: string
        mapping: $.amount
      - name: currency
        type: string
        mapping: $.currency
      - name: status
        type: string
        mapping: $.status
      - name: card_last4
        type: string
        mapping: $.payment_method.card.last4
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{payment_intent_id}}
      inputParameters:
      - name: payment_intent_id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
Open in Framework → View in Fleet → stripe-payment-lookup.yml

Collects influencer metrics from social APIs, calculates ROI in Snowflake, updates HubSpot campaigns, and notifies the brand team.

naftiko: '0.5'
info:
  label: Influencer Campaign ROI Calculator
  description: Collects influencer metrics from social APIs, calculates ROI in Snowflake, updates HubSpot campaigns, and notifies the brand team.
  tags:
  - marketing
  - hubspot
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: influencer_campaign_roi_calculator
      description: Orchestrate influencer campaign roi calculator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-hubspot
        type: call
        call: hubspot.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: hubspot-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → influencer-campaign-roi-calculator.yml

Retrieves Salesforce account details for Adidas sales teams.

naftiko: '0.5'
info:
  label: Salesforce Account Info
  description: Retrieves Salesforce account details for Adidas sales teams.
  tags:
  - crm
  - salesforce
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up account at Adidas.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The account_id to look up.
      call: salesforce.get-account_id
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce_account_info
        method: GET
Open in Framework → View in Fleet → salesforce-account-info.yml

Pulls campaign spend from Adobe Campaign, payment data from Stripe, and reconciles against the budget in SAP BW, then updates a Microsoft Excel tracker on SharePoint.

naftiko: '0.5'
info:
  label: Marketing Budget Tracker Sync
  description: Pulls campaign spend from Adobe Campaign, payment data from Stripe, and reconciles against the budget in SAP BW, then updates a Microsoft Excel tracker on SharePoint.
  tags:
  - finance
  - marketing
  - adobe-campaign
  - stripe
  - sap-bw
  - microsoft-excel
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: budget-tracking
    port: 8080
    tools:
    - name: sync-marketing-budget
      description: Given a campaign ID and fiscal period, pull spend data from all channels and reconcile against budget.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The marketing campaign identifier.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g. 2026-Q1).
      steps:
      - name: get-campaign-spend
        type: call
        call: adobe-campaign.get-delivery-stats
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-payment-totals
        type: call
        call: stripe.get-balance-transactions
        with:
          campaign_reference: '{{campaign_id}}'
          period: '{{fiscal_period}}'
      - name: get-budget
        type: call
        call: sap-bw.get-budget-allocation
        with:
          cost_center: marketing
          period: '{{fiscal_period}}'
      - name: update-excel
        type: call
        call: sharepoint.update-excel-range
        with:
          site_id: finance_reports
          workbook_path: Budgets/Marketing_{{fiscal_period}}.xlsx
          range: Summary!A2
          values: '{{campaign_id}},{{get-campaign-spend.total_cost}},{{get-payment-totals.net_amount}},{{get-budget.allocated}},{{get-budget.remaining}}'
  consumes:
  - type: http
    namespace: adobe-campaign
    baseUri: https://mc.adobe.io/adidas/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    resources:
    - name: deliveries
      path: /deliveries/{{campaign_id}}/stats
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-delivery-stats
        method: GET
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: balance-transactions
      path: /balance_transactions
      operations:
      - name: get-balance-transactions
        method: GET
  - type: http
    namespace: sap-bw
    baseUri: https://adidas-bw.sap.com/sap/bw/odata/v1
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: budgets
      path: /ZBUDGET_ALLOCATION
      operations:
      - name: get-budget-allocation
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: excel
      path: /{{site_id}}/drive/root:/{{workbook_path}}:/workbook/worksheets/{{range}}
      inputParameters:
      - name: site_id
        in: path
      - name: workbook_path
        in: path
      - name: range
        in: path
      operations:
      - name: update-excel-range
        method: PATCH
Open in Framework → View in Fleet → marketing-budget-tracker-sync.yml

Retrieves page-level performance metrics from Adobe Analytics for a specified report suite and page path.

naftiko: '0.5'
info:
  label: Adobe Analytics Page Performance
  description: Retrieves page-level performance metrics from Adobe Analytics for a specified report suite and page path.
  tags:
  - analytics
  - adobe-analytics
  - ecommerce
capability:
  exposes:
  - type: mcp
    namespace: digital-analytics
    port: 8080
    tools:
    - name: get-page-performance
      description: Query Adobe Analytics for page views, bounce rate, and average time on page for a given URL path.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: page_path
        in: body
        type: string
        description: The URL path to analyze.
      call: adobe-analytics.get-report
      with:
        report_suite_id: '{{report_suite_id}}'
        page_path: '{{page_path}}'
      outputParameters:
      - name: page_views
        type: string
        mapping: $.rows[0].data[0]
      - name: bounce_rate
        type: string
        mapping: $.rows[0].data[1]
      - name: avg_time_on_page
        type: string
        mapping: $.rows[0].data[2]
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/adidas/reports
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_client_id
    resources:
    - name: reports
      path: /ranked
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-page-performance.yml

On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Handler
  description: On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams.
  tags:
  - devops
  - github-actions
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a pipeline run ID, repo, and branch, create observability marker, open incident, and alert the team.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: repository
        in: body
        type: string
        description: The GitHub repository (org/repo format).
      - name: branch
        in: body
        type: string
        description: The branch that failed.
      - name: failed_job
        in: body
        type: string
        description: Name of the failed job.
      steps:
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline Failure: {{repository}} / {{branch}}'
          text: 'Run ID: {{run_id}} | Job: {{failed_job}}'
          alert_type: error
          tags: repo:{{repository}},branch:{{branch}}
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[CI Failure] {{repository}} / {{branch}} — {{failed_job}}'
          category: software
          priority: '3'
          description: 'GitHub Actions run {{run_id}} failed on {{branch}} in {{repository}}. Job: {{failed_job}}.'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel: engineering-alerts
          text: 'Pipeline Failure: {{repository}} | Branch: {{branch}} | Job: {{failed_job}} | Incident: {{open-incident.number}} | Run: https://github.com/{{repository}}/actions/runs/{{run_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-handler.yml

When SAP S/4HANA detects inventory below safety stock, generates a purchase requisition, notifies the procurement team in Teams, and logs it in a Google Sheet tracker.

naftiko: '0.5'
info:
  label: Warehouse Replenishment Orchestrator
  description: When SAP S/4HANA detects inventory below safety stock, generates a purchase requisition, notifies the procurement team in Teams, and logs it in a Google Sheet tracker.
  tags:
  - supply-chain
  - replenishment
  - sap-s4hana
  - microsoft-teams
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: replenishment
    port: 8080
    tools:
    - name: trigger-replenishment
      description: Given a material number and plant, create a purchase requisition, notify procurement, and log the event.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      - name: current_stock
        in: body
        type: string
        description: Current on-hand quantity.
      - name: reorder_quantity
        in: body
        type: string
        description: Quantity to reorder.
      steps:
      - name: create-pr
        type: call
        call: sap.create-purchase-requisition
        with:
          material: '{{material_number}}'
          plant: '{{plant}}'
          quantity: '{{reorder_quantity}}'
          requisition_type: NB
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel: procurement-alerts
          text: 'Replenishment Alert: Material {{material_number}} at plant {{plant}} is below safety stock ({{current_stock}} on hand). PR {{create-pr.requisition_number}} created for {{reorder_quantity}} units.'
      - name: log-event
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: $secrets.replenishment_tracker_sheet
          range: Log!A1
          values: '{{material_number}},{{plant}},{{current_stock}},{{reorder_quantity}},{{create-pr.requisition_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /A_PurchaseReqnHeader
      operations:
      - name: create-purchase-requisition
        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
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → warehouse-replenishment-orchestrator.yml

Retrieves promo plan from Salesforce, validates margins in Snowflake, updates SAP pricing, syncs to e-commerce, and notifies merchandising.

naftiko: '0.5'
info:
  label: Promotional Pricing Orchestrator
  description: Retrieves promo plan from Salesforce, validates margins in Snowflake, updates SAP pricing, syncs to e-commerce, and notifies merchandising.
  tags:
  - pricing
  - salesforce
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pricing
    port: 8080
    tools:
    - name: promotional_pricing_orchestrator
      description: Orchestrate promotional pricing orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-salesforce
        type: call
        call: salesforce.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-sap
        type: call
        call: sap.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → promotional-pricing-orchestrator.yml

Monitors checkout funnel in Datadog, analyzes drop-off in Snowflake, runs A/B test analysis, creates Jira improvements, and notifies product team.

naftiko: '0.5'
info:
  label: E-Commerce Checkout Optimization
  description: Monitors checkout funnel in Datadog, analyzes drop-off in Snowflake, runs A/B test analysis, creates Jira improvements, and notifies product team.
  tags:
  - e-commerce
  - datadog
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: e-commerce
    port: 8080
    tools:
    - name: e_commerce_checkout_optimization
      description: Orchestrate e-commerce checkout optimization workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → e-commerce-checkout-optimization.yml

Monitors warehouse KPIs from SAP, analyzes bottlenecks in Snowflake, creates improvement tasks in Jira, updates Grafana dashboards, and alerts ops.

naftiko: '0.5'
info:
  label: Warehouse Operations Optimization
  description: Monitors warehouse KPIs from SAP, analyzes bottlenecks in Snowflake, creates improvement tasks in Jira, updates Grafana dashboards, and alerts ops.
  tags:
  - logistics
  - sap
  - snowflake
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: warehouse_operations_optimization
      description: Orchestrate warehouse operations optimization workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-grafana
        type: call
        call: grafana.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://adidas-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → warehouse-operations-optimization.yml

Searches Splunk indexes for log entries at Adidas.

naftiko: '0.5'
info:
  label: Splunk Log Search
  description: Searches Splunk indexes for log entries at Adidas.
  tags:
  - devops
  - splunk
  - logging
capability:
  exposes:
  - type: mcp
    namespace: logging
    port: 8080
    tools:
    - name: search-logs
      description: Search Splunk logs for Adidas.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The query to look up.
      call: splunk.get-query
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://adidas-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk_log_search
        method: GET
Open in Framework → View in Fleet → splunk-log-search.yml

On a new product launch, creates an Adobe Campaign email blast, posts to Instagram and Facebook, updates the BigCommerce storefront, and sends an internal Teams notification.

naftiko: '0.5'
info:
  label: New Product Launch Campaign Orchestrator
  description: On a new product launch, creates an Adobe Campaign email blast, posts to Instagram and Facebook, updates the BigCommerce storefront, and sends an internal Teams notification.
  tags:
  - marketing
  - product-launch
  - adobe-campaign
  - instagram
  - facebook
  - bigcommerce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: orchestrate-launch
      description: Given a product ID, campaign name, and launch date, coordinate the full product launch across marketing channels and the e-commerce storefront.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The Adidas product ID for the new launch.
      - name: campaign_name
        in: body
        type: string
        description: The name of the marketing campaign.
      - name: launch_date
        in: body
        type: string
        description: The scheduled launch date in YYYY-MM-DD format.
      steps:
      - name: create-email-campaign
        type: call
        call: adobe-campaign.create-delivery
        with:
          campaign_name: '{{campaign_name}}'
          template: product_launch_v2
          scheduled_date: '{{launch_date}}'
          product_id: '{{product_id}}'
      - name: post-instagram
        type: call
        call: instagram.create-media
        with:
          caption: 'The wait is over. {{campaign_name}} drops {{launch_date}}. Link in bio. #adidas #newdrop'
          product_id: '{{product_id}}'
      - name: post-facebook
        type: call
        call: facebook.create-post
        with:
          message: Introducing {{campaign_name}} - available {{launch_date}} on adidas.com and in stores.
          product_id: '{{product_id}}'
      - name: update-storefront
        type: call
        call: bigcommerce.update-product-visibility
        with:
          product_id: '{{product_id}}'
          is_visible: 'true'
          availability_date: '{{launch_date}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: product-launches
          text: 'Product launch orchestrated: {{campaign_name}} | Product: {{product_id}} | Email: {{create-email-campaign.delivery_id}} | IG: {{post-instagram.media_id}} | FB: {{post-facebook.post_id}} | Store: live on {{launch_date}}'
  consumes:
  - type: http
    namespace: adobe-campaign
    baseUri: https://mc.adobe.io/adidas/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_client_id
    resources:
    - name: deliveries
      path: /deliveries
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      operations:
      - name: create-media
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_page_token
    resources:
    - name: posts
      path: /{{page_id}}/feed
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: update-product-visibility
        method: PUT
  - 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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-launch-campaign-orchestrator.yml

Provisions store in SAP, creates Salesforce location record, sets up ServiceNow IT support, assigns staff in Workday, and notifies retail operations.

naftiko: '0.5'
info:
  label: Store Opening Orchestrator
  description: Provisions store in SAP, creates Salesforce location record, sets up ServiceNow IT support, assigns staff in Workday, and notifies retail operations.
  tags:
  - retail
  - sap
  - salesforce
  - servicenow
  - workday
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: store_opening_orchestrator
      description: Orchestrate store opening orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-workday
        type: call
        call: workday.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/adidas
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
Open in Framework → View in Fleet → store-opening-orchestrator.yml

Searches Elasticsearch indexes for Adidas.

naftiko: '0.5'
info:
  label: Elasticsearch Log Query
  description: Searches Elasticsearch indexes for Adidas.
  tags:
  - data
  - elasticsearch
  - search
capability:
  exposes:
  - type: mcp
    namespace: search
    port: 8080
    tools:
    - name: search-logs
      description: Search ES logs at Adidas.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The query to look up.
      call: elasticsearch.get-query
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://adidas-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch_log_query
        method: GET
Open in Framework → View in Fleet → elasticsearch-log-query.yml

Detects high-priority Zendesk tickets, enriches with customer data from Salesforce, creates escalation in ServiceNow, and notifies management.

naftiko: '0.5'
info:
  label: Customer Service Escalation Pipeline
  description: Detects high-priority Zendesk tickets, enriches with customer data from Salesforce, creates escalation in ServiceNow, and notifies management.
  tags:
  - customer-service
  - zendesk
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer-service
    port: 8080
    tools:
    - name: customer_service_escalation_pipeline
      description: Orchestrate customer service escalation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-zendesk
        type: call
        call: zendesk.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: zendesk-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → customer-service-escalation-pipeline.yml

Collects carbon footprint data from SAP, energy usage from Oracle Cloud, and supply chain metrics from SAP BW, then publishes a sustainability dashboard to Google Sheets and notifies leadership in Teams.

naftiko: '0.5'
info:
  label: Sustainability Reporting Pipeline
  description: Collects carbon footprint data from SAP, energy usage from Oracle Cloud, and supply chain metrics from SAP BW, then publishes a sustainability dashboard to Google Sheets and notifies leadership in Teams.
  tags:
  - sustainability
  - sap-s4hana
  - oracle-cloud
  - sap-bw
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: generate-sustainability-report
      description: Given a fiscal period, collect sustainability metrics from all sources and publish a consolidated report.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g. 2026-Q1).
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets ID for the sustainability dashboard.
      steps:
      - name: get-carbon-data
        type: call
        call: sap.get-carbon-footprint
        with:
          period: '{{fiscal_period}}'
      - name: get-energy-usage
        type: call
        call: oracle-cloud.get-energy-metrics
        with:
          period: '{{fiscal_period}}'
      - name: get-supply-chain-metrics
        type: call
        call: sap-bw.get-sustainability-kpis
        with:
          period: '{{fiscal_period}}'
      - name: update-dashboard
        type: call
        call: gsheets.update-range
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Dashboard!A2
          values: '{{fiscal_period}},{{get-carbon-data.total_co2_tons}},{{get-energy-usage.kwh_total}},{{get-supply-chain-metrics.recycled_materials_pct}},{{get-supply-chain-metrics.sustainable_suppliers_pct}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel: sustainability-leadership
          text: 'Sustainability Report: {{fiscal_period}} | CO2: {{get-carbon-data.total_co2_tons}} tons | Energy: {{get-energy-usage.kwh_total}} kWh | Recycled Materials: {{get-supply-chain-metrics.recycled_materials_pct}}% | Sustainable Suppliers: {{get-supply-chain-metrics.sustainable_suppliers_pct}}%'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_SUSTAINABILITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: carbon
      path: /A_CarbonFootprint
      operations:
      - name: get-carbon-footprint
        method: GET
  - type: http
    namespace: oracle-cloud
    baseUri: https://cloud.oracle.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: energy
      path: /sustainability/energy
      operations:
      - name: get-energy-metrics
        method: GET
  - type: http
    namespace: sap-bw
    baseUri: https://adidas-bw.sap.com/sap/bw/odata/v1
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: sustainability
      path: /ZSUSTAINABILITY_KPI
      operations:
      - name: get-sustainability-kpis
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-range
        method: PUT
  - 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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainability-reporting-pipeline.yml

When a Salesforce opportunity is marked as Closed Won, creates a sales order in SAP S/4HANA, updates the Salesforce record with the SAP order number, and notifies the fulfillment team in Teams.

naftiko: '0.5'
info:
  label: Salesforce to SAP Order Sync
  description: When a Salesforce opportunity is marked as Closed Won, creates a sales order in SAP S/4HANA, updates the Salesforce record with the SAP order number, and notifies the fulfillment team in Teams.
  tags:
  - sales
  - salesforce
  - sap-s4hana
  - microsoft-teams
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: order-sync
    port: 8080
    tools:
    - name: sync-won-opportunity
      description: Given a Salesforce opportunity ID, create a SAP sales order, update SF with the order number, and notify fulfillment.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sales-order
        type: call
        call: sap.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_sap_id}}'
          amount: '{{get-opportunity.amount}}'
          products: '{{get-opportunity.line_items}}'
          delivery_date: '{{get-opportunity.close_date}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          sap_order_number: '{{create-sales-order.order_number}}'
      - name: notify-fulfillment
        type: call
        call: msteams.send-message
        with:
          channel: fulfillment-ops
          text: 'New Sales Order: SAP {{create-sales-order.order_number}} from SF Opportunity {{opportunity_id}} | Customer: {{get-opportunity.account_name}} | Amount: {{get-opportunity.amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: sap
    baseUri: https://adidas-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
      operations:
      - name: create-sales-order
        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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-to-sap-order-sync.yml

Collects POS data from SAP, aggregates in Snowflake, refreshes Power BI dashboards, identifies underperformers, and notifies retail ops.

naftiko: '0.5'
info:
  label: Retail Store Performance Pipeline
  description: Collects POS data from SAP, aggregates in Snowflake, refreshes Power BI dashboards, identifies underperformers, and notifies retail ops.
  tags:
  - retail
  - sap
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: retail_store_performance_pipeline
      description: Orchestrate retail store performance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → retail-store-performance-pipeline.yml

Executes SQL queries against Adidas Snowflake warehouse.

naftiko: '0.5'
info:
  label: Snowflake Query Executor
  description: Executes SQL queries against Adidas Snowflake warehouse.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-query
      description: Run query at Adidas.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: snowflake.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake_query_executor
        method: GET
Open in Framework → View in Fleet → snowflake-query-executor.yml

When a new employee joins a department, assigns the relevant Pluralsight learning path, creates a Microsoft Planner task for completion tracking, and notifies the manager in Teams.

naftiko: '0.5'
info:
  label: Pluralsight Learning Path Assignment
  description: When a new employee joins a department, assigns the relevant Pluralsight learning path, creates a Microsoft Planner task for completion tracking, and notifies the manager in Teams.
  tags:
  - learning
  - pluralsight
  - microsoft-planner
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: learning
    port: 8080
    tools:
    - name: assign-learning-path
      description: Given an employee email and department, assign the Pluralsight path, create a tracking task, and notify the manager.
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: The new employee email.
      - name: department
        in: body
        type: string
        description: The department the employee is joining.
      - name: manager_email
        in: body
        type: string
        description: The manager email for notification.
      steps:
      - name: assign-path
        type: call
        call: pluralsight.assign-channel
        with:
          user_email: '{{employee_email}}'
          channel_name: '{{department}}_onboarding'
      - name: create-task
        type: call
        call: planner.create-task
        with:
          plan_id: $secrets.learning_plan_id
          title: 'Complete Pluralsight path: {{department}}_onboarding'
          assigned_to: '{{employee_email}}'
          due_date: +30d
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Learning path assigned to {{employee_email}}: {{department}}_onboarding | Due in 30 days | Task: {{create-task.id}}'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channels
      path: /channels/assign
      operations:
      - name: assign-channel
        method: POST
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        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
Open in Framework → View in Fleet → pluralsight-learning-path-assignment.yml

Creates a Salesforce campaign for a sponsored event, uploads the sponsorship agreement to Google Drive, schedules social media posts on Instagram and Twitter, and sets up a Planner task for follow-up.

naftiko: '0.5'
info:
  label: Event Sponsorship Tracker
  description: Creates a Salesforce campaign for a sponsored event, uploads the sponsorship agreement to Google Drive, schedules social media posts on Instagram and Twitter, and sets up a Planner task for follow-up.
  tags:
  - marketing
  - events
  - salesforce
  - google-drive
  - instagram
  - twitter
  - microsoft-planner
capability:
  exposes:
  - type: mcp
    namespace: event-sponsorship
    port: 8080
    tools:
    - name: setup-sponsorship
      description: Given event details and sponsorship terms, create campaign, store agreement, schedule social posts, and track follow-up.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: Name of the sponsored event.
      - name: event_date
        in: body
        type: string
        description: Event date in YYYY-MM-DD format.
      - name: sponsorship_amount
        in: body
        type: string
        description: Sponsorship investment amount.
      - name: sport_category
        in: body
        type: string
        description: Sport category for the event.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Sponsorship: {{event_name}}'
          type: Event
          start_date: '{{event_date}}'
          budgeted_cost: '{{sponsorship_amount}}'
      - name: upload-agreement
        type: call
        call: gdrive.upload-file
        with:
          folder_id: $secrets.sponsorships_folder
          file_name: '{{event_name}}_agreement.pdf'
      - name: schedule-instagram
        type: call
        call: instagram.create-media
        with:
          caption: 'We''re proud to sponsor {{event_name}}! See you there. #adidas #{{sport_category}}'
          scheduled_date: '{{event_date}}'
      - name: schedule-twitter
        type: call
        call: twitter.create-tweet
        with:
          text: 'Adidas is the official sponsor of {{event_name}}. Game on. #adidas #{{sport_category}}'
      - name: create-followup-task
        type: call
        call: planner.create-task
        with:
          plan_id: $secrets.events_plan_id
          title: 'Post-event report: {{event_name}}'
          due_date: +7d
          description: 'Campaign: {{create-campaign.id}} | Agreement: {{upload-agreement.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      operations:
      - name: create-media
        method: POST
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_bearer_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → event-sponsorship-tracker.yml

Tracks touchpoints from Salesforce, web analytics from Datadog, purchase data from Stripe, aggregates in Snowflake, and notifies CX team.

naftiko: '0.5'
info:
  label: Customer Journey Analytics Pipeline
  description: Tracks touchpoints from Salesforce, web analytics from Datadog, purchase data from Stripe, aggregates in Snowflake, and notifies CX team.
  tags:
  - customer-experience
  - salesforce
  - datadog
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer-experience
    port: 8080
    tools:
    - name: customer_journey_analytics_pipeline
      description: Orchestrate customer journey analytics pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-salesforce
        type: call
        call: salesforce.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-datadog
        type: call
        call: datadog.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → customer-journey-analytics-pipeline.yml

Syncs inventory between SAP warehouse, Salesforce Commerce Cloud, and store POS systems, logs discrepancies in ServiceNow, and alerts supply chain.

naftiko: '0.5'
info:
  label: Omnichannel Inventory Sync Pipeline
  description: Syncs inventory between SAP warehouse, Salesforce Commerce Cloud, and store POS systems, logs discrepancies in ServiceNow, and alerts supply chain.
  tags:
  - inventory
  - sap
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: omnichannel_inventory_sync_pipeline
      description: Orchestrate omnichannel inventory sync pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → omnichannel-inventory-sync-pipeline.yml

Collects social media mentions, runs sentiment analysis in Snowflake, updates HubSpot brand health metrics, and notifies communications team.

naftiko: '0.5'
info:
  label: Brand Sentiment Analyzer
  description: Collects social media mentions, runs sentiment analysis in Snowflake, updates HubSpot brand health metrics, and notifies communications team.
  tags:
  - brand
  - snowflake
  - hubspot
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand_sentiment_analyzer
      description: Orchestrate brand sentiment analyzer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-hubspot
        type: call
        call: hubspot.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: hubspot-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → brand-sentiment-analyzer.yml

Pulls sales data from Snowflake, runs ML models for demand prediction, updates SAP MRP, generates reports in Power BI, and notifies planners.

naftiko: '0.5'
info:
  label: Supply Chain Demand Forecasting
  description: Pulls sales data from Snowflake, runs ML models for demand prediction, updates SAP MRP, generates reports in Power BI, and notifies planners.
  tags:
  - supply-chain
  - snowflake
  - sap
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: supply_chain_demand_forecasting
      description: Orchestrate supply chain demand forecasting workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-sap
        type: call
        call: sap.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-forecasting.yml

Receives a customer inquiry via WhatsApp, looks up the order in BigCommerce, fetches tracking from SAP, and replies with the order status through WhatsApp.

naftiko: '0.5'
info:
  label: WhatsApp Customer Order Status Bot
  description: Receives a customer inquiry via WhatsApp, looks up the order in BigCommerce, fetches tracking from SAP, and replies with the order status through WhatsApp.
  tags:
  - customer-service
  - whatsapp
  - bigcommerce
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: whatsapp-bot
    port: 8080
    tools:
    - name: handle-order-inquiry
      description: Given a WhatsApp message with an order number, look up status and reply with tracking info.
      inputParameters:
      - name: phone_number
        in: body
        type: string
        description: The customer WhatsApp phone number.
      - name: order_id
        in: body
        type: string
        description: The order ID from the customer message.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: get-tracking
        type: call
        call: sap.get-delivery-tracking
        with:
          order_reference: '{{order_id}}'
      - name: reply-whatsapp
        type: call
        call: whatsapp.send-message
        with:
          to: '{{phone_number}}'
          text: 'Hi! Your order #{{order_id}} is {{get-order.status}}. Tracking: {{get-tracking.tracking_number}}. Estimated delivery: {{get-tracking.estimated_delivery}}.'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adidas-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
      operations:
      - name: get-delivery-tracking
        method: GET
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0/$secrets.whatsapp_phone_id
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → whatsapp-customer-order-status-bot.yml

Retrieves GitHub repository metadata for Adidas.

naftiko: '0.5'
info:
  label: GitHub Repository Lookup
  description: Retrieves GitHub repository metadata for Adidas.
  tags:
  - devops
  - github
  - source-control
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-repo
      description: Look up repo at Adidas.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo_name to look up.
      call: github.get-repo_name
      with:
        repo_name: '{{repo_name}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github_repository_lookup
        method: GET
Open in Framework → View in Fleet → github-repository-lookup.yml

Pulls store sales data from Teradata, KPI metrics from SAP BW, and customer foot traffic from Google Analytics, then consolidates into a Google Sheet for regional managers.

naftiko: '0.5'
info:
  label: Retail Store Performance Dashboard Sync
  description: Pulls store sales data from Teradata, KPI metrics from SAP BW, and customer foot traffic from Google Analytics, then consolidates into a Google Sheet for regional managers.
  tags:
  - retail
  - analytics
  - teradata
  - sap-bw
  - google-analytics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: retail-reporting
    port: 8080
    tools:
    - name: sync-store-dashboard
      description: Given a store ID and date range, collect sales, KPIs, and traffic data and write to a Google Sheet.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Adidas retail store identifier.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for output.
      steps:
      - name: get-sales
        type: call
        call: teradata.query-store-sales
        with:
          store_id: '{{store_id}}'
          date_range: '{{date_range}}'
      - name: get-kpis
        type: call
        call: sap-bw.get-store-kpis
        with:
          store_id: '{{store_id}}'
          date_range: '{{date_range}}'
      - name: get-traffic
        type: call
        call: ga.get-store-traffic
        with:
          store_id: '{{store_id}}'
          date_range: '{{date_range}}'
      - name: write-to-sheet
        type: call
        call: gsheets.update-range
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Dashboard!A1
          values: 'Store: {{store_id}} | Revenue: {{get-sales.total_revenue}} | Transactions: {{get-sales.transactions}} | Conversion: {{get-kpis.conversion_rate}} | Foot Traffic: {{get-traffic.sessions}}'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.adidas.internal/api/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /queries
      operations:
      - name: query-store-sales
        method: POST
  - type: http
    namespace: sap-bw
    baseUri: https://adidas-bw.sap.com/sap/bw/odata/v1
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: store-kpis
      path: /ZRETAIL_STORE_KPI
      operations:
      - name: get-store-kpis
        method: GET
  - 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
      operations:
      - name: get-store-traffic
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-range
        method: PUT
Open in Framework → View in Fleet → retail-store-performance-dashboard-sync.yml

Creates a Salesforce opportunity for an athlete endorsement, stores the contract in Box, updates the deal in Microsoft Planner, and notifies the brand team in Teams.

naftiko: '0.5'
info:
  label: Athlete Endorsement Deal Tracker
  description: Creates a Salesforce opportunity for an athlete endorsement, stores the contract in Box, updates the deal in Microsoft Planner, and notifies the brand team in Teams.
  tags:
  - partnerships
  - salesforce
  - box
  - microsoft-planner
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: endorsements
    port: 8080
    tools:
    - name: create-endorsement-deal
      description: Given athlete details and deal terms, create tracking records across Salesforce, Box, Planner, and Teams.
      inputParameters:
      - name: athlete_name
        in: body
        type: string
        description: Name of the athlete.
      - name: deal_value
        in: body
        type: string
        description: Total deal value.
      - name: sport_category
        in: body
        type: string
        description: Sport category (e.g. running, football, basketball).
      - name: contract_duration
        in: body
        type: string
        description: Contract duration in months.
      steps:
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Endorsement: {{athlete_name}} — {{sport_category}}'
          amount: '{{deal_value}}'
          stage: Negotiation
          description: '{{contract_duration}} month endorsement deal with {{athlete_name}} for {{sport_category}}.'
      - name: create-contract-folder
        type: call
        call: box.create-folder
        with:
          parent_folder_id: $secrets.endorsements_folder
          name: '{{athlete_name}}_{{sport_category}}'
      - name: create-planner-task
        type: call
        call: planner.create-task
        with:
          plan_id: $secrets.endorsements_plan_id
          title: 'Review: {{athlete_name}} endorsement — {{deal_value}}'
          due_date: +14d
          description: 'SF Opportunity: {{create-opportunity.id}} | Box: {{create-contract-folder.url}}'
      - name: notify-brand-team
        type: call
        call: msteams.send-message
        with:
          channel: brand-partnerships
          text: 'New Endorsement Deal: {{athlete_name}} ({{sport_category}}) | Value: {{deal_value}} | Duration: {{contract_duration}}mo | SF: {{create-opportunity.id}} | Task: {{create-planner-task.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adidas.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
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → athlete-endorsement-deal-tracker.yml

When a return request arrives in Zendesk, looks up the order in BigCommerce, initiates a refund via Stripe, updates the SAP inventory, and resolves the Zendesk ticket.

naftiko: '0.5'
info:
  label: Customer Return Processing
  description: When a return request arrives in Zendesk, looks up the order in BigCommerce, initiates a refund via Stripe, updates the SAP inventory, and resolves the Zendesk ticket.
  tags:
  - customer-service
  - returns
  - zendesk
  - bigcommerce
  - stripe
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: returns
    port: 8080
    tools:
    - name: process-return
      description: Given a Zendesk ticket ID and order ID, process the full return including refund and inventory adjustment.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID for the return request.
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: reason
        in: body
        type: string
        description: Return reason code.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: process-refund
        type: call
        call: stripe.create-refund
        with:
          payment_intent_id: '{{get-order.payment_reference}}'
          amount: '{{get-order.total_inc_tax}}'
          reason: '{{reason}}'
      - name: update-inventory
        type: call
        call: sap.post-goods-receipt
        with:
          sku: '{{get-order.line_items[0].sku}}'
          quantity: '{{get-order.line_items[0].quantity}}'
          movement_type: RETURN
      - name: resolve-ticket
        type: call
        call: zendesk.update-ticket
        with:
          ticket_id: '{{ticket_id}}'
          status: solved
          comment: 'Return processed. Refund: {{process-refund.id}} ({{process-refund.amount}}). Inventory updated.'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/adidas/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: sap
    baseUri: https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentHeader
      operations:
      - name: post-goods-receipt
        method: POST
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}.json
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: update-ticket
        method: PUT
Open in Framework → View in Fleet → customer-return-processing.yml

When a Zendesk ticket is resolved, sends a Google Forms satisfaction survey link, collects the response, and updates the Salesforce contact record with the CSAT score.

naftiko: '0.5'
info:
  label: Customer Feedback Loop
  description: When a Zendesk ticket is resolved, sends a Google Forms satisfaction survey link, collects the response, and updates the Salesforce contact record with the CSAT score.
  tags:
  - customer-service
  - feedback
  - zendesk
  - google-forms
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-feedback
    port: 8080
    tools:
    - name: trigger-feedback-survey
      description: Given a resolved Zendesk ticket, send a satisfaction survey and route the score back to Salesforce.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The resolved Zendesk ticket ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: salesforce_contact_id
        in: body
        type: string
        description: The Salesforce contact ID.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: send-survey
        type: call
        call: google-forms.send-form
        with:
          form_id: $secrets.csat_form_id
          recipient_email: '{{customer_email}}'
          ticket_reference: '{{ticket_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
          last_survey_sent: '{{ticket_id}}'
          survey_type: CSAT
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://adidas.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}.json
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: google-forms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_forms_token
    resources:
    - name: forms
      path: /forms/{{form_id}}/responses
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: send-form
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
Open in Framework → View in Fleet → customer-feedback-loop.yml

Monitors equipment telemetry in Datadog, predicts maintenance needs in Snowflake, creates work orders in ServiceNow, and notifies facility team.

naftiko: '0.5'
info:
  label: Warehouse Equipment Maintenance Pipeline
  description: Monitors equipment telemetry in Datadog, predicts maintenance needs in Snowflake, creates work orders in ServiceNow, and notifies facility team.
  tags:
  - maintenance
  - datadog
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: maintenance
    port: 8080
    tools:
    - name: warehouse_equipment_maintenance_pipeline
      description: Orchestrate warehouse equipment maintenance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adidas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → warehouse-equipment-maintenance-pipeline.yml

Looks up a potential influencer on LinkedIn and ZoomInfo, creates a Salesforce opportunity, drafts an outreach email in Adobe Campaign, and tracks the engagement in HubSpot.

naftiko: '0.5'
info:
  label: Influencer Collaboration Workflow
  description: Looks up a potential influencer on LinkedIn and ZoomInfo, creates a Salesforce opportunity, drafts an outreach email in Adobe Campaign, and tracks the engagement in HubSpot.
  tags:
  - marketing
  - influencer
  - linkedin
  - zoominfo
  - salesforce
  - adobe-campaign
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: influencer-marketing
    port: 8080
    tools:
    - name: initiate-collaboration
      description: Given an influencer name and social handle, research them, create a sales opportunity, and start outreach.
      inputParameters:
      - name: influencer_name
        in: body
        type: string
        description: Full name of the influencer.
      - name: social_handle
        in: body
        type: string
        description: Primary social media handle.
      - name: campaign_name
        in: body
        type: string
        description: The marketing campaign for this collaboration.
      steps:
      - name: lookup-linkedin
        type: call
        call: linkedin.search-person
        with:
          name: '{{influencer_name}}'
      - name: enrich-contact
        type: call
        call: zoominfo.enrich-person
        with:
          name: '{{influencer_name}}'
          social_handle: '{{social_handle}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Influencer Collab: {{influencer_name}} — {{campaign_name}}'
          stage: Prospecting
          description: 'LinkedIn: {{lookup-linkedin.profile_url}} | Followers: {{enrich-contact.follower_count}} | Engagement Rate: {{enrich-contact.engagement_rate}}'
      - name: create-outreach
        type: call
        call: adobe-campaign.create-delivery
        with:
          template: influencer_outreach_v1
          recipient_email: '{{enrich-contact.email}}'
          campaign_name: '{{campaign_name}}'
      - name: create-hubspot-contact
        type: call
        call: hubspot.create-contact
        with:
          email: '{{enrich-contact.email}}'
          firstname: '{{influencer_name}}'
          company: Influencer
          lifecyclestage: lead
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: people
      path: /people
      operations:
      - name: search-person
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: enrich
      path: /enrich/person
      operations:
      - name: enrich-person
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adidas.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
  - type: http
    namespace: adobe-campaign
    baseUri: https://mc.adobe.io/adidas/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    resources:
    - name: deliveries
      path: /deliveries
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts
      operations:
      - name: create-contact
        method: POST
Open in Framework → View in Fleet → influencer-collaboration-workflow.yml

Pulls a summary report from Google Analytics for a specified campaign, returning sessions, conversion rate, and revenue attribution.

naftiko: '0.5'
info:
  label: Google Analytics Campaign Report
  description: Pulls a summary report from Google Analytics for a specified campaign, returning sessions, conversion rate, and revenue attribution.
  tags:
  - marketing
  - google-analytics
  - campaign
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-campaign-report
      description: Retrieve a Google Analytics campaign performance summary including sessions, conversions, and revenue.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Google Analytics campaign ID.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      call: ga.get-report
      with:
        campaign_id: '{{campaign_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: conversion_rate
        type: string
        mapping: $.rows[0].metricValues[1].value
      - name: revenue
        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/{{campaign_id}}:runReport
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-campaign-report.yml

Monitors product listings across e-commerce channels, tracks pricing and availability, logs discrepancies, and alerts the digital commerce team.

naftiko: '0.5'
info:
  label: Digital Shelf Monitoring Pipeline
  description: Monitors product listings across e-commerce channels, tracks pricing and availability, logs discrepancies, and alerts the digital commerce team.
  tags:
  - e-commerce
  - datadog
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: e-commerce
    port: 8080
    tools:
    - name: digital_shelf_monitoring_pipeline
      description: Orchestrate digital shelf monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adidas.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adidas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → digital-shelf-monitoring-pipeline.yml

Queries the Teradata data warehouse for store-level sales performance by location and date range.

naftiko: '0.5'
info:
  label: Teradata Retail Analytics Query
  description: Queries the Teradata data warehouse for store-level sales performance by location and date range.
  tags:
  - analytics
  - teradata
  - retail
capability:
  exposes:
  - type: mcp
    namespace: retail-analytics
    port: 8080
    tools:
    - name: query-store-sales
      description: Run a store-level sales query in Teradata by store ID and date range.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Adidas retail store identifier.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: teradata.run-query
      with:
        store_id: '{{store_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.results[0].TOTAL_REVENUE
      - name: transactions
        type: string
        mapping: $.results[0].TRANSACTION_COUNT
      - name: avg_basket_size
        type: string
        mapping: $.results[0].AVG_BASKET
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.adidas.internal/api/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /queries
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → teradata-retail-analytics-query.yml

Integrates point-of-sale data by pulling retail POS data from Circana, updating Salesforce retail accounts, and refreshing the Power BI sales analytics dashboard.

naftiko: '0.5'
info:
  label: Point of Sale Data Integration
  description: Integrates point-of-sale data by pulling retail POS data from Circana, updating Salesforce retail accounts, and refreshing the Power BI sales analytics dashboard.
  tags:
  - distribution
  - marketing
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: pos-integration
    port: 8080
    tools:
    - name: integrate-pos-data
      description: 'Integrate POS data: pull Circana data, update Salesforce accounts, and refresh Power BI dashboard.'
      inputParameters:
      - name: retailer_id
        in: body
        type: string
        description: The Circana retailer ID.
      - name: sf_account_id
        in: body
        type: string
        description: The Salesforce retail account ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI sales dataset ID.
      steps:
      - name: get-pos-data
        type: call
        call: circana.get-retailer-pos
        with:
          retailer_id: '{{retailer_id}}'
      - name: update-sf-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{sf_account_id}}'
          weekly_volume: '{{get-pos-data.weekly_volume}}'
          market_share: '{{get-pos-data.market_share}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: pos
      path: /pos/retailer/{{retailer_id}}
      inputParameters:
      - name: retailer_id
        in: path
      operations:
      - name: get-retailer-pos
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - 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
Open in Framework → View in Fleet → point-of-sale-data-integration.yml

Retrieves a SAP billing document by number, returning billing type, payer, net value, and billing date.

naftiko: '0.5'
info:
  label: SAP Billing Document Lookup
  description: Retrieves a SAP billing document by number, returning billing type, payer, net value, and billing date.
  tags:
  - finance
  - sap
  - billing
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-billing-document
      description: Look up a SAP billing document. Returns billing type, payer, net value, and billing date.
      inputParameters:
      - name: billing_document
        in: body
        type: string
        description: The SAP billing document number.
      call: sap.get-billing-doc
      with:
        billing_document: '{{billing_document}}'
      outputParameters:
      - name: billing_type
        type: string
        mapping: $.d.BillingDocumentType
      - name: payer
        type: string
        mapping: $.d.PayerParty
      - name: net_value
        type: string
        mapping: $.d.TotalNetAmount
      - name: billing_date
        type: string
        mapping: $.d.BillingDocumentDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: billing-documents
      path: /A_BillingDocument('{{billing_document}}')
      inputParameters:
      - name: billing_document
        in: path
      operations:
      - name: get-billing-doc
        method: GET
Open in Framework → View in Fleet → sap-billing-document-lookup.yml

Monitors brand sentiment by pulling social listening data from HubSpot, cross-referencing with Adobe Analytics web traffic, and alerting brand management via Microsoft Teams.

naftiko: '0.5'
info:
  label: Social Media Sentiment Alert
  description: Monitors brand sentiment by pulling social listening data from HubSpot, cross-referencing with Adobe Analytics web traffic, and alerting brand management via Microsoft Teams.
  tags:
  - marketing
  - brand-management
  - hubspot
  - adobe-analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-monitoring
    port: 8080
    tools:
    - name: check-brand-sentiment
      description: 'Orchestrate brand sentiment check: pull HubSpot social data, cross-reference Adobe Analytics, and alert brand team.'
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The brand to monitor, e.g. Coca-Cola, Sprite.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD:YYYY-MM-DD format.
      steps:
      - name: get-social-sentiment
        type: call
        call: hubspot.get-social-mentions
        with:
          brand: '{{brand_name}}'
          date_range: '{{date_range}}'
      - name: get-web-traffic
        type: call
        call: adobe.get-brand-traffic
        with:
          brand_segment: '{{brand_name}}'
          date_range: '{{date_range}}'
      - name: alert-brand-team
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-{{brand_name}}
          text: 'Brand Sentiment Report for {{brand_name}}: Social mentions: {{get-social-sentiment.mention_count}}. Sentiment score: {{get-social-sentiment.sentiment_score}}. Web traffic: {{get-web-traffic.page_views}} page views.'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social-mentions
      path: /objects/social_mentions/search
      operations:
      - name: get-social-mentions
        method: POST
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/cocacola
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-brand-traffic
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → social-media-sentiment-alert.yml

Retrieves a vendor invoice from SAP, verifies it against the corresponding purchase order and goods receipt, and posts a match result back to SAP for payment approval.

naftiko: '0.5'
info:
  label: Invoice Processing and Three-Way Match
  description: Retrieves a vendor invoice from SAP, verifies it against the corresponding purchase order and goods receipt, and posts a match result back to SAP for payment approval.
  tags:
  - finance
  - procurement
  - sap
  - invoice-processing
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: process-invoice-match
      description: Given an invoice number, retrieve the invoice and linked PO from SAP S/4HANA, validate quantity and price, and update the invoice match status. Use for accounts payable automation and three-way match workflows.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP vendor invoice number (MIRO-style document number).
      steps:
      - name: get-invoice
        type: call
        call: sap-fi.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap-mm.get-po
        with:
          po_number: '{{get-invoice.po_number}}'
      - name: post-match-result
        type: call
        call: sap-fi.update-invoice-status
        with:
          invoice_number: '{{invoice_number}}'
          match_status: Matched
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
      - name: update-invoice-status
        method: PATCH
  - type: http
    namespace: sap-mm
    baseUri: https://coca-cola-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
Open in Framework → View in Fleet → invoice-processing-and-three-way-match.yml

Retrieves the status of a SAP production order including planned quantity, confirmed quantity, and system status for manufacturing tracking.

naftiko: '0.5'
info:
  label: SAP Production Order Status
  description: Retrieves the status of a SAP production order including planned quantity, confirmed quantity, and system status for manufacturing tracking.
  tags:
  - manufacturing
  - sap
  - production
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP production order by order number. Returns order type, status, planned quantity, and confirmed quantity.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number, e.g. 1000001234.
      call: sap.get-production-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: order_type
        type: string
        mapping: $.d.ManufacturingOrderType
      - name: status
        type: string
        mapping: $.d.MfgOrderPlannedTotalQty
      - name: planned_qty
        type: string
        mapping: $.d.MfgOrderPlannedTotalQty
      - name: confirmed_qty
        type: string
        mapping: $.d.MfgOrderConfirmedYieldQty
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder_2('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → sap-production-order-status.yml

Retrieves a SAP outbound delivery document by delivery number, returning ship-to party, planned goods issue date, and delivery status.

naftiko: '0.5'
info:
  label: SAP Delivery Document Lookup
  description: Retrieves a SAP outbound delivery document by delivery number, returning ship-to party, planned goods issue date, and delivery status.
  tags:
  - distribution
  - sap
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: get-delivery-document
      description: Look up a SAP outbound delivery by delivery number. Returns ship-to party, goods issue date, and overall status.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery document number, e.g. 8000012345.
      call: sap.get-delivery
      with:
        delivery_number: '{{delivery_number}}'
      outputParameters:
      - name: ship_to_party
        type: string
        mapping: $.d.ShipToParty
      - name: planned_goods_issue_date
        type: string
        mapping: $.d.PlannedGoodsIssueDate
      - name: delivery_status
        type: string
        mapping: $.d.OverallSDProcessStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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
Open in Framework → View in Fleet → sap-delivery-document-lookup.yml

Syncs email campaign results from MailChimp to Salesforce campaign records and posts a performance summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: MailChimp Email Campaign Results Sync
  description: Syncs email campaign results from MailChimp to Salesforce campaign records and posts a performance summary to Microsoft Teams.
  tags:
  - marketing
  - mailchimp
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: sync-email-campaign-results
      description: Sync MailChimp campaign results to Salesforce and post performance summary to Teams.
      inputParameters:
      - name: mailchimp_campaign_id
        in: body
        type: string
        description: The MailChimp campaign ID.
      - name: sf_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      steps:
      - name: get-campaign-report
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{mailchimp_campaign_id}}'
      - name: update-sf-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{sf_campaign_id}}'
          emails_sent: '{{get-campaign-report.emails_sent}}'
          open_rate: '{{get-campaign-report.open_rate}}'
          click_rate: '{{get-campaign-report.click_rate}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-campaigns
          text: 'Email Campaign Report: {{get-campaign-report.campaign_title}}. Sent: {{get-campaign-report.emails_sent}}. Open rate: {{get-campaign-report.open_rate}}%. Click rate: {{get-campaign-report.click_rate}}%.'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaign-reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mailchimp-email-campaign-results-sync.yml

Converts a customer complaint from Zendesk into a quality case by creating a SAP quality notification, linking to the Salesforce account, and notifying the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint to Quality Case
  description: Converts a customer complaint from Zendesk into a quality case by creating a SAP quality notification, linking to the Salesforce account, and notifying the quality team via Microsoft Teams.
  tags:
  - customer-service
  - quality
  - zendesk
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-feedback
    port: 8080
    tools:
    - name: convert-complaint-to-quality-case
      description: Convert Zendesk complaint to SAP quality case, link Salesforce account, and notify quality team.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-complaint
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: create-quality-notification
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: customer_complaint
          description: '{{get-complaint.subject}}: {{get-complaint.description}}'
          material: '{{get-complaint.product_sku}}'
      - name: update-sf-account
        type: call
        call: salesforce.create-case
        with:
          account_id: '{{account_id}}'
          subject: 'Quality case: {{get-complaint.subject}}'
          sap_notification: '{{create-quality-notification.notification_number}}'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-cases
          text: 'New quality case from customer complaint. Zendesk: #{{ticket_id}}. SAP notification: {{create-quality-notification.notification_number}}. Salesforce case: {{update-sf-account.case_number}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://cocacola.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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: salesforce
    baseUri: https://coca-cola.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-to-quality-case.yml

Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability digest to the SRE Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Report
  description: Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability digest to the SRE Microsoft Teams channel.
  tags:
  - observability
  - datadog
  - slo
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Fetch all SLO status summaries from Datadog and post a weekly compliance report to the SRE Teams channel. Use for reliability governance and SLO review meetings.
      steps:
      - name: get-slos
        type: call
        call: datadog.list-slos
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sre_channel_id
          text: 'Weekly SLO Report: {{get-slos.total_count}} SLOs tracked across Coca-Cola production services.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-report.yml

Fetches open Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents for critical findings, and notifies the security team via Teams.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Scan Triage
  description: Fetches open Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents for critical findings, and notifies the security team via Teams.
  tags:
  - security
  - github
  - servicenow
  - devops
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-security-alerts
      description: Retrieve open Dependabot security alerts for a GitHub repository, create ServiceNow security incidents for critical severity alerts, and notify the security team via Teams.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The repository in owner/repo format to scan for security alerts.
      steps:
      - name: get-alerts
        type: call
        call: github.list-dependabot-alerts
        with:
          owner: coca-cola
          repo: '{{repo}}'
          severity: critical
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Critical Dependabot alerts in {{repo}}
          category: security
          urgency: '1'
      - name: notify-security-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_security_channel_id
          text: 'Security Alert: {{get-alerts.total_count}} critical vulnerabilities in {{repo}}. Incident: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{owner}}/{{repo}}/dependabot/alerts
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: severity
        in: query
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-scan-triage.yml

When a Salesforce survey response scores below a detractor threshold, automatically creates a service case and assigns it to the customer success team.

naftiko: '0.5'
info:
  label: Salesforce Customer NPS Case Creation
  description: When a Salesforce survey response scores below a detractor threshold, automatically creates a service case and assigns it to the customer success team.
  tags:
  - sales
  - customer-success
  - salesforce
  - nps
capability:
  exposes:
  - type: mcp
    namespace: customer-success
    port: 8080
    tools:
    - name: handle-nps-detractor
      description: Given a Salesforce contact ID and NPS score below 7, create a service case and assign it to the customer success team for follow-up. Use for automated detractor response workflows.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: The Salesforce Contact ID of the NPS survey respondent.
      - name: nps_score
        in: body
        type: integer
        description: The NPS score (0–10) from the survey response.
      - name: feedback
        in: body
        type: string
        description: Verbatim feedback provided by the respondent.
      steps:
      - name: get-contact
        type: call
        call: salesforce-contact.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: create-case
        type: call
        call: salesforce-cases.create-case
        with:
          subject: 'NPS Detractor Follow-up: {{get-contact.name}} (Score: {{nps_score}})'
          description: '{{feedback}}'
          contactId: '{{contact_id}}'
          origin: NPS Survey
          priority: High
  consumes:
  - type: http
    namespace: salesforce-contact
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contact
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: salesforce-cases
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → salesforce-customer-nps-case-creation.yml

Converts demand forecasts into production plans by pulling forecast data from Salesforce, creating planned orders in SAP, and updating the Power BI demand planning dashboard.

naftiko: '0.5'
info:
  label: Demand Forecast to Production Plan
  description: Converts demand forecasts into production plans by pulling forecast data from Salesforce, creating planned orders in SAP, and updating the Power BI demand planning dashboard.
  tags:
  - supply-chain
  - manufacturing
  - salesforce
  - sap
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: convert-forecast-to-plan
      description: 'Convert demand forecast to production plan: pull Salesforce forecast, create SAP planned orders, refresh dashboard.'
      inputParameters:
      - name: forecast_id
        in: body
        type: string
        description: The Salesforce demand forecast record ID.
      - name: plant_code
        in: body
        type: string
        description: The target manufacturing plant code.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI demand planning dataset ID.
      steps:
      - name: get-forecast
        type: call
        call: salesforce.get-forecast
        with:
          forecast_id: '{{forecast_id}}'
      - name: create-planned-orders
        type: call
        call: sap.create-planned-order
        with:
          material_number: '{{get-forecast.material}}'
          plant: '{{plant_code}}'
          planned_quantity: '{{get-forecast.quantity}}'
          planned_date: '{{get-forecast.delivery_date}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: forecasts
      path: /sobjects/Demand_Forecast__c/{{forecast_id}}
      inputParameters:
      - name: forecast_id
        in: path
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PLANNED_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: planned-orders
      path: /A_PlannedOrder
      operations:
      - name: create-planned-order
        method: POST
  - 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
Open in Framework → View in Fleet → demand-forecast-to-production-plan.yml

Pulls current active headcount and salary band data from Workday and returns a structured summary grouped by cost center for finance planning.

naftiko: '0.5'
info:
  label: Headcount Snapshot by Cost Center
  description: Pulls current active headcount and salary band data from Workday and returns a structured summary grouped by cost center for finance planning.
  tags:
  - hr
  - finance
  - reporting
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns active headcount grouped by cost center and employment type from Workday. Use for headcount planning, finance forecasting, or budget review.
      call: workday.list-workers
      outputParameters:
      - name: workers
        type: array
        mapping: $.data
  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-list
      path: /coca-cola/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → headcount-snapshot-by-cost-center.yml

Detects packaging material shortages by checking SAP inventory levels, identifies affected production orders, and escalates to supply chain and manufacturing teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Packaging Material Shortage Alert
  description: Detects packaging material shortages by checking SAP inventory levels, identifies affected production orders, and escalates to supply chain and manufacturing teams via Microsoft Teams.
  tags:
  - manufacturing
  - supply-chain
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-alert
    port: 8080
    tools:
    - name: alert-packaging-shortage
      description: 'Orchestrate packaging shortage response: check SAP inventory, identify affected orders, and notify supply chain team.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the packaging material.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: check-stock
        type: call
        call: sap.get-material-stock
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: get-affected-orders
        type: call
        call: sap.get-dependent-orders
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: notify-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-alerts
          text: 'PACKAGING SHORTAGE: Material {{material_number}} at plant {{plant_code}}. Available stock: {{check-stock.available_stock}} {{check-stock.unit}}. Affected production orders: {{get-affected-orders.count}}. Immediate procurement action required.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
    - name: dependent-orders
      path: /A_ProductionOrder?$filter=Material eq '{{material_number}}' and Plant eq '{{plant}}'
      inputParameters:
      - name: material_number
        in: query
      - name: plant
        in: query
      operations:
      - name: get-dependent-orders
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → packaging-material-shortage-alert.yml

Optimizes vending machine refills by pulling telemetry data, checking regional inventory in SAP, and creating route-optimized refill tasks in ServiceNow.

naftiko: '0.5'
info:
  label: Vending Machine Refill Optimization
  description: Optimizes vending machine refills by pulling telemetry data, checking regional inventory in SAP, and creating route-optimized refill tasks in ServiceNow.
  tags:
  - distribution
  - supply-chain
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vending-ops
    port: 8080
    tools:
    - name: optimize-refill-routes
      description: 'Optimize vending refills: pull machine telemetry, check SAP inventory, and create ServiceNow refill tasks.'
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The regional distribution code.
      - name: threshold_percent
        in: body
        type: string
        description: The stock threshold percentage to trigger refill.
      steps:
      - name: get-machine-telemetry
        type: call
        call: sap.get-vending-telemetry
        with:
          region: '{{region_code}}'
          threshold: '{{threshold_percent}}'
      - name: check-regional-inventory
        type: call
        call: sap.get-regional-stock
        with:
          region: '{{region_code}}'
      - name: create-refill-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vending refill route: Region {{region_code}}'
          description: 'Machines below {{threshold_percent}}%: {{get-machine-telemetry.low_stock_count}}. Regional inventory: {{check-regional-inventory.available_cases}} cases available.'
          category: vending_refill
          assignment_group: Distribution_{{region_code}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_VENDING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: telemetry
      path: /VendingMachineStatus?$filter=Region eq '{{region}}' and StockLevel lt {{threshold}}
      inputParameters:
      - name: region
        in: query
      - name: threshold
        in: query
      operations:
      - name: get-vending-telemetry
        method: GET
    - name: regional-stock
      path: /RegionalInventory('{{region}}')
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-regional-stock
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → vending-machine-refill-optimization.yml

When a quality issue is detected, places a batch on hold in SAP, creates a quality case in ServiceNow, and notifies the quality assurance and distribution teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Quality Hold and Recall Orchestrator
  description: When a quality issue is detected, places a batch on hold in SAP, creates a quality case in ServiceNow, and notifies the quality assurance and distribution teams via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: initiate-quality-hold
      description: 'Orchestrate a quality hold: place batch on hold in SAP, create ServiceNow case, and notify QA and distribution teams.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: batch_number
        in: body
        type: string
        description: The batch number to place on hold.
      - name: reason
        in: body
        type: string
        description: The reason for the quality hold.
      steps:
      - name: get-batch-info
        type: call
        call: sap.get-batch
        with:
          material_number: '{{material_number}}'
          batch_number: '{{batch_number}}'
      - name: place-batch-hold
        type: call
        call: sap.update-batch-status
        with:
          material_number: '{{material_number}}'
          batch_number: '{{batch_number}}'
          status: RESTRICTED
      - name: create-quality-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Quality hold: Material {{material_number}} Batch {{batch_number}}'
          description: '{{reason}}'
          category: quality_hold
          urgency: '1'
          assignment_group: Quality_Assurance
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-alerts
          text: 'QUALITY HOLD: Material {{material_number}}, Batch {{batch_number}} placed on hold. Reason: {{reason}}. Production date: {{get-batch-info.production_date}}. ServiceNow case: {{create-quality-case.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')
      inputParameters:
      - name: material_number
        in: path
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-hold-and-recall-orchestrator.yml

Orchestrates the monthly financial close by checking SAP period-end status, validating Oracle Cloud journal balances, refreshing the Power BI finance dashboard, and notifying the finance team.

naftiko: '0.5'
info:
  label: Monthly Financial Close Orchestrator
  description: Orchestrates the monthly financial close by checking SAP period-end status, validating Oracle Cloud journal balances, refreshing the Power BI finance dashboard, and notifying the finance team.
  tags:
  - finance
  - sap
  - oracle-cloud
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-monthly-close
      description: 'Orchestrate monthly financial close: check SAP period status, validate Oracle journals, refresh dashboard, and notify finance.'
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period, e.g. 2026-03.
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI finance dataset ID.
      steps:
      - name: check-period-status
        type: call
        call: sap.get-period-close-status
        with:
          company_code: '{{company_code}}'
          period: '{{fiscal_period}}'
      - name: validate-journals
        type: call
        call: oracle.get-journal-balance
        with:
          period: '{{fiscal_period}}'
      - name: refresh-finance-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-close
          text: 'Monthly close for {{fiscal_period}}: SAP period status: {{check-period-status.status}}. Oracle journal balance: {{validate-journals.balance_status}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPERIODCLOSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-close
      path: /A_FinancialPeriodClose(CompanyCode='{{company_code}}',Period='{{period}}')
      inputParameters:
      - name: company_code
        in: path
      - name: period
        in: path
      operations:
      - name: get-period-close-status
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: journal-balances
      path: /journalBalances?q=Period={{period}}
      inputParameters:
      - name: period
        in: query
      operations:
      - name: get-journal-balance
        method: GET
  - 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → monthly-financial-close-orchestrator.yml

Reconciles vendor payments by pulling invoice data from SAP, matching against Oracle Cloud payment records, and logging discrepancies in ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Payment Reconciliation
  description: Reconciles vendor payments by pulling invoice data from SAP, matching against Oracle Cloud payment records, and logging discrepancies in ServiceNow.
  tags:
  - finance
  - sap
  - oracle-cloud
  - servicenow
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: reconcile-vendor-payment
      description: Orchestrate vendor payment reconciliation across SAP invoices, Oracle Cloud payments, and ServiceNow for discrepancy tracking.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor ID.
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      steps:
      - name: get-sap-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-oracle-payment
        type: call
        call: oracle.get-payment
        with:
          vendor_id: '{{vendor_id}}'
          invoice_reference: '{{invoice_number}}'
      - name: log-discrepancy
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Payment reconciliation: Vendor {{vendor_id}} Invoice {{invoice_number}}'
          description: 'SAP amount: {{get-sap-invoice.total_amount}}. Oracle payment: {{get-oracle-payment.payment_amount}}.'
          category: finance_reconciliation
          assignment_group: Accounts_Payable
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: payments
      path: /payments?q=VendorId={{vendor_id}};InvoiceNumber={{invoice_reference}}
      inputParameters:
      - name: vendor_id
        in: query
      - name: invoice_reference
        in: query
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → vendor-payment-reconciliation.yml

Fetches open pull requests from a GitHub repository and posts a daily review-pending summary to the engineering Teams channel to prompt timely code reviews.

naftiko: '0.5'
info:
  label: GitHub Pull Request Code Review Summary
  description: Fetches open pull requests from a GitHub repository and posts a daily review-pending summary to the engineering Teams channel to prompt timely code reviews.
  tags:
  - devops
  - github
  - code-review
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-review
    port: 8080
    tools:
    - name: digest-pending-prs
      description: List all open pull requests for a GitHub repository and post a summary of review-pending PRs to the designated Teams channel. Use for daily PR queue digest automation.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The repository in owner/repo format.
      steps:
      - name: list-prs
        type: call
        call: github.list-pull-requests
        with:
          owner: coca-cola
          repo: '{{repo}}'
          state: open
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_engineering_channel_id
          text: 'PR Review Digest for {{repo}}: {{list-prs.total_count}} open PRs awaiting review.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{owner}}/{{repo}}/pulls
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: state
        in: query
      operations:
      - name: list-pull-requests
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-pull-request-code-review-summary.yml

Validates new product launch readiness by checking SAP material master setup, Salesforce product catalog entry, and Adobe Analytics tracking configuration.

naftiko: '0.5'
info:
  label: New Product Launch Readiness Check
  description: Validates new product launch readiness by checking SAP material master setup, Salesforce product catalog entry, and Adobe Analytics tracking configuration.
  tags:
  - brand-management
  - manufacturing
  - sap
  - salesforce
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: check-launch-readiness
      description: Validate new product launch readiness across SAP material master, Salesforce catalog, and Adobe Analytics tracking.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the new product.
      - name: product_id
        in: body
        type: string
        description: The Salesforce product record ID.
      steps:
      - name: check-material-master
        type: call
        call: sap.get-material-master
        with:
          material_number: '{{material_number}}'
      - name: check-sf-product
        type: call
        call: salesforce.get-product
        with:
          product_id: '{{product_id}}'
      - name: check-analytics-tracking
        type: call
        call: adobe.get-tracking-config
        with:
          product_code: '{{material_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-master
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: products
      path: /sobjects/Product2/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/cocacola
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: tracking-config
      path: /tracking/product/{{product_code}}
      inputParameters:
      - name: product_code
        in: path
      operations:
      - name: get-tracking-config
        method: GET
Open in Framework → View in Fleet → new-product-launch-readiness-check.yml

Monitors plant water usage compliance by pulling consumption data from SAP, comparing against permitted limits, and alerting environmental compliance via Microsoft Teams and ServiceNow.

naftiko: '0.5'
info:
  label: Water Usage Compliance Monitor
  description: Monitors plant water usage compliance by pulling consumption data from SAP, comparing against permitted limits, and alerting environmental compliance via Microsoft Teams and ServiceNow.
  tags:
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: environmental
    port: 8080
    tools:
    - name: monitor-water-compliance
      description: 'Monitor water usage compliance: pull SAP data, compare limits, and alert compliance team.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: period
        in: body
        type: string
        description: The monitoring period.
      steps:
      - name: get-water-usage
        type: call
        call: sap.get-plant-water-usage
        with:
          plant: '{{plant_code}}'
          period: '{{period}}'
      - name: create-compliance-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Water usage compliance: Plant {{plant_code}} - {{period}}'
          description: 'Usage: {{get-water-usage.total_liters}} liters. Permit limit: {{get-water-usage.permit_limit}} liters. Utilization: {{get-water-usage.utilization_percent}}%.'
          category: environmental_compliance
          assignment_group: Environmental_Compliance
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: environmental
          text: 'Water Usage Report: Plant {{plant_code}} ({{period}}). Usage: {{get-water-usage.total_liters}}L. Permit: {{get-water-usage.permit_limit}}L. Utilization: {{get-water-usage.utilization_percent}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: water
      path: /PlantWaterUsage(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-plant-water-usage
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → water-usage-compliance-monitor.yml

Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information.

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee-profile
      description: Look up a Coca-Cola employee profile in Workday by worker ID. Returns full name, department, job title, and manager.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID, e.g. WD-00456.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.worker.descriptor
      - name: department
        type: string
        mapping: $.worker.primaryPosition.department
      - name: job_title
        type: string
        mapping: $.worker.primaryPosition.jobTitle
      - name: manager
        type: string
        mapping: $.worker.primaryPosition.manager.descriptor
  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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile-lookup.yml

Pulls trade promotion results from Salesforce, enriches with point-of-sale data from Circana, and updates the Power BI retail analytics dashboard.

naftiko: '0.5'
info:
  label: Retail Promotion Performance Sync
  description: Pulls trade promotion results from Salesforce, enriches with point-of-sale data from Circana, and updates the Power BI retail analytics dashboard.
  tags:
  - marketing
  - salesforce
  - brand-management
  - power-bi
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: trade-marketing
    port: 8080
    tools:
    - name: sync-promotion-performance
      description: 'Orchestrate retail promotion performance sync: pull Salesforce promotion data, enrich with Circana POS data, and refresh Power BI dashboard.'
      inputParameters:
      - name: promotion_id
        in: body
        type: string
        description: The Salesforce promotion record ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI retail analytics dataset ID.
      steps:
      - name: get-promotion
        type: call
        call: salesforce.get-promotion
        with:
          promotion_id: '{{promotion_id}}'
      - name: get-pos-data
        type: call
        call: circana.get-pos-lift
        with:
          brand: '{{get-promotion.brand}}'
          start_date: '{{get-promotion.start_date}}'
          end_date: '{{get-promotion.end_date}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: promotions
      path: /sobjects/Promotion__c/{{promotion_id}}
      inputParameters:
      - name: promotion_id
        in: path
      operations:
      - name: get-promotion
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: pos-lift
      path: /pos/lift?brand={{brand}}&start={{start_date}}&end={{end_date}}
      inputParameters:
      - name: brand
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-pos-lift
        method: GET
  - 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
Open in Framework → View in Fleet → retail-promotion-performance-sync.yml

Schedules syrup concentrate production by checking raw material availability in SAP, creating production orders, and notifying the bottling plant via Microsoft Teams.

naftiko: '0.5'
info:
  label: Syrup Concentrate Production Scheduling
  description: Schedules syrup concentrate production by checking raw material availability in SAP, creating production orders, and notifying the bottling plant via Microsoft Teams.
  tags:
  - manufacturing
  - supply-chain
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: production-scheduling
    port: 8080
    tools:
    - name: schedule-concentrate-production
      description: 'Schedule concentrate production: check SAP raw materials, create production order, and notify bottling plant.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the concentrate.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      - name: quantity
        in: body
        type: string
        description: The quantity to produce.
      - name: production_date
        in: body
        type: string
        description: The target production date in YYYY-MM-DD format.
      steps:
      - name: check-raw-materials
        type: call
        call: sap.check-material-availability
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{quantity}}'
      - name: create-production-order
        type: call
        call: sap.create-production-order
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{quantity}}'
          start_date: '{{production_date}}'
      - name: notify-plant
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-{{plant_code}}-production
          text: 'Concentrate production scheduled: Material {{material_number}}. Qty: {{quantity}}. Date: {{production_date}}. Order: {{create-production-order.order_number}}. Raw material status: {{check-raw-materials.availability_status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /MaterialAvailability(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: check-material-availability
        method: GET
    - name: production-orders
      path: /A_ProductionOrder_2
      operations:
      - name: create-production-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → syrup-concentrate-production-scheduling.yml

Records a goods receipt in SAP S/4HANA for a delivered purchase order line, updates inventory, and notifies the procurement team via Teams.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Confirmation
  description: Records a goods receipt in SAP S/4HANA for a delivered purchase order line, updates inventory, and notifies the procurement team via Teams.
  tags:
  - supply-chain
  - sap
  - procurement
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: confirm-goods-receipt
      description: Given a SAP purchase order number and delivery quantity, post a goods receipt in SAP S/4HANA to update inventory and notify the procurement team via Teams.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number for the delivery.
      - name: quantity
        in: body
        type: number
        description: The quantity delivered.
      steps:
      - name: post-gr
        type: call
        call: sap.post-goods-receipt
        with:
          po_number: '{{po_number}}'
          quantity: '{{quantity}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_procurement_channel_id
          text: 'Goods receipt posted for PO {{po_number}}: {{quantity}} units received. GR Document: {{post-gr.material_document}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentHeader
      operations:
      - name: post-goods-receipt
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-confirmation.yml

Tracks regulatory compliance documents by checking expiry dates in SharePoint, creating renewal tasks in ServiceNow, and alerting the legal and compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Compliance Document Tracker
  description: Tracks regulatory compliance documents by checking expiry dates in SharePoint, creating renewal tasks in ServiceNow, and alerting the legal and compliance team via Microsoft Teams.
  tags:
  - manufacturing
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-compliance
    port: 8080
    tools:
    - name: track-compliance-documents
      description: 'Track regulatory compliance docs: check SharePoint expiry dates, create ServiceNow tasks, and alert compliance team.'
      inputParameters:
      - name: document_category
        in: body
        type: string
        description: The compliance document category, e.g. FDA, EPA, OSHA.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.get-compliance-docs
        with:
          site_id: regulatory
          category: '{{document_category}}'
          plant: '{{plant_code}}'
      - name: create-renewal-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance document renewal: {{document_category}} for plant {{plant_code}}'
          description: 'Documents expiring: {{get-documents.expiring_count}}. Next expiry: {{get-documents.next_expiry_date}}.'
          category: regulatory_compliance
          assignment_group: Legal_Compliance
      - name: alert-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-compliance
          text: 'Compliance Alert: {{document_category}} documents for plant {{plant_code}}. Expiring soon: {{get-documents.expiring_count}}. Next expiry: {{get-documents.next_expiry_date}}. Task: {{create-renewal-tasks.number}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: compliance-docs
      path: /sites/{{site_id}}/lists/{{category}}/items?$filter=Plant eq '{{plant}}'
      inputParameters:
      - name: site_id
        in: path
      - name: category
        in: path
      - name: plant
        in: query
      operations:
      - name: get-compliance-docs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-document-tracker.yml

Handles e-commerce order exceptions by pulling order details from BigCommerce, checking SAP inventory availability, and creating a Zendesk ticket for customer communication.

naftiko: '0.5'
info:
  label: E-Commerce Order Exception Handler
  description: Handles e-commerce order exceptions by pulling order details from BigCommerce, checking SAP inventory availability, and creating a Zendesk ticket for customer communication.
  tags:
  - distribution
  - bigcommerce
  - sap
  - zendesk
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: ecommerce
    port: 8080
    tools:
    - name: handle-order-exception
      description: 'Orchestrate e-commerce order exception: pull BigCommerce order, check SAP stock, and create Zendesk ticket.'
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-stock
        type: call
        call: sap.get-material-stock
        with:
          material_number: '{{get-order.sku}}'
      - name: create-support-ticket
        type: call
        call: zendesk.create-ticket
        with:
          subject: 'Order exception: #{{order_id}}'
          description: 'Order {{order_id}} for {{get-order.customer_name}} requires attention. Product: {{get-order.product_name}}. Available stock: {{check-stock.available_stock}}.'
          requester_email: '{{get-order.customer_email}}'
          priority: high
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/cocacola/v2
    authentication:
      type: apiKey
      header: X-Auth-Token
      value: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-stock
        method: GET
  - type: http
    namespace: zendesk
    baseUri: https://cocacola.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → e-commerce-order-exception-handler.yml

Assesses ingredient supplier risk by pulling vendor data from SAP, checking compliance status in ServiceNow, and generating a risk report posted to Microsoft Teams.

naftiko: '0.5'
info:
  label: Ingredient Supplier Risk Assessment
  description: Assesses ingredient supplier risk by pulling vendor data from SAP, checking compliance status in ServiceNow, and generating a risk report posted to Microsoft Teams.
  tags:
  - procurement
  - supply-chain
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: 'Assess ingredient supplier risk: pull SAP vendor data, check ServiceNow compliance, and post risk report.'
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor ID.
      steps:
      - name: get-vendor-data
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: check-compliance
        type: call
        call: servicenow.get-compliance-record
        with:
          vendor_name: '{{get-vendor-data.vendor_name}}'
      - name: post-risk-report
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-risk
          text: 'Supplier Risk Assessment: {{get-vendor-data.vendor_name}} ({{vendor_id}}). Country: {{get-vendor-data.country}}. Payment terms: {{get-vendor-data.payment_terms}}. Compliance status: {{check-compliance.status}}. Last audit: {{check-compliance.last_audit_date}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_BusinessPartner('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance
      path: /table/vendor_compliance?sysparm_query=vendor_name={{vendor_name}}
      inputParameters:
      - name: vendor_name
        in: query
      operations:
      - name: get-compliance-record
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ingredient-supplier-risk-assessment.yml

Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions for a specified campaign.

naftiko: '0.5'
info:
  label: Google Analytics Campaign Metrics
  description: Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions for a specified campaign.
  tags:
  - marketing
  - google-analytics
  - campaign-management
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Fetch Google Analytics campaign performance data. Returns sessions, bounce rate, and goal completions for a given campaign.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Google Analytics campaign identifier.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD:YYYY-MM-DD format.
      call: ga.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.reports[0].data.totals[0].values[0]
      - name: bounce_rate
        type: string
        mapping: $.reports[0].data.totals[0].values[1]
      - name: conversions
        type: string
        mapping: $.reports[0].data.totals[0].values[2]
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsreporting.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /reports:batchGet
      operations:
      - name: get-campaign-report
        method: POST
Open in Framework → View in Fleet → google-analytics-campaign-metrics.yml

Monitors co-packer production by pulling production reports from SAP, validating against contracted volumes in Salesforce, and sending a variance report to Microsoft Teams.

naftiko: '0.5'
info:
  label: Co-Packer Production Monitoring
  description: Monitors co-packer production by pulling production reports from SAP, validating against contracted volumes in Salesforce, and sending a variance report to Microsoft Teams.
  tags:
  - manufacturing
  - supply-chain
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: co-packer
    port: 8080
    tools:
    - name: monitor-copacker-production
      description: 'Monitor co-packer production: pull SAP reports, validate against Salesforce contracts, and post variance.'
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP co-packer vendor ID.
      - name: sf_contract_id
        in: body
        type: string
        description: The Salesforce contract record ID.
      - name: period
        in: body
        type: string
        description: The production period.
      steps:
      - name: get-production-report
        type: call
        call: sap.get-copacker-production
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{period}}'
      - name: get-contracted-volumes
        type: call
        call: salesforce.get-contract
        with:
          contract_id: '{{sf_contract_id}}'
      - name: post-variance
        type: call
        call: msteams.send-message
        with:
          channel_id: co-packer-ops
          text: 'Co-Packer Report for {{get-production-report.vendor_name}} ({{period}}): Produced: {{get-production-report.actual_volume}}. Contracted: {{get-contracted-volumes.contracted_volume}}. Variance: {{get-production-report.variance_percent}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: copacker-production
      path: /CopackerProduction(VendorId='{{vendor_id}}',Period='{{period}}')
      inputParameters:
      - name: vendor_id
        in: path
      - name: period
        in: path
      operations:
      - name: get-copacker-production
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /sobjects/Contract/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → co-packer-production-monitoring.yml

When a GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Pipeline Failure Alert
  description: When a GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions run ID and repository, retrieve failure details, open a ServiceNow incident, and alert the engineering Teams channel. Use when a protected-branch workflow fails.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: repo
        in: body
        type: string
        description: The repository in owner/repo format, e.g. coca-cola/supply-chain-service.
      - name: branch
        in: body
        type: string
        description: The branch name where the failure occurred.
      steps:
      - name: get-run
        type: call
        call: github.get-workflow-run
        with:
          owner: coca-cola
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CI/CD failure: {{repo}} / {{branch}}'
          description: 'GitHub Actions run {{run_id}} failed on branch {{branch}}. URL: {{get-run.html_url}}'
          urgency: '2'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_engineering_channel_id
          text: 'Pipeline Failure: {{repo}} | Branch: {{branch}} | Run: {{run_id}} | Incident: {{create-incident.number}} | Log: {{get-run.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-run
      path: /repos/{{owner}}/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-pipeline-failure-alert.yml

Synchronizes seasonal demand plans by pulling historical sales data from Teradata, adjusting SAP MRP parameters, and notifying supply chain planners via Microsoft Teams.

naftiko: '0.5'
info:
  label: Seasonal Demand Planning Sync
  description: Synchronizes seasonal demand plans by pulling historical sales data from Teradata, adjusting SAP MRP parameters, and notifying supply chain planners via Microsoft Teams.
  tags:
  - supply-chain
  - manufacturing
  - teradata
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: seasonal-planning
    port: 8080
    tools:
    - name: sync-seasonal-demand
      description: 'Sync seasonal demand: pull Teradata sales history, adjust SAP MRP, and notify planners.'
      inputParameters:
      - name: product_group
        in: body
        type: string
        description: The product group code.
      - name: season
        in: body
        type: string
        description: 'The season: spring, summer, fall, winter.'
      steps:
      - name: get-historical-sales
        type: call
        call: teradata.get-seasonal-sales
        with:
          product_group: '{{product_group}}'
          season: '{{season}}'
      - name: update-mrp-parameters
        type: call
        call: sap.update-mrp-forecast
        with:
          product_group: '{{product_group}}'
          forecast_quantity: '{{get-historical-sales.projected_demand}}'
      - name: notify-planners
        type: call
        call: msteams.send-message
        with:
          channel_id: demand-planning
          text: 'Seasonal demand update for {{product_group}} ({{season}}): Historical avg: {{get-historical-sales.avg_volume}}. Projected demand: {{get-historical-sales.projected_demand}}. SAP MRP parameters updated.'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://coca-cola-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: seasonal-sales
      path: /queries/seasonal-sales?product_group={{product_group}}&season={{season}}
      inputParameters:
      - name: product_group
        in: query
      - name: season
        in: query
      operations:
      - name: get-seasonal-sales
        method: GET
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MRP_FORECAST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: mrp-forecast
      path: /MRPForecast
      operations:
      - name: update-mrp-forecast
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seasonal-demand-planning-sync.yml

Monitors contract renewal dates by checking SAP vendor contracts, creating renewal tasks in ServiceNow, and sending reminders to procurement managers via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Contract Renewal Reminder Workflow
  description: Monitors contract renewal dates by checking SAP vendor contracts, creating renewal tasks in ServiceNow, and sending reminders to procurement managers via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: contract-management
    port: 8080
    tools:
    - name: trigger-renewal-reminder
      description: 'Orchestrate contract renewal reminder: check SAP contract, create ServiceNow task, and send Outlook reminder.'
      inputParameters:
      - name: contract_number
        in: body
        type: string
        description: The SAP contract number.
      steps:
      - name: get-contract
        type: call
        call: sap.get-contract
        with:
          contract_number: '{{contract_number}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contract renewal: {{contract_number}} - {{get-contract.vendor_name}}'
          due_date: '{{get-contract.expiry_date}}'
          assignment_group: Procurement_Management
      - name: send-reminder-email
        type: call
        call: outlook.send-email
        with:
          to: '{{get-contract.procurement_manager_email}}'
          subject: 'Contract Renewal Reminder: {{get-contract.vendor_name}}'
          body: 'Contract {{contract_number}} with {{get-contract.vendor_name}} expires on {{get-contract.expiry_date}}. Value: ${{get-contract.total_value}}. ServiceNow task: {{create-renewal-task.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PURCHASECONTRACT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: contracts
      path: /A_PurchaseContract('{{contract_number}}')
      inputParameters:
      - name: contract_number
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → contract-renewal-reminder-workflow.yml

When a bottling line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Bottling Line Downtime Response
  description: When a bottling line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: handle-bottling-downtime
      description: 'Orchestrate bottling line downtime response: check SAP equipment status, create ServiceNow ticket, and notify plant ops via Teams.'
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID for the bottling line.
      - name: plant_code
        in: body
        type: string
        description: The plant code where the downtime occurred.
      steps:
      - name: get-equipment-status
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{equipment_id}}'
      - name: create-maintenance-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Bottling line downtime: {{equipment_id}} at plant {{plant_code}}'
          category: plant_maintenance
          urgency: '1'
          assignment_group: Plant_Maintenance_{{plant_code}}
      - name: notify-plant-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-ops-{{plant_code}}
          text: 'ALERT: Bottling line {{equipment_id}} is down at plant {{plant_code}}. Equipment status: {{get-equipment-status.system_status}}. Maintenance ticket: {{create-maintenance-ticket.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bottling-line-downtime-response.yml

Aggregates marketing attribution data from Google Analytics, Adobe Analytics, and LinkedIn to create a unified campaign performance view in Salesforce.

naftiko: '0.5'
info:
  label: Multi-Channel Marketing Attribution
  description: Aggregates marketing attribution data from Google Analytics, Adobe Analytics, and LinkedIn to create a unified campaign performance view in Salesforce.
  tags:
  - marketing
  - google-analytics
  - adobe-analytics
  - linkedin
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: marketing-attribution
    port: 8080
    tools:
    - name: aggregate-attribution
      description: 'Aggregate marketing attribution: pull GA, Adobe Analytics, and LinkedIn data, then update Salesforce campaign.'
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      - name: ga_campaign_id
        in: body
        type: string
        description: The Google Analytics campaign ID.
      - name: linkedin_campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      steps:
      - name: get-ga-attribution
        type: call
        call: ga.get-campaign-report
        with:
          campaign_id: '{{ga_campaign_id}}'
      - name: get-adobe-attribution
        type: call
        call: adobe.get-campaign-attribution
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-linkedin-attribution
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{linkedin_campaign_id}}'
      - name: update-sf-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{campaign_id}}'
          web_conversions: '{{get-ga-attribution.conversions}}'
          display_impressions: '{{get-adobe-attribution.impressions}}'
          social_engagements: '{{get-linkedin-attribution.engagements}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsreporting.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /reports:batchGet
      operations:
      - name: get-campaign-report
        method: POST
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/cocacola
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: attribution
      path: /attribution
      operations:
      - name: get-campaign-attribution
        method: POST
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
Open in Framework → View in Fleet → multi-channel-marketing-attribution.yml

Queries Salesforce for opportunities that have changed stage in the last 24 hours and logs the changes to a Power BI dataset for sales pipeline reporting.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Sync
  description: Queries Salesforce for opportunities that have changed stage in the last 24 hours and logs the changes to a Power BI dataset for sales pipeline reporting.
  tags:
  - sales
  - crm
  - salesforce
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: sync-opportunity-stages
      description: Fetch all Salesforce opportunities with stage changes in the last 24 hours and push the updated records to the Power BI sales pipeline dataset. Use for daily sales pipeline refresh.
      steps:
      - name: get-changed-opps
        type: call
        call: salesforce.query-opportunities
        with:
          soql: SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE LastModifiedDate = LAST_N_DAYS:1
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: $secrets.powerbi_pipeline_dataset_id
          table_name: Opportunities
          rows: '{{get-changed-opps.records}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-stage-sync.yml

Triggers a scheduled refresh for a Power BI dataset and monitors refresh status, notifying the data analytics team via Teams when complete or failed.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Trigger
  description: Triggers a scheduled refresh for a Power BI dataset and monitors refresh status, notifying the data analytics team via Teams when complete or failed.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: data-analytics
    port: 8080
    tools:
    - name: trigger-dataset-refresh
      description: Trigger a Power BI dataset refresh for the given dataset ID and post completion status to the analytics Teams channel. Use for scheduled BI report refresh automation.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: start-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_analytics_channel_id
          text: Power BI dataset {{dataset_id}} refresh triggered successfully.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-dataset-refresh-trigger.yml

Retrieves the latest build status for a specified Azure DevOps pipeline, returning build result, duration, and triggered by.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status
  description: Retrieves the latest build status for a specified Azure DevOps pipeline, returning build result, duration, and triggered by.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: get-build-status
      description: Check the latest build status for an Azure DevOps pipeline. Returns result, duration, and source branch.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      call: azdo.get-latest-build
      with:
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.value[0].result
      - name: duration
        type: string
        mapping: $.value[0].finishTime
      - name: source_branch
        type: string
        mapping: $.value[0].sourceBranch
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/coca-cola
    authentication:
      type: basic
      username: $secrets.azdo_user
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status.yml

Rebalances warehouse inventory by checking stock levels across plants in SAP, creating stock transfer orders, and logging the rebalance action in ServiceNow.

naftiko: '0.5'
info:
  label: Warehouse Inventory Rebalance
  description: Rebalances warehouse inventory by checking stock levels across plants in SAP, creating stock transfer orders, and logging the rebalance action in ServiceNow.
  tags:
  - supply-chain
  - distribution
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: rebalance-inventory
      description: 'Orchestrate inventory rebalance: check multi-plant stock in SAP, create transfer orders, and log in ServiceNow.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: source_plant
        in: body
        type: string
        description: The source plant code.
      - name: target_plant
        in: body
        type: string
        description: The target plant code.
      - name: quantity
        in: body
        type: string
        description: The quantity to transfer.
      steps:
      - name: check-source-stock
        type: call
        call: sap.get-material-stock
        with:
          material_number: '{{material_number}}'
          plant: '{{source_plant}}'
      - name: create-transfer-order
        type: call
        call: sap.create-stock-transfer
        with:
          material_number: '{{material_number}}'
          source_plant: '{{source_plant}}'
          target_plant: '{{target_plant}}'
          quantity: '{{quantity}}'
      - name: log-rebalance
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Inventory rebalance: {{material_number}} from {{source_plant}} to {{target_plant}}'
          description: 'Transferred {{quantity}} units. Transfer order: {{create-transfer-order.transfer_order_number}}'
          category: warehouse_operations
          assignment_group: Warehouse_Ops
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
    - name: stock-transfers
      path: /A_StockTransferOrder
      operations:
      - name: create-stock-transfer
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → warehouse-inventory-rebalance.yml

Queries Datadog Logs for error spikes in a specified service over the past hour and returns a ranked summary of the top error patterns.

naftiko: '0.5'
info:
  label: Datadog Log Anomaly Investigation
  description: Queries Datadog Logs for error spikes in a specified service over the past hour and returns a ranked summary of the top error patterns.
  tags:
  - observability
  - datadog
  - logging
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: log-analysis
    port: 8080
    tools:
    - name: get-error-log-summary
      description: Query Datadog Logs for the top error patterns in a given service over the past hour. Returns ranked error messages and counts for rapid incident triage.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name to query logs for, e.g. beverage-order-service.
      call: datadog.search-logs
      with:
        query: service:{{service_name}} status:error
      outputParameters:
      - name: logs
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: logs
      path: /logs-queries/list
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-logs
        method: GET
Open in Framework → View in Fleet → datadog-log-anomaly-investigation.yml

Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, total value, and open line items.

naftiko: '0.5'
info:
  label: SAP Purchase Order Lookup
  description: Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, total value, and open line items.
  tags:
  - finance
  - procurement
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a Coca-Cola SAP S/4HANA purchase order by PO number. Returns status, vendor name, total amount, and currency. Use for procurement tracking or invoice reconciliation.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number, e.g. 4500001234.
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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
Open in Framework → View in Fleet → sap-purchase-order-lookup.yml

Retrieves the current status of a ServiceNow incident by incident number, returning state, priority, assigned group, and resolution notes.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Lookup
  description: Retrieves the current status of a ServiceNow incident by incident number, returning state, priority, assigned group, and resolution notes.
  tags:
  - it-operations
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a ServiceNow incident by number. Returns current state, priority, assignment group, and short description.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assignment_group
        type: string
        mapping: $.result.assignment_group.display_value
      - name: short_description
        type: string
        mapping: $.result.short_description
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-lookup.yml

Manages IT asset lifecycle by checking asset status in ServiceNow, verifying user assignment in Workday, and updating the asset tracking record.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Management
  description: Manages IT asset lifecycle by checking asset status in ServiceNow, verifying user assignment in Workday, and updating the asset tracking record.
  tags:
  - it-operations
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-asset
    port: 8080
    tools:
    - name: manage-asset-lifecycle
      description: 'Manage IT asset lifecycle: check ServiceNow asset, verify Workday user, and update tracking.'
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: The ServiceNow asset tag.
      steps:
      - name: get-asset
        type: call
        call: servicenow.get-asset
        with:
          asset_tag: '{{asset_tag}}'
      - name: get-assigned-user
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-asset.assigned_to_worker_id}}'
      - name: update-asset-record
        type: call
        call: servicenow.update-asset
        with:
          asset_tag: '{{asset_tag}}'
          assigned_user: '{{get-assigned-user.full_name}}'
          department: '{{get-assigned-user.department}}'
      - name: notify-it-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: it-asset-management
          text: 'Asset {{asset_tag}} verified. Assigned to: {{get-assigned-user.full_name}} ({{get-assigned-user.department}}). Status: {{get-asset.status}}. Age: {{get-asset.age_months}} months.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/alm_hardware?sysparm_query=asset_tag={{asset_tag}}
      inputParameters:
      - name: asset_tag
        in: query
      operations:
      - name: get-asset
        method: GET
      - name: update-asset
        method: PATCH
  - 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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-management.yml

Given a Salesforce account ID, retrieves account details, open opportunities, and recent service cases to produce a unified health summary for the account manager.

naftiko: '0.5'
info:
  label: Salesforce Account Health Check
  description: Given a Salesforce account ID, retrieves account details, open opportunities, and recent service cases to produce a unified health summary for the account manager.
  tags:
  - sales
  - crm
  - salesforce
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account-health
      description: Given a Salesforce account ID, retrieve the account profile, open opportunities, and recent service cases. Returns a consolidated health view for account review meetings.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce Account ID (18-character Salesforce ID).
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-opportunities
        type: call
        call: salesforce-opp.query-opportunities
        with:
          soql: SELECT Id,Name,StageName,Amount FROM Opportunity WHERE AccountId='{{account_id}}' AND IsClosed=false
      - name: get-cases
        type: call
        call: salesforce-case.query-cases
        with:
          soql: SELECT Id,Subject,Status,CreatedDate FROM Case WHERE AccountId='{{account_id}}' ORDER BY CreatedDate DESC LIMIT 5
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: account
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce-opp
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: salesforce-case
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query-cases
        method: GET
Open in Framework → View in Fleet → salesforce-account-health-check.yml

Pulls production order data from SAP, calculates yield variance, refreshes the Power BI manufacturing dashboard, and posts a yield summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Production Yield Analysis and Report
  description: Pulls production order data from SAP, calculates yield variance, refreshes the Power BI manufacturing dashboard, and posts a yield summary to Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-analytics
    port: 8080
    tools:
    - name: analyze-production-yield
      description: 'Orchestrate production yield analysis: pull SAP production data, refresh Power BI dashboard, and post summary to Teams.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      - name: production_date
        in: body
        type: string
        description: The production date in YYYY-MM-DD format.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI manufacturing dataset ID.
      steps:
      - name: get-production-orders
        type: call
        call: sap.get-production-orders-by-plant
        with:
          plant_code: '{{plant_code}}'
          date: '{{production_date}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: post-yield-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-ops
          text: 'Production Yield Report for Plant {{plant_code}} on {{production_date}}: Total orders: {{get-production-orders.count}}. Dashboard refresh status: {{refresh-dashboard.status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder_2?$filter=ProductionPlant eq '{{plant_code}}' and MfgOrderPlannedStartDate eq datetime'{{date}}'
      inputParameters:
      - name: plant_code
        in: query
      - name: date
        in: query
      operations:
      - name: get-production-orders-by-plant
        method: GET
  - 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-yield-analysis-and-report.yml

Retrieves a SAP plant maintenance order by order number, returning equipment, functional location, priority, and system status.

naftiko: '0.5'
info:
  label: SAP Plant Maintenance Order Lookup
  description: Retrieves a SAP plant maintenance order by order number, returning equipment, functional location, priority, and system status.
  tags:
  - manufacturing
  - sap
  - maintenance
capability:
  exposes:
  - type: mcp
    namespace: plant-maintenance
    port: 8080
    tools:
    - name: get-maintenance-order
      description: Look up a SAP plant maintenance order. Returns equipment ID, functional location, priority, and current status.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP maintenance order number.
      call: sap.get-maintenance-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: equipment
        type: string
        mapping: $.d.Equipment
      - name: functional_location
        type: string
        mapping: $.d.FunctionalLocation
      - name: priority
        type: string
        mapping: $.d.MaintenanceOrderPriority
      - name: status
        type: string
        mapping: $.d.MaintenanceOrderSystemStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-maintenance-order
        method: GET
Open in Framework → View in Fleet → sap-plant-maintenance-order-lookup.yml

Syncs LinkedIn employer branding campaign metrics to Workday recruiting analytics and posts a talent acquisition report to Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Sync
  description: Syncs LinkedIn employer branding campaign metrics to Workday recruiting analytics and posts a talent acquisition report to Microsoft Teams.
  tags:
  - hr
  - marketing
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-marketing
    port: 8080
    tools:
    - name: sync-employer-brand
      description: Sync LinkedIn employer brand campaign data to Workday and post report to Teams.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      steps:
      - name: get-linkedin-metrics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
      - name: update-workday-recruiting
        type: call
        call: workday.update-recruiting-metrics
        with:
          source: linkedin
          impressions: '{{get-linkedin-metrics.impressions}}'
          applications: '{{get-linkedin-metrics.conversions}}'
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: talent-acquisition
          text: 'LinkedIn Employer Brand Report: Impressions: {{get-linkedin-metrics.impressions}}. Clicks: {{get-linkedin-metrics.clicks}}. Applications: {{get-linkedin-metrics.conversions}}. Cost per application: ${{get-linkedin-metrics.cost_per_conversion}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: recruiting-metrics
      path: /coca-cola/recruiting/metrics
      operations:
      - name: update-recruiting-metrics
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-sync.yml

When an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding Workflow
  description: When an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and termination date, deactivate the Microsoft 365 account, close open ServiceNow tickets assigned to the user, and notify the HR business partner via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The termination effective date in ISO 8601 format.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: disable-account
        type: call
        call: msgraph.disable-user
        with:
          user_upn: '{{get-worker.work_email}}'
      - name: close-tickets
        type: call
        call: servicenow.close-user-incidents
        with:
          caller_email: '{{get-worker.work_email}}'
      - name: notify-hr
        type: call
        call: msteams-notify.send-message
        with:
          recipient_upn: '{{get-worker.manager_email}}'
          text: 'Offboarding complete for {{get-worker.full_name}} (termination date: {{termination_date}}). M365 account disabled.'
  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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-account
      path: /users/{{user_upn}}
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: close-user-incidents
        method: PATCH
  - type: http
    namespace: msteams-notify
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-workflow.yml

Assembles a QBR data pack by pulling account health, open opportunities, and case volume from Salesforce, then posts a summary to the sales leadership Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Quarterly Business Review Pack Builder
  description: Assembles a QBR data pack by pulling account health, open opportunities, and case volume from Salesforce, then posts a summary to the sales leadership Teams channel.
  tags:
  - sales
  - salesforce
  - reporting
  - microsoft-teams
  - qbr
capability:
  exposes:
  - type: mcp
    namespace: sales-qbr
    port: 8080
    tools:
    - name: build-qbr-pack
      description: Given a Salesforce account ID, compile a QBR data pack with account health metrics, pipeline, and case volume, then post a summary to the sales leadership Teams channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce Account ID for the QBR.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-pipeline
        type: call
        call: salesforce-pipeline.query-opportunities
        with:
          soql: SELECT Id,Name,Amount,StageName FROM Opportunity WHERE AccountId='{{account_id}}' AND IsClosed=false
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'QBR Pack ready for {{get-account.Name}}: {{get-pipeline.totalSize}} open opportunities compiled.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: account
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce-pipeline
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-quarterly-business-review-pack-builder.yml

Schedules fleet vehicle maintenance by checking SAP equipment records, creating a ServiceNow work order, and notifying the fleet management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fleet Vehicle Maintenance Scheduler
  description: Schedules fleet vehicle maintenance by checking SAP equipment records, creating a ServiceNow work order, and notifying the fleet management team via Microsoft Teams.
  tags:
  - distribution
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fleet-ops
    port: 8080
    tools:
    - name: schedule-vehicle-maintenance
      description: 'Orchestrate fleet maintenance: check SAP equipment, create ServiceNow work order, and notify fleet team.'
      inputParameters:
      - name: vehicle_id
        in: body
        type: string
        description: The SAP equipment ID for the fleet vehicle.
      - name: maintenance_type
        in: body
        type: string
        description: 'Type of maintenance: preventive, corrective, inspection.'
      steps:
      - name: get-vehicle-record
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{vehicle_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Fleet maintenance: {{vehicle_id}} - {{maintenance_type}}'
          assignment_group: Fleet_Maintenance
          vehicle_id: '{{vehicle_id}}'
          last_service_date: '{{get-vehicle-record.last_maintenance_date}}'
      - name: notify-fleet-team
        type: call
        call: msteams.send-message
        with:
          channel_id: fleet-management
          text: 'Maintenance scheduled for vehicle {{vehicle_id}}. Type: {{maintenance_type}}. Last service: {{get-vehicle-record.last_maintenance_date}}. Work order: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fleet-vehicle-maintenance-scheduler.yml

When a new hire record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: New Hire Onboarding Orchestrator
  description: When a new hire record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a Workday employee ID and start date, orchestrate the full new hire onboarding sequence across ServiceNow, Microsoft 365, and Microsoft Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire, e.g. WD-00123.
      - name: start_date
        in: body
        type: string
        description: The employee start date in ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-onboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-worker.full_name}}'
          category: hr_onboarding
          assigned_to: IT_Onboarding_Team
      - name: provision-m365
        type: call
        call: msgraph.create-user
        with:
          displayName: '{{get-worker.full_name}}'
          mail: '{{get-worker.work_email}}'
          department: '{{get-worker.department}}'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          text: Welcome to Coca-Cola, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-hire-onboarding-orchestrator.yml

When a cold chain temperature breach is detected, retrieves shipment details from SAP, creates a quality incident in ServiceNow, and alerts the distribution team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Breach Response
  description: When a cold chain temperature breach is detected, retrieves shipment details from SAP, creates a quality incident in ServiceNow, and alerts the distribution team via Microsoft Teams.
  tags:
  - supply-chain
  - distribution
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: handle-temperature-breach
      description: 'Orchestrate cold chain breach response: pull SAP shipment data, create quality incident, and alert distribution team.'
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The SAP shipment document number.
      - name: temperature_reading
        in: body
        type: string
        description: The recorded temperature in Celsius.
      steps:
      - name: get-shipment
        type: call
        call: sap.get-shipment
        with:
          shipment_id: '{{shipment_id}}'
      - name: create-quality-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold chain breach: Shipment {{shipment_id}} at {{temperature_reading}}C'
          category: quality_cold_chain
          urgency: '1'
          assignment_group: Quality_Distribution
      - name: alert-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: distribution-alerts
          text: 'COLD CHAIN ALERT: Shipment {{shipment_id}} recorded {{temperature_reading}}C. Destination: {{get-shipment.destination}}. ServiceNow: {{create-quality-incident.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_SHIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: shipments
      path: /A_Shipment('{{shipment_id}}')
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-shipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-breach-response.yml

Processes raw material procurement approvals by validating the SAP purchase requisition, checking budget availability in Oracle Cloud, and routing for approval via Microsoft Power Automate.

naftiko: '0.5'
info:
  label: Raw Material Procurement Approval
  description: Processes raw material procurement approvals by validating the SAP purchase requisition, checking budget availability in Oracle Cloud, and routing for approval via Microsoft Power Automate.
  tags:
  - procurement
  - supply-chain
  - sap
  - oracle-cloud
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: process-procurement-approval
      description: 'Orchestrate raw material procurement approval: validate SAP PR, check Oracle budget, and route approval.'
      inputParameters:
      - name: requisition_number
        in: body
        type: string
        description: The SAP purchase requisition number.
      steps:
      - name: get-requisition
        type: call
        call: sap.get-purchase-requisition
        with:
          requisition_number: '{{requisition_number}}'
      - name: check-budget
        type: call
        call: oracle.check-budget-availability
        with:
          cost_center: '{{get-requisition.cost_center}}'
          amount: '{{get-requisition.total_amount}}'
      - name: route-approval
        type: call
        call: power-automate.trigger-flow
        with:
          flow_id: procurement-approval
          requisition_number: '{{requisition_number}}'
          amount: '{{get-requisition.total_amount}}'
          budget_status: '{{check-budget.status}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /A_PurchaseRequisition('{{requisition_number}}')
      inputParameters:
      - name: requisition_number
        in: path
      operations:
      - name: get-purchase-requisition
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: budgets
      path: /budgetBalances?q=CostCenter={{cost_center}}
      inputParameters:
      - name: cost_center
        in: query
      operations:
      - name: check-budget-availability
        method: GET
  - type: http
    namespace: power-automate
    baseUri: https://prod-cocacola.logic.azure.com
    authentication:
      type: apiKey
      header: x-flow-key
      value: $secrets.power_automate_key
    resources:
    - name: flows
      path: /workflows/{{flow_id}}/triggers/manual/paths/invoke
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → raw-material-procurement-approval.yml

Reconciles goods movements by pulling movement data from SAP, validating against warehouse records, and creating discrepancy reports in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Goods Movement Reconciliation
  description: Reconciles goods movements by pulling movement data from SAP, validating against warehouse records, and creating discrepancy reports in ServiceNow.
  tags:
  - supply-chain
  - sap
  - servicenow
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: goods-movement
    port: 8080
    tools:
    - name: reconcile-goods-movements
      description: 'Reconcile SAP goods movements: pull movement data, validate against warehouse, and log discrepancies.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: movement_date
        in: body
        type: string
        description: The date to reconcile in YYYY-MM-DD format.
      steps:
      - name: get-goods-movements
        type: call
        call: sap.get-goods-movements
        with:
          plant: '{{plant_code}}'
          date: '{{movement_date}}'
      - name: get-warehouse-records
        type: call
        call: sap.get-warehouse-inventory
        with:
          plant: '{{plant_code}}'
          date: '{{movement_date}}'
      - name: log-discrepancies
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Goods movement discrepancy: Plant {{plant_code}} on {{movement_date}}'
          description: 'Total movements: {{get-goods-movements.count}}. Warehouse records: {{get-warehouse-records.count}}.'
          category: inventory_reconciliation
          assignment_group: Warehouse_Ops_{{plant_code}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: goods-movements
      path: /A_MaterialDocumentHeader?$filter=Plant eq '{{plant}}' and PostingDate eq datetime'{{date}}'
      inputParameters:
      - name: plant
        in: query
      - name: date
        in: query
      operations:
      - name: get-goods-movements
        method: GET
    - name: warehouse-inventory
      path: /WarehouseInventory(Plant='{{plant}}',Date='{{date}}')
      inputParameters:
      - name: plant
        in: path
      - name: date
        in: path
      operations:
      - name: get-warehouse-inventory
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → sap-goods-movement-reconciliation.yml

Calculates trade promotion ROI by pulling promotion spend from SAP, incremental sales from Circana, and posting the ROI analysis to Salesforce and Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Promotion ROI Calculator
  description: Calculates trade promotion ROI by pulling promotion spend from SAP, incremental sales from Circana, and posting the ROI analysis to Salesforce and Microsoft Teams.
  tags:
  - marketing
  - finance
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-promotion-roi
    port: 8080
    tools:
    - name: calculate-promotion-roi
      description: 'Calculate trade promotion ROI: pull SAP spend, Circana sales lift, and post analysis to Salesforce and Teams.'
      inputParameters:
      - name: promotion_id
        in: body
        type: string
        description: The Salesforce promotion record ID.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center for promotion spend.
      steps:
      - name: get-promotion-spend
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
      - name: get-sales-lift
        type: call
        call: circana.get-promotion-lift
        with:
          promotion_id: '{{promotion_id}}'
      - name: update-sf-promotion
        type: call
        call: salesforce.update-promotion
        with:
          promotion_id: '{{promotion_id}}'
          total_spend: '{{get-promotion-spend.total_actual}}'
          incremental_volume: '{{get-sales-lift.incremental_volume}}'
          roi_percentage: '{{get-sales-lift.roi}}'
      - name: post-roi-report
        type: call
        call: msteams.send-message
        with:
          channel_id: trade-marketing
          text: 'Trade Promotion ROI: Promotion {{promotion_id}}. Spend: ${{get-promotion-spend.total_actual}}. Incremental volume: {{get-sales-lift.incremental_volume}}. ROI: {{get-sales-lift.roi}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')/to_Actuals
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: promotion-lift
      path: /promotions/{{promotion_id}}/lift
      inputParameters:
      - name: promotion_id
        in: path
      operations:
      - name: get-promotion-lift
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: promotions
      path: /sobjects/Promotion__c/{{promotion_id}}
      inputParameters:
      - name: promotion_id
        in: path
      operations:
      - name: update-promotion
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-promotion-roi-calculator.yml

Audits all repositories in the Coca-Cola GitHub organization for missing branch protection rules and reports non-compliant repositories to the security team via Teams.

naftiko: '0.5'
info:
  label: GitHub Repository Security Policy Audit
  description: Audits all repositories in the Coca-Cola GitHub organization for missing branch protection rules and reports non-compliant repositories to the security team via Teams.
  tags:
  - security
  - github
  - devops
  - compliance
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-branch-protection
      description: List all repositories in the Coca-Cola GitHub organization and check each for branch protection rules on the default branch. Report non-compliant repos to the security Teams channel.
      steps:
      - name: list-repos
        type: call
        call: github.list-org-repos
        with:
          org: coca-cola
          type: private
      - name: post-audit-report
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_security_channel_id
          text: 'Branch Protection Audit: {{list-repos.total_count}} private repositories reviewed for compliance.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-repos
      path: /orgs/{{org}}/repos
      inputParameters:
      - name: org
        in: path
      - name: type
        in: query
      operations:
      - name: list-org-repos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-repository-security-policy-audit.yml

Optimizes route-to-market by analyzing Salesforce retail account data, checking SAP warehouse inventory, and generating optimized delivery routes posted to Microsoft Teams.

naftiko: '0.5'
info:
  label: Route to Market Optimization
  description: Optimizes route-to-market by analyzing Salesforce retail account data, checking SAP warehouse inventory, and generating optimized delivery routes posted to Microsoft Teams.
  tags:
  - distribution
  - supply-chain
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: route-optimization
    port: 8080
    tools:
    - name: optimize-routes
      description: 'Optimize delivery routes: analyze Salesforce accounts, check SAP inventory, and post optimized routes.'
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The distribution region code.
      - name: delivery_date
        in: body
        type: string
        description: Target delivery date in YYYY-MM-DD format.
      steps:
      - name: get-retail-accounts
        type: call
        call: salesforce.get-region-accounts
        with:
          region: '{{region_code}}'
      - name: check-warehouse-stock
        type: call
        call: sap.get-regional-stock
        with:
          region: '{{region_code}}'
      - name: post-optimized-routes
        type: call
        call: msteams.send-message
        with:
          channel_id: distribution-{{region_code}}
          text: 'Route optimization for {{region_code}} on {{delivery_date}}: Active accounts: {{get-retail-accounts.count}}. Warehouse stock: {{check-warehouse-stock.total_cases}} cases. Routes generated and ready for dispatch.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query?q=SELECT+Id,Name+FROM+Account+WHERE+Region__c='{{region}}'
      inputParameters:
      - name: region
        in: query
      operations:
      - name: get-region-accounts
        method: GET
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: regional-stock
      path: /RegionalInventory('{{region}}')
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-regional-stock
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → route-to-market-optimization.yml

When Dynatrace detects performance degradation, retrieves problem details, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Dynatrace Performance Degradation Alert
  description: When Dynatrace detects performance degradation, retrieves problem details, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams.
  tags:
  - it-operations
  - dynatrace
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-ops
    port: 8080
    tools:
    - name: handle-performance-degradation
      description: 'Handle Dynatrace performance alert: get problem details, create ServiceNow incident, and notify SRE team.'
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: The Dynatrace problem ID.
      steps:
      - name: get-problem-details
        type: call
        call: dynatrace.get-problem
        with:
          problem_id: '{{problem_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Performance degradation: {{get-problem-details.title}}'
          description: 'Impact: {{get-problem-details.impact_level}}. Root cause: {{get-problem-details.root_cause}}. Affected services: {{get-problem-details.affected_entities}}.'
          urgency: '2'
          assignment_group: SRE_Team
      - name: notify-sre
        type: call
        call: msteams.send-message
        with:
          channel_id: sre-alerts
          text: 'Performance Alert: {{get-problem-details.title}}. Impact: {{get-problem-details.impact_level}}. ServiceNow: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://cocacola.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems/{{problem_id}}
      inputParameters:
      - name: problem_id
        in: path
      operations:
      - name: get-problem
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dynatrace-performance-degradation-alert.yml

Performs distributor credit checks by validating credit limits in SAP, checking payment history in Salesforce, and releasing or blocking the sales order.

naftiko: '0.5'
info:
  label: Distributor Credit Check and Order Release
  description: Performs distributor credit checks by validating credit limits in SAP, checking payment history in Salesforce, and releasing or blocking the sales order.
  tags:
  - distribution
  - finance
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: credit-management
    port: 8080
    tools:
    - name: check-credit-and-release
      description: Check distributor credit in SAP, verify Salesforce payment history, and release or block sales order.
      inputParameters:
      - name: sales_order_number
        in: body
        type: string
        description: The SAP sales order number.
      - name: account_id
        in: body
        type: string
        description: The Salesforce distributor account ID.
      steps:
      - name: get-credit-status
        type: call
        call: sap.get-credit-status
        with:
          sales_order: '{{sales_order_number}}'
      - name: get-payment-history
        type: call
        call: salesforce.get-payment-history
        with:
          account_id: '{{account_id}}'
      - name: release-order
        type: call
        call: sap.release-credit-block
        with:
          sales_order: '{{sales_order_number}}'
          credit_status: '{{get-credit-status.credit_status}}'
          payment_score: '{{get-payment-history.payment_score}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: credit-status
      path: /A_SalesOrder('{{sales_order}}')/to_CreditStatus
      inputParameters:
      - name: sales_order
        in: path
      operations:
      - name: get-credit-status
        method: GET
    - name: credit-release
      path: /A_SalesOrder('{{sales_order}}')/to_CreditRelease
      inputParameters:
      - name: sales_order
        in: path
      operations:
      - name: release-credit-block
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: payment-history
      path: /sobjects/Account/{{account_id}}/Payment_History__r
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-payment-history
        method: GET
Open in Framework → View in Fleet → distributor-credit-check-and-order-release.yml

Retrieves the current stock level for a given material number from SAP S/4HANA, returning plant, storage location, and available quantity.

naftiko: '0.5'
info:
  label: SAP Material Stock Level Check
  description: Retrieves the current stock level for a given material number from SAP S/4HANA, returning plant, storage location, and available quantity.
  tags:
  - supply-chain
  - sap
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-material-stock
      description: Look up current stock levels for a material in SAP S/4HANA. Returns plant, storage location, unrestricted stock, and unit of measure.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number, e.g. 000000000050001234.
      call: sap.get-material-stock
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: plant
        type: string
        mapping: $.d.Plant
      - name: storage_location
        type: string
        mapping: $.d.StorageLocation
      - name: available_stock
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
      - name: unit
        type: string
        mapping: $.d.MaterialBaseUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-stock
        method: GET
Open in Framework → View in Fleet → sap-material-stock-level-check.yml

When a critical ServiceNow incident is raised, creates a Datadog event marker, pages the on-call engineer, and posts an alert to the IT-incidents Microsoft Teams channel.

naftiko: '0.5'
info:
  label: IT Incident Response Orchestrator
  description: When a critical ServiceNow incident is raised, creates a Datadog event marker, pages the on-call engineer, and posts an alert to the IT-incidents Microsoft Teams channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-critical-incident
      description: Given a ServiceNow incident number, retrieve incident details, create a Datadog event marker for correlation, and post an alert to the IT-incidents Teams channel. Use for critical P1/P2 incident bridges.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'ServiceNow Incident: {{incident_number}}'
          text: '{{get-incident.short_description}} — Priority: {{get-incident.priority}}'
          alert_type: error
      - name: post-teams-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_it_channel_id
          text: 'CRITICAL INCIDENT {{incident_number}}: {{get-incident.short_description}} | Assigned: {{get-incident.assigned_to}} | Datadog event: {{create-datadog-event.event_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-incident-response-orchestrator.yml

Reconciles digital marketing spend by pulling campaign costs from Google Analytics, comparing with SAP cost center actuals, and posting a variance report to Microsoft Teams.

naftiko: '0.5'
info:
  label: Digital Marketing Spend Reconciliation
  description: Reconciles digital marketing spend by pulling campaign costs from Google Analytics, comparing with SAP cost center actuals, and posting a variance report to Microsoft Teams.
  tags:
  - marketing
  - finance
  - google-analytics
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-finance
    port: 8080
    tools:
    - name: reconcile-marketing-spend
      description: Reconcile digital marketing spend across Google Analytics and SAP, then post variance report to Teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center for marketing.
      - name: campaign_id
        in: body
        type: string
        description: The Google Analytics campaign ID.
      - name: period
        in: body
        type: string
        description: The fiscal period, e.g. 2026-03.
      steps:
      - name: get-ga-spend
        type: call
        call: ga.get-campaign-cost
        with:
          campaign_id: '{{campaign_id}}'
          period: '{{period}}'
      - name: get-sap-actuals
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
          period: '{{period}}'
      - name: post-variance-report
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-finance
          text: 'Marketing Spend Reconciliation for {{period}}: GA Campaign Spend: ${{get-ga-spend.total_cost}}. SAP Cost Center Actuals: ${{get-sap-actuals.total_actual}}. Variance requires review.'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsreporting.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: campaign-cost
      path: /reports:batchGet
      operations:
      - name: get-campaign-cost
        method: POST
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')/to_Actuals?$filter=Period eq '{{period}}'
      inputParameters:
      - name: cost_center
        in: path
      - name: period
        in: query
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-marketing-spend-reconciliation.yml

Creates a ServiceNow change request for a planned infrastructure change, routes it for manager approval, and notifies the requester via Teams when approved or rejected.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval
  description: Creates a ServiceNow change request for a planned infrastructure change, routes it for manager approval, and notifies the requester via Teams when approved or rejected.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: create-change-request
      description: Given a change description, risk level, and planned start/end times, create a ServiceNow change request and notify the requester of submission via Teams.
      inputParameters:
      - name: description
        in: body
        type: string
        description: A description of the planned infrastructure change.
      - name: risk
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: planned_start
        in: body
        type: string
        description: Planned change start time in ISO 8601 format.
      - name: requester_upn
        in: body
        type: string
        description: UPN (email) of the person requesting the change.
      steps:
      - name: create-cr
        type: call
        call: servicenow.create-change
        with:
          description: '{{description}}'
          risk: '{{risk}}'
          start_date: '{{planned_start}}'
      - name: notify-requester
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requester_upn}}'
          text: Your change request {{create-cr.number}} has been submitted and is pending approval.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval.yml

Retrieves the status of a running Teradata query by session ID, returning query state, elapsed time, and CPU consumption.

naftiko: '0.5'
info:
  label: Teradata Warehouse Query Status
  description: Retrieves the status of a running Teradata query by session ID, returning query state, elapsed time, and CPU consumption.
  tags:
  - analytics
  - teradata
  - data-warehouse
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: get-query-status
      description: Check the status of a Teradata query by session ID. Returns query state, elapsed time, and CPU seconds.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: The Teradata session ID.
      call: teradata.get-query-status
      with:
        session_id: '{{session_id}}'
      outputParameters:
      - name: query_state
        type: string
        mapping: $.queryState
      - name: elapsed_time
        type: string
        mapping: $.elapsedTime
      - name: cpu_seconds
        type: string
        mapping: $.cpuSeconds
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://coca-cola-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries/{{session_id}}/status
      inputParameters:
      - name: session_id
        in: path
      operations:
      - name: get-query-status
        method: GET
Open in Framework → View in Fleet → teradata-warehouse-query-status.yml

Retrieves a Zendesk support ticket by ID, returning status, priority, requester, and subject for customer service tracking.

naftiko: '0.5'
info:
  label: Zendesk Ticket Status Lookup
  description: Retrieves a Zendesk support ticket by ID, returning status, priority, requester, and subject for customer service tracking.
  tags:
  - customer-service
  - zendesk
  - support
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk support ticket by ID. Returns status, priority, requester name, and subject.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
      - name: requester
        type: string
        mapping: $.ticket.requester.name
      - name: subject
        type: string
        mapping: $.ticket.subject
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://cocacola.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-ticket-status-lookup.yml

When Datadog detects an infrastructure anomaly above a threshold, creates a ServiceNow incident and notifies the SRE team in Teams with metric context.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Anomaly Responder
  description: When Datadog detects an infrastructure anomaly above a threshold, creates a ServiceNow incident and notifies the SRE team in Teams with metric context.
  tags:
  - observability
  - datadog
  - servicenow
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-infra-anomaly
      description: Given a Datadog monitor ID and alert status, fetch monitor details, create a ServiceNow incident, and post context-rich alert to the SRE Teams channel. Use for infrastructure anomaly response automation.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the alert.
      - name: alert_status
        in: body
        type: string
        description: 'The alert status: Alert, Warn, or No Data.'
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Datadog anomaly: {{get-monitor.name}}'
          description: 'Monitor ID: {{monitor_id}} | Status: {{alert_status}} | Query: {{get-monitor.query}}'
          urgency: '1'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sre_channel_id
          text: 'Infra Anomaly: {{get-monitor.name}} | Status: {{alert_status}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-anomaly-responder.yml

Checks workforce training compliance by pulling training records from Workday, verifying certifications against requirements, and creating non-compliance tasks in ServiceNow.

naftiko: '0.5'
info:
  label: Workforce Training Compliance Check
  description: Checks workforce training compliance by pulling training records from Workday, verifying certifications against requirements, and creating non-compliance tasks in ServiceNow.
  tags:
  - hr
  - manufacturing
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: 'Check training compliance: pull Workday records, verify certifications, and create ServiceNow tasks for gaps.'
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to check.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-training-records
        type: call
        call: workday.get-training-records
        with:
          department: '{{department}}'
          location: '{{plant_code}}'
      - name: create-compliance-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Training compliance gap: {{department}} at plant {{plant_code}}'
          description: 'Overdue trainings: {{get-training-records.overdue_count}}. Expiring certifications: {{get-training-records.expiring_count}}.'
          category: training_compliance
          assignment_group: HR_Training
      - name: notify-hr
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-compliance
          text: 'Training Compliance Report for {{department}} at plant {{plant_code}}: Total employees: {{get-training-records.total_employees}}. Compliant: {{get-training-records.compliant_count}}. Overdue: {{get-training-records.overdue_count}}. ServiceNow task: {{create-compliance-tasks.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: training
      path: /coca-cola/training/records?department={{department}}&location={{location}}
      inputParameters:
      - name: department
        in: query
      - name: location
        in: query
      operations:
      - name: get-training-records
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workforce-training-compliance-check.yml

Manages packaging changes by updating the SAP material master, creating a change request in ServiceNow, and notifying brand management and manufacturing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Brand Packaging Change Management
  description: Manages packaging changes by updating the SAP material master, creating a change request in ServiceNow, and notifying brand management and manufacturing via Microsoft Teams.
  tags:
  - brand-management
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: packaging-change
    port: 8080
    tools:
    - name: manage-packaging-change
      description: 'Manage packaging change: update SAP material, create ServiceNow change request, and notify teams.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: change_description
        in: body
        type: string
        description: Description of the packaging change.
      - name: effective_date
        in: body
        type: string
        description: Effective date in YYYY-MM-DD format.
      steps:
      - name: get-current-material
        type: call
        call: sap.get-material-master
        with:
          material_number: '{{material_number}}'
      - name: create-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Packaging change: Material {{material_number}}'
          description: '{{change_description}}. Current packaging: {{get-current-material.packaging_type}}. Effective: {{effective_date}}.'
          category: packaging_change
          assignment_group: Brand_Packaging
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-packaging
          text: 'Packaging Change: Material {{material_number}} ({{get-current-material.description}}). Change: {{change_description}}. Effective: {{effective_date}}. Change request: {{create-change-request.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-master
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-packaging-change-management.yml

Orchestrates new supplier onboarding by creating the vendor master in SAP, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Onboarding Orchestrator
  description: Orchestrates new supplier onboarding by creating the vendor master in SAP, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.
  tags:
  - procurement
  - sap
  - sharepoint
  - microsoft-teams
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: procurement-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: 'Orchestrate supplier onboarding: create SAP vendor master, set up SharePoint workspace, and notify procurement team.'
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The supplier company name.
      - name: vendor_country
        in: body
        type: string
        description: The supplier country code.
      - name: category
        in: body
        type: string
        description: The procurement category, e.g. raw-materials, packaging.
      steps:
      - name: create-vendor
        type: call
        call: sap.create-vendor
        with:
          name: '{{vendor_name}}'
          country: '{{vendor_country}}'
          purchasing_group: '{{category}}'
      - name: create-contract-workspace
        type: call
        call: sharepoint.create-folder
        with:
          site_id: procurement
          folder_path: Vendors/{{vendor_name}}
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-ops
          text: 'New supplier onboarded: {{vendor_name}} ({{vendor_country}}). SAP Vendor ID: {{create-vendor.vendor_id}}. Category: {{category}}. Contract workspace created in SharePoint.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_BusinessPartner
      operations:
      - name: create-vendor
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-onboarding-orchestrator.yml

Queries Workday for pending time-off requests older than 48 hours and sends a reminder to the responsible managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Approval Reminder
  description: Queries Workday for pending time-off requests older than 48 hours and sends a reminder to the responsible managers via Microsoft Teams.
  tags:
  - hr
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: hr-leave
    port: 8080
    tools:
    - name: remind-pending-timeoff-approvals
      description: Fetch all Workday time-off requests that have been pending approval for more than 48 hours and send a reminder to each manager via Teams.
      steps:
      - name: get-pending-requests
        type: call
        call: workday.list-pending-timeoff
        with:
          status: Awaiting_Approval
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Reminder: {{get-pending-requests.total_count}} time-off requests are awaiting approval in Workday for more than 48 hours.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: timeoff-requests
      path: /coca-cola/timeOffRequests
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-pending-timeoff
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-approval-reminder.yml

Retrieves application health summary from New Relic, including response time, throughput, and error rate for a given application.

naftiko: '0.5'
info:
  label: New Relic Application Health
  description: Retrieves application health summary from New Relic, including response time, throughput, and error rate for a given application.
  tags:
  - it-operations
  - new-relic
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-health
      description: Get the health summary of a New Relic application. Returns response time, throughput, and error rate.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-app-summary
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: response_time
        type: string
        mapping: $.application_summary.response_time
      - name: throughput
        type: string
        mapping: $.application_summary.throughput
      - name: error_rate
        type: string
        mapping: $.application_summary.error_rate
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      header: X-Api-Key
      value: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-summary
        method: GET
Open in Framework → View in Fleet → new-relic-application-health.yml

Audits retail shelf compliance by pulling store audit data from Salesforce, comparing against planogram standards, and posting a compliance report to Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Shelf Compliance Audit
  description: Audits retail shelf compliance by pulling store audit data from Salesforce, comparing against planogram standards, and posting a compliance report to Microsoft Teams.
  tags:
  - distribution
  - brand-management
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail-compliance
    port: 8080
    tools:
    - name: audit-shelf-compliance
      description: 'Audit retail shelf compliance: pull Salesforce audit data, compare with standards, and post report to Teams.'
      inputParameters:
      - name: store_account_id
        in: body
        type: string
        description: The Salesforce store account ID.
      - name: audit_date
        in: body
        type: string
        description: The audit date in YYYY-MM-DD format.
      steps:
      - name: get-audit-record
        type: call
        call: salesforce.get-audit-record
        with:
          account_id: '{{store_account_id}}'
          audit_date: '{{audit_date}}'
      - name: get-planogram
        type: call
        call: salesforce.get-planogram
        with:
          store_type: '{{get-audit-record.store_type}}'
      - name: post-compliance-report
        type: call
        call: msteams.send-message
        with:
          channel_id: retail-operations
          text: 'Shelf Compliance Audit: Store {{get-audit-record.store_name}} on {{audit_date}}. Compliance score: {{get-audit-record.compliance_score}}%. Planogram adherence: {{get-audit-record.planogram_match}}%. Action required: {{get-audit-record.action_items}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: audits
      path: /sobjects/Store_Audit__c?q=AccountId='{{account_id}}' AND AuditDate='{{audit_date}}'
      inputParameters:
      - name: account_id
        in: query
      - name: audit_date
        in: query
      operations:
      - name: get-audit-record
        method: GET
    - name: planograms
      path: /sobjects/Planogram__c?q=StoreType='{{store_type}}'
      inputParameters:
      - name: store_type
        in: query
      operations:
      - name: get-planogram
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-shelf-compliance-audit.yml

Validates cross-border trade compliance by checking SAP export documentation, verifying customs classification, and logging compliance status in ServiceNow.

naftiko: '0.5'
info:
  label: Cross-Border Trade Compliance Check
  description: Validates cross-border trade compliance by checking SAP export documentation, verifying customs classification, and logging compliance status in ServiceNow.
  tags:
  - distribution
  - supply-chain
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade-compliance
    port: 8080
    tools:
    - name: check-trade-compliance
      description: 'Validate cross-border trade compliance: check SAP export docs, verify customs, and log in ServiceNow.'
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery document number.
      - name: destination_country
        in: body
        type: string
        description: The destination country code.
      steps:
      - name: get-export-docs
        type: call
        call: sap.get-export-documentation
        with:
          delivery_number: '{{delivery_number}}'
      - name: verify-customs
        type: call
        call: sap.get-customs-classification
        with:
          material: '{{get-export-docs.material_number}}'
          country: '{{destination_country}}'
      - name: log-compliance
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Trade compliance: Delivery {{delivery_number}} to {{destination_country}}'
          description: 'Export docs status: {{get-export-docs.status}}. Customs classification: {{verify-customs.hs_code}}. Duty rate: {{verify-customs.duty_rate}}%.'
          category: trade_compliance
          assignment_group: Trade_Compliance
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: export-docs
      path: /A_OutbDeliveryHeader('{{delivery_number}}')/to_ExportDocuments
      inputParameters:
      - name: delivery_number
        in: path
      operations:
      - name: get-export-documentation
        method: GET
    - name: customs
      path: /CustomsClassification(Material='{{material}}',Country='{{country}}')
      inputParameters:
      - name: material
        in: path
      - name: country
        in: path
      operations:
      - name: get-customs-classification
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → cross-border-trade-compliance-check.yml

Tracks GitHub release deployments by checking release status, verifying Datadog health metrics post-deploy, and updating the ServiceNow change request.

naftiko: '0.5'
info:
  label: GitHub Release Deployment Tracker
  description: Tracks GitHub release deployments by checking release status, verifying Datadog health metrics post-deploy, and updating the ServiceNow change request.
  tags:
  - devops
  - github
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: deployment
    port: 8080
    tools:
    - name: track-release-deployment
      description: 'Track release deployment: check GitHub release, verify Datadog metrics, and update ServiceNow change request.'
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: release_tag
        in: body
        type: string
        description: The release tag version.
      - name: change_request_id
        in: body
        type: string
        description: The ServiceNow change request sys_id.
      steps:
      - name: get-release
        type: call
        call: github.get-release
        with:
          repo: '{{repo}}'
          tag: '{{release_tag}}'
      - name: check-post-deploy-health
        type: call
        call: datadog.get-service-metrics
        with:
          service_name: '{{repo}}'
      - name: update-change-request
        type: call
        call: servicenow.update-change-request
        with:
          sys_id: '{{change_request_id}}'
          state: review
          work_notes: 'Release {{release_tag}} deployed. Error rate: {{check-post-deploy-health.error_rate}}. P99 latency: {{check-post-deploy-health.p99_latency}}ms.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/coca-cola/{{repo}}/releases/tags/{{tag}}
      inputParameters:
      - name: repo
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      value: $secrets.datadog_api_key
    resources:
    - name: service-metrics
      path: /metrics/query?query=service:{{service_name}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-change-request
        method: PATCH
Open in Framework → View in Fleet → github-release-deployment-tracker.yml

Processes fountain equipment service requests by looking up the customer in Salesforce, creating a field service ticket in ServiceNow, and notifying the service technician via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fountain Equipment Service Request
  description: Processes fountain equipment service requests by looking up the customer in Salesforce, creating a field service ticket in ServiceNow, and notifying the service technician via Microsoft Teams.
  tags:
  - distribution
  - customer-service
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: create-fountain-service-request
      description: 'Process fountain service request: look up Salesforce customer, create ServiceNow ticket, notify technician.'
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce customer account ID.
      - name: equipment_serial
        in: body
        type: string
        description: The fountain equipment serial number.
      - name: issue_description
        in: body
        type: string
        description: Description of the service issue.
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-service-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fountain service: {{equipment_serial}} at {{get-customer.name}}'
          description: '{{issue_description}}'
          category: fountain_equipment
          assignment_group: Fountain_Service
      - name: notify-technician
        type: call
        call: msteams.send-message
        with:
          channel_id: fountain-service
          text: 'New fountain service request: {{get-customer.name}}. Equipment: {{equipment_serial}}. Issue: {{issue_description}}. Ticket: {{create-service-ticket.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fountain-equipment-service-request.yml

Monitors Azure Databricks ETL pipeline runs, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.

naftiko: '0.5'
info:
  label: Azure Databricks ETL Pipeline Monitor
  description: Monitors Azure Databricks ETL pipeline runs, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.
  tags:
  - analytics
  - azure-databricks
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-etl-pipeline
      description: 'Monitor Databricks ETL pipeline: check run status, verify Datadog metrics, and create ServiceNow incident on failure.'
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID.
      steps:
      - name: get-run-status
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: check-datadog-metrics
        type: call
        call: datadog.get-pipeline-metrics
        with:
          pipeline_name: '{{get-run-status.job_name}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ETL pipeline alert: {{get-run-status.job_name}} run {{run_id}}'
          description: 'Run status: {{get-run-status.state}}. Error rate: {{check-datadog-metrics.error_rate}}.'
          category: data_pipeline
          assignment_group: Data_Engineering
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-cocacola.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      value: $secrets.datadog_api_key
    resources:
    - name: pipeline-metrics
      path: /metrics/query?query=pipeline:{{pipeline_name}}
      inputParameters:
      - name: pipeline_name
        in: query
      operations:
      - name: get-pipeline-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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
Open in Framework → View in Fleet → azure-databricks-etl-pipeline-monitor.yml

When an employee changes roles in Workday, updates ServiceNow access groups, modifies SharePoint permissions, and notifies the employee and manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Role Change Provisioning
  description: When an employee changes roles in Workday, updates ServiceNow access groups, modifies SharePoint permissions, and notifies the employee and manager via Microsoft Teams.
  tags:
  - hr
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-provisioning
    port: 8080
    tools:
    - name: process-role-change
      description: 'Orchestrate employee role change: update ServiceNow access, modify SharePoint permissions, and notify via Teams.'
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: new_role
        in: body
        type: string
        description: The new role title.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: update-access-groups
        type: call
        call: servicenow.update-user-groups
        with:
          user_email: '{{get-worker.work_email}}'
          new_role: '{{new_role}}'
      - name: update-sharepoint-access
        type: call
        call: sharepoint.update-permissions
        with:
          user_email: '{{get-worker.work_email}}'
          site_group: '{{new_role}}-team'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          text: Hi {{get-worker.first_name}}, your role has been updated to {{new_role}}. Your system access has been adjusted accordingly.
  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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: user-groups
      path: /table/sys_user_grmember
      operations:
      - name: update-user-groups
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: permissions
      path: /sites/root/permissions
      operations:
      - name: update-permissions
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-role-change-provisioning.yml

Orchestrates a marketing campaign launch by creating the campaign in Salesforce, setting up tracking in Google Analytics, and posting the announcement to Microsoft Teams.

naftiko: '0.5'
info:
  label: Brand Marketing Campaign Launch
  description: Orchestrates a marketing campaign launch by creating the campaign in Salesforce, setting up tracking in Google Analytics, and posting the announcement to Microsoft Teams.
  tags:
  - marketing
  - brand-management
  - salesforce
  - google-analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: launch-brand-campaign
      description: Orchestrate a brand campaign launch across Salesforce, Google Analytics, and Microsoft Teams.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The name of the marketing campaign.
      - name: brand
        in: body
        type: string
        description: The Coca-Cola brand, e.g. Coca-Cola Classic, Sprite, Fanta.
      - name: start_date
        in: body
        type: string
        description: Campaign start date in YYYY-MM-DD format.
      - name: budget
        in: body
        type: string
        description: Campaign budget in USD.
      steps:
      - name: create-sf-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          brand: '{{brand}}'
          start_date: '{{start_date}}'
          budgeted_cost: '{{budget}}'
      - name: create-ga-property
        type: call
        call: ga.create-custom-dimension
        with:
          campaign_id: '{{create-sf-campaign.id}}'
          campaign_name: '{{campaign_name}}'
      - name: announce-launch
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-marketing
          text: 'New campaign launched: {{campaign_name}} for {{brand}}. Salesforce ID: {{create-sf-campaign.id}}. Budget: ${{budget}}. Start date: {{start_date}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: ga
    baseUri: https://analyticsadmin.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: custom-dimensions
      path: /properties/cocacola/customDimensions
      operations:
      - name: create-custom-dimension
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-marketing-campaign-launch.yml

Pulls actual vs. planned spending by cost center from SAP S/4HANA and posts a variance summary to the Finance Microsoft Teams channel for monthly close review.

naftiko: '0.5'
info:
  label: SAP Cost Center Budget Variance Report
  description: Pulls actual vs. planned spending by cost center from SAP S/4HANA and posts a variance summary to the Finance Microsoft Teams channel for monthly close review.
  tags:
  - finance
  - sap
  - budgeting
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: digest-budget-variance
      description: Retrieve actual vs. planned cost center spending from SAP S/4HANA for the current fiscal period and post a variance digest to the Finance Teams channel. Use for monthly close reviews.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYMM format, e.g. 202603.
      steps:
      - name: get-variance
        type: call
        call: sap.get-cost-center-variance
        with:
          fiscal_period: '{{fiscal_period}}'
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: Budget Variance Report for period {{fiscal_period}} is ready. {{get-variance.total_cost_centers}} cost centers reviewed.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-variance
      path: /A_CostCenter
      inputParameters:
      - name: fiscal_period
        in: query
      operations:
      - name: get-cost-center-variance
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-cost-center-budget-variance-report.yml

Submits a compensation change request for an employee in Workday, routes it for manager and HR approval, and notifies all parties via Teams when the action is complete.

naftiko: '0.5'
info:
  label: Workday Compensation Change Approval
  description: Submits a compensation change request for an employee in Workday, routes it for manager and HR approval, and notifies all parties via Teams when the action is complete.
  tags:
  - hr
  - compensation
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: hr-comp
    port: 8080
    tools:
    - name: submit-comp-change
      description: Given a Workday employee ID, new base salary, and effective date, submit a compensation change request in Workday and notify the manager and HR partner via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee receiving the compensation change.
      - name: new_salary
        in: body
        type: number
        description: The new base salary amount in the employee's currency.
      - name: effective_date
        in: body
        type: string
        description: Effective date for the compensation change in ISO 8601 format.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: submit-change
        type: call
        call: workday.submit-comp-change
        with:
          worker_id: '{{employee_id}}'
          new_salary: '{{new_salary}}'
          effective_date: '{{effective_date}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.manager_email}}'
          text: A compensation change for {{get-worker.full_name}} (effective {{effective_date}}) has been submitted and is pending your approval in Workday.
  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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
      - name: submit-comp-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-change-approval.yml

Retrieves LinkedIn Sponsored Content campaign analytics for the past week and posts an engagement summary to the Marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Sponsored Campaign Performance Digest
  description: Retrieves LinkedIn Sponsored Content campaign analytics for the past week and posts an engagement summary to the Marketing Microsoft Teams channel.
  tags:
  - marketing
  - linkedin
  - social
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-reporting
    port: 8080
    tools:
    - name: digest-linkedin-campaigns
      description: Fetch LinkedIn Sponsored Content campaign performance metrics for the past 7 days and post an engagement digest to the Marketing Teams channel. Use for weekly social performance reviews.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The LinkedIn ad account ID (numeric).
      steps:
      - name: get-analytics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          account_id: '{{account_id}}'
          dateRange_start_day: '1'
          dateRange_end_day: '7'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_marketing_channel_id
          text: 'LinkedIn Campaign Digest: {{get-analytics.total_impressions}} impressions, {{get-analytics.total_clicks}} clicks this week for account {{account_id}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: ad-analytics
      path: /adAnalytics
      inputParameters:
      - name: account_id
        in: query
      - name: dateRange_start_day
        in: query
      - name: dateRange_end_day
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-sponsored-campaign-performance-digest.yml

Triggers a refresh of the Coca-Cola bottling operations Power BI dataset and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Bottling Dashboard Refresh
  description: Triggers a refresh of the Coca-Cola bottling operations Power BI dataset and returns the refresh status.
  tags:
  - analytics
  - power-bi
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: refresh-bottling-dashboard
      description: Trigger a Power BI dataset refresh for the bottling operations dashboard. Returns refresh request ID and status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the bottling dashboard.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
      - 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
Open in Framework → View in Fleet → power-bi-bottling-dashboard-refresh.yml

Retrieves metadata for a document from a SharePoint document library, returning file name, modified date, modified by, and file size.

naftiko: '0.5'
info:
  label: SharePoint Document Retrieval
  description: Retrieves metadata for a document from a SharePoint document library, returning file name, modified date, modified by, and file size.
  tags:
  - collaboration
  - sharepoint
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: documents
    port: 8080
    tools:
    - name: get-document-metadata
      description: Retrieve document metadata from SharePoint. Returns file name, last modified date, modified by, and file size.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID.
      - name: file_path
        in: body
        type: string
        description: The path to the file in the document library.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: modified_date
        type: string
        mapping: $.lastModifiedDateTime
      - name: modified_by
        type: string
        mapping: $.lastModifiedBy.user.displayName
      - name: file_size
        type: string
        mapping: $.size
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-document-retrieval.yml

Initiates a performance review cycle in Workday for a given employee population and notifies managers via Teams to complete evaluations by the deadline.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Kickoff
  description: Initiates a performance review cycle in Workday for a given employee population and notifies managers via Teams to complete evaluations by the deadline.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: kickoff-review-cycle
      description: Start a performance review cycle in Workday for a defined employee group and post a notification to managers via Teams with the review deadline. Use for annual or mid-year performance cycle launches.
      inputParameters:
      - name: review_period
        in: body
        type: string
        description: The review period label, e.g. 2026-Annual.
      - name: due_date
        in: body
        type: string
        description: Review completion deadline in ISO 8601 format.
      steps:
      - name: create-review-event
        type: call
        call: workday.create-review-event
        with:
          period: '{{review_period}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: Performance review cycle {{review_period}} is open. Please complete evaluations by {{due_date}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-events
      path: /coca-cola/performanceReviews
      operations:
      - name: create-review-event
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-kickoff.yml

Reports a plant safety incident by recording it in ServiceNow, updating the SAP plant maintenance log, notifying safety officers via Microsoft Teams, and creating a Workday worker safety record.

naftiko: '0.5'
info:
  label: Plant Safety Incident Reporting
  description: Reports a plant safety incident by recording it in ServiceNow, updating the SAP plant maintenance log, notifying safety officers via Microsoft Teams, and creating a Workday worker safety record.
  tags:
  - manufacturing
  - servicenow
  - sap
  - microsoft-teams
  - workday
capability:
  exposes:
  - type: mcp
    namespace: safety
    port: 8080
    tools:
    - name: report-safety-incident
      description: 'Orchestrate safety incident reporting: create ServiceNow record, update SAP maintenance log, notify safety team, and update Workday.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code where the incident occurred.
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the involved employee.
      - name: incident_description
        in: body
        type: string
        description: Description of the safety incident.
      - name: severity
        in: body
        type: string
        description: 'Severity level: low, medium, high, critical.'
      steps:
      - name: create-safety-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: Plant safety incident at {{plant_code}}
          description: '{{incident_description}}'
          category: plant_safety
          urgency: '{{severity}}'
          assignment_group: Plant_Safety_{{plant_code}}
      - name: update-maintenance-log
        type: call
        call: sap.create-notification
        with:
          plant: '{{plant_code}}'
          notification_type: safety
          description: '{{incident_description}}'
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: notify-safety-team
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-safety
          text: 'SAFETY INCIDENT at plant {{plant_code}}: {{incident_description}}. Severity: {{severity}}. Involved: {{get-worker.full_name}}. ServiceNow: {{create-safety-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cocacola.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: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /MaintenanceNotification
      operations:
      - name: create-notification
        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: /coca-cola/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plant-safety-incident-reporting.yml

Retrieves vendor master data from SAP S/4HANA by vendor ID, returning payment terms, bank details status, and contact information for supplier management.

naftiko: '0.5'
info:
  label: SAP Vendor Master Data Lookup
  description: Retrieves vendor master data from SAP S/4HANA by vendor ID, returning payment terms, bank details status, and contact information for supplier management.
  tags:
  - procurement
  - sap
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: vendor-mgmt
    port: 8080
    tools:
    - name: get-vendor
      description: Look up a SAP supplier/vendor record by vendor ID. Returns company name, payment terms, currency, and bank verification status. Use for supplier onboarding checks or payment processing.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor (supplier) ID, e.g. 1000012.
      call: sap.get-vendor
      with:
        vendor_id: '{{vendor_id}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.d.SupplierName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-master-data-lookup.yml

Retrieves batch details for a material from SAP S/4HANA, returning batch number, production date, shelf life expiry, and batch status.

naftiko: '0.5'
info:
  label: SAP Batch Traceability Lookup
  description: Retrieves batch details for a material from SAP S/4HANA, returning batch number, production date, shelf life expiry, and batch status.
  tags:
  - manufacturing
  - sap
  - quality
  - traceability
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: get-batch-details
      description: Look up batch traceability information in SAP. Returns batch number, production date, expiry date, and batch status.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      call: sap.get-batch
      with:
        material_number: '{{material_number}}'
        batch_number: '{{batch_number}}'
      outputParameters:
      - name: production_date
        type: string
        mapping: $.d.MfgDate
      - name: expiry_date
        type: string
        mapping: $.d.ShelfLifeExpirationDate
      - name: batch_status
        type: string
        mapping: $.d.BatchStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')
      inputParameters:
      - name: material_number
        in: path
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → sap-batch-traceability-lookup.yml

Tracks distributor order fulfillment by pulling the sales order from SAP, checking delivery status, and updating the Salesforce account with fulfillment details.

naftiko: '0.5'
info:
  label: Distributor Order Fulfillment Tracker
  description: Tracks distributor order fulfillment by pulling the sales order from SAP, checking delivery status, and updating the Salesforce account with fulfillment details.
  tags:
  - distribution
  - sap
  - salesforce
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: distribution
    port: 8080
    tools:
    - name: track-distributor-order
      description: 'Track a distributor order: pull SAP sales order, check delivery, and update Salesforce account.'
      inputParameters:
      - name: sales_order_number
        in: body
        type: string
        description: The SAP sales order number.
      - name: account_id
        in: body
        type: string
        description: The Salesforce distributor account ID.
      steps:
      - name: get-sales-order
        type: call
        call: sap.get-sales-order
        with:
          sales_order_number: '{{sales_order_number}}'
      - name: get-delivery-status
        type: call
        call: sap.get-delivery-by-order
        with:
          sales_order: '{{sales_order_number}}'
      - name: update-sf-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{account_id}}'
          last_order_status: '{{get-sales-order.status}}'
          last_delivery_status: '{{get-delivery-status.delivery_status}}'
          last_delivery_date: '{{get-delivery-status.actual_goods_issue_date}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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('{{sales_order_number}}')
      inputParameters:
      - name: sales_order_number
        in: path
      operations:
      - name: get-sales-order
        method: GET
    - name: deliveries
      path: /A_SalesOrder('{{sales_order}}')/to_Delivery
      inputParameters:
      - name: sales_order
        in: path
      operations:
      - name: get-delivery-by-order
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → distributor-order-fulfillment-tracker.yml

Generates energy cost optimization reports by pulling plant energy data from SAP, comparing with utility rate data, and publishing the report to SharePoint.

naftiko: '0.5'
info:
  label: Energy Cost Optimization Report
  description: Generates energy cost optimization reports by pulling plant energy data from SAP, comparing with utility rate data, and publishing the report to SharePoint.
  tags:
  - manufacturing
  - finance
  - sap
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: energy-optimization
    port: 8080
    tools:
    - name: generate-energy-report
      description: 'Generate energy cost report: pull SAP plant data, compare utility rates, and publish to SharePoint.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: period
        in: body
        type: string
        description: The reporting period, e.g. 2026-03.
      steps:
      - name: get-energy-consumption
        type: call
        call: sap.get-plant-energy-consumption
        with:
          plant: '{{plant_code}}'
          period: '{{period}}'
      - name: get-energy-costs
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: energy-{{plant_code}}
          period: '{{period}}'
      - name: publish-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: operations
          folder_path: Energy/Reports/{{period}}
          file_name: energy-optimization-{{plant_code}}.json
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: energy
      path: /PlantEnergyConsumption(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-plant-energy-consumption
        method: GET
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')/to_Actuals?$filter=Period eq '{{period}}'
      inputParameters:
      - name: cost_center
        in: path
      - name: period
        in: query
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → energy-cost-optimization-report.yml

Retrieves all open job requisitions from Workday and publishes a digest to a Microsoft Teams HR channel for weekly staffing review.

naftiko: '0.5'
info:
  label: Open Job Requisition Report
  description: Retrieves all open job requisitions from Workday and publishes a digest to a Microsoft Teams HR channel for weekly staffing review.
  tags:
  - hr
  - recruiting
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-recruiting
    port: 8080
    tools:
    - name: digest-open-requisitions
      description: Fetch all open job requisitions from Workday and post a summary digest to the HR staffing Microsoft Teams channel. Use for weekly recruiting pipeline reviews.
      steps:
      - name: get-requisitions
        type: call
        call: workday.list-job-requisitions
        with:
          status: Open
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Weekly Open Requisitions: {{get-requisitions.total_count}} open roles across Coca-Cola.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /coca-cola/jobRequisitions
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-job-requisitions
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → open-job-requisition-report.yml

Retrieves a journal entry from Oracle Cloud Financials by journal header ID, returning period, status, total debit, and total credit.

naftiko: '0.5'
info:
  label: Oracle Cloud Financial Journal Entry Lookup
  description: Retrieves a journal entry from Oracle Cloud Financials by journal header ID, returning period, status, total debit, and total credit.
  tags:
  - finance
  - oracle-cloud
  - general-ledger
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-journal-entry
      description: Look up an Oracle Cloud Financials journal entry. Returns accounting period, status, total debit, and total credit amounts.
      inputParameters:
      - name: journal_header_id
        in: body
        type: string
        description: The Oracle Cloud journal header ID.
      call: oracle.get-journal
      with:
        journal_header_id: '{{journal_header_id}}'
      outputParameters:
      - name: period
        type: string
        mapping: $.AccountingPeriod
      - name: status
        type: string
        mapping: $.Status
      - name: total_debit
        type: string
        mapping: $.TotalDebitAmount
      - name: total_credit
        type: string
        mapping: $.TotalCreditAmount
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: journals
      path: /journalHeaders/{{journal_header_id}}
      inputParameters:
      - name: journal_header_id
        in: path
      operations:
      - name: get-journal
        method: GET
Open in Framework → View in Fleet → oracle-cloud-financial-journal-entry-lookup.yml

Retrieves brand-level web analytics from Adobe Analytics, including page views, unique visitors, and average session duration.

naftiko: '0.5'
info:
  label: Adobe Analytics Brand Performance
  description: Retrieves brand-level web analytics from Adobe Analytics, including page views, unique visitors, and average session duration.
  tags:
  - marketing
  - adobe-analytics
  - brand-management
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: get-brand-performance
      description: Fetch brand web performance metrics from Adobe Analytics. Returns page views, unique visitors, and average session duration.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: brand_segment
        in: body
        type: string
        description: The brand segment filter, e.g. coca-cola-classic.
      call: adobe.get-report
      with:
        report_suite_id: '{{report_suite_id}}'
        brand_segment: '{{brand_segment}}'
      outputParameters:
      - name: page_views
        type: string
        mapping: $.reportData.totals[0]
      - name: unique_visitors
        type: string
        mapping: $.reportData.totals[1]
      - name: avg_session_duration
        type: string
        mapping: $.reportData.totals[2]
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/cocacola
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-brand-performance.yml

Aggregates sustainability metrics by pulling energy consumption from SAP plant maintenance, water usage from environmental monitoring, and posting a consolidated ESG report to SharePoint.

naftiko: '0.5'
info:
  label: Sustainability Reporting Aggregator
  description: Aggregates sustainability metrics by pulling energy consumption from SAP plant maintenance, water usage from environmental monitoring, and posting a consolidated ESG report to SharePoint.
  tags:
  - manufacturing
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: aggregate-sustainability-report
      description: Aggregate sustainability data from SAP and environmental monitoring, then publish report to SharePoint and Teams.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: reporting_period
        in: body
        type: string
        description: The reporting period, e.g. 2026-Q1.
      steps:
      - name: get-energy-data
        type: call
        call: sap.get-plant-energy-consumption
        with:
          plant: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: get-water-usage
        type: call
        call: sap.get-plant-water-usage
        with:
          plant: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: sustainability
          folder_path: Reports/{{reporting_period}}
          file_name: plant-{{plant_code}}-sustainability.json
      - name: notify-esg-team
        type: call
        call: msteams.send-message
        with:
          channel_id: sustainability
          text: 'Sustainability report for plant {{plant_code}} ({{reporting_period}}): Energy consumption: {{get-energy-data.total_kwh}} kWh. Water usage: {{get-water-usage.total_liters}} liters. Report uploaded to SharePoint.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: energy
      path: /PlantEnergyConsumption(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-plant-energy-consumption
        method: GET
    - name: water
      path: /PlantWaterUsage(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-plant-water-usage
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainability-reporting-aggregator.yml

Monitors accounts receivable aging by pulling AR data from SAP, matching with Salesforce customer accounts, and alerting the collections team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Accounts Receivable Aging Alert
  description: Monitors accounts receivable aging by pulling AR data from SAP, matching with Salesforce customer accounts, and alerting the collections team via Microsoft Teams.
  tags:
  - finance
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ar-management
    port: 8080
    tools:
    - name: check-ar-aging
      description: 'Check AR aging: pull SAP receivables, match Salesforce accounts, and alert collections team.'
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      - name: aging_bucket
        in: body
        type: string
        description: 'The aging bucket to check: 30, 60, 90, 120.'
      steps:
      - name: get-ar-aging
        type: call
        call: sap.get-ar-aging-report
        with:
          company_code: '{{company_code}}'
          aging_days: '{{aging_bucket}}'
      - name: get-customer-accounts
        type: call
        call: salesforce.get-customer-list
        with:
          overdue_threshold: '{{aging_bucket}}'
      - name: alert-collections
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-collections
          text: 'AR Aging Alert ({{aging_bucket}}+ days): Total overdue: ${{get-ar-aging.total_overdue}}. Customer count: {{get-ar-aging.customer_count}}. Top overdue: {{get-ar-aging.top_customer}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_AR_AGING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: aging
      path: /ARAgingReport(CompanyCode='{{company_code}}',AgingDays={{aging_days}})
      inputParameters:
      - name: company_code
        in: path
      - name: aging_days
        in: path
      operations:
      - name: get-ar-aging-report
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /query?q=SELECT+Id,Name+FROM+Account+WHERE+Days_Overdue__c>=+{{overdue_threshold}}
      inputParameters:
      - name: overdue_threshold
        in: query
      operations:
      - name: get-customer-list
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → accounts-receivable-aging-alert.yml

Converts a qualified Salesforce lead into an opportunity, creates an account if needed, and notifies the account owner via Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead-to-Opportunity Conversion
  description: Converts a qualified Salesforce lead into an opportunity, creates an account if needed, and notifies the account owner via Teams.
  tags:
  - sales
  - crm
  - salesforce
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: convert-lead
      description: Given a Salesforce lead ID, convert the lead to an opportunity and account in Salesforce, then notify the assigned sales rep via Teams. Use for automated lead qualification workflows.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce Lead ID to convert.
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: convert-lead
        type: call
        call: salesforce-convert.convert-lead
        with:
          lead_id: '{{lead_id}}'
          convertedStatus: Qualified
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-lead.owner_email}}'
          text: 'Lead {{get-lead.name}} has been converted to an opportunity. Account: {{convert-lead.accountId}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: salesforce-convert
    baseUri: https://cocacola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-convert
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: convert-lead
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-to-opportunity-conversion.yml

When a shipment delay is detected, retrieves delivery details from SAP, updates the Salesforce opportunity, and escalates to the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supply Chain Shipment Delay Escalation
  description: When a shipment delay is detected, retrieves delivery details from SAP, updates the Salesforce opportunity, and escalates to the logistics team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - salesforce
  - microsoft-teams
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: escalate-shipment-delay
      description: 'Orchestrate shipment delay escalation: pull SAP delivery details, update Salesforce opportunity, and notify logistics team.'
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery document number.
      - name: opportunity_id
        in: body
        type: string
        description: The related Salesforce opportunity ID.
      steps:
      - name: get-delivery
        type: call
        call: sap.get-delivery
        with:
          delivery_number: '{{delivery_number}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          delivery_status: Delayed
          delivery_notes: 'Shipment {{delivery_number}} delayed. Original GI date: {{get-delivery.planned_goods_issue_date}}'
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics-alerts
          text: 'Shipment delay alert: Delivery {{delivery_number}} to {{get-delivery.ship_to_party}} is delayed. Salesforce opportunity {{opportunity_id}} updated.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://coca-cola-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
  - type: http
    namespace: salesforce
    baseUri: https://coca-cola.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-shipment-delay-escalation.yml

Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests.

naftiko: '0.5'
info:
  label: Raw Material Shortage Alert Handler
  description: Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests.
  tags:
  - supply-chain
  - procurement
  - sap
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-ops
    port: 8080
    tools:
    - name: handle-shortage
      description: Handle raw material shortage.
      inputParameters:
      - name: material_number
        type: string
        description: Material number.
      - name: plant_code
        type: string
        description: Plant code.
      - name: reorder_qty
        type: number
        description: Reorder quantity.
      steps:
      - name: check-stock
        type: call
        call: sap.get-stock
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: get-orders
        type: call
        call: sap.get-orders
        with:
          material: '{{material_number}}'
      - name: create-req
        type: call
        call: ariba.create-requisition
        with:
          material: '{{material_number}}'
          quantity: '{{reorder_qty}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-stock
        method: GET
      - name: get-orders
        method: GET
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: get-supplier
        method: GET
Open in Framework → View in Fleet → raw-material-shortage-alert-handler.yml

When an employee's role changes in Workday, updates their Okta application assignments to reflect the new role's access profile.

naftiko: '0.5'
info:
  label: Workday Role Change Access Provisioning
  description: When an employee's role changes in Workday, updates their Okta application assignments to reflect the new role's access profile.
  tags:
  - hr
  - identity
  - workday
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-identity
    port: 8080
    tools:
    - name: sync-role-access
      description: Given a Workday employee ID and new job profile, update Okta group memberships to match the new role's access entitlements.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: new_job_profile
        in: body
        type: string
        description: The new Workday job profile name.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: assign-okta-group
        type: call
        call: okta.add-user-to-group
        with:
          userId: '{{get-worker.okta_user_id}}'
          groupProfile: '{{new_job_profile}}'
  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: /colgate-palmolive/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://colgate-palmolive.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{groupProfile}}/users/{{userId}}
      inputParameters:
      - name: groupProfile
        in: path
      - name: userId
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
Open in Framework → View in Fleet → workday-role-change-access-provisioning.yml

Retrieves the sales opportunity pipeline from Salesforce for a business unit.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Lookup
  description: Retrieves the sales opportunity pipeline from Salesforce for a business unit.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-sales
    port: 8080
    tools:
    - name: get-pipeline
      description: Look up Salesforce opportunity pipeline by business unit.
      inputParameters:
      - name: business_unit
        type: string
        description: Business unit name.
      call: salesforce.get-pipeline
      with:
        bu: '{{business_unit}}'
      outputParameters:
      - name: total_value
        type: string
        mapping: $.totalSize
      - name: opportunities
        type: string
        mapping: $.records
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-lookup.yml

Retrieves Jira project backlog summary with issue counts by priority and status.

naftiko: '0.5'
info:
  label: Jira Project Backlog Summary
  description: Retrieves Jira project backlog summary with issue counts by priority and status.
  tags:
  - project-management
  - operations
  - jira
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: project-ops
    port: 8080
    tools:
    - name: get-backlog
      description: Get Jira project backlog summary.
      inputParameters:
      - name: project_key
        type: string
        description: Jira project key.
      call: jira.search-issues
      with:
        jql: project={{project_key}} AND status!=Done
      outputParameters:
      - name: total
        type: string
        mapping: $.total
      - name: issues
        type: string
        mapping: $.issues
  consumes:
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → jira-project-backlog-summary.yml

Retrieves web traffic metrics from Google Analytics for a brand website.

naftiko: '0.5'
info:
  label: Google Analytics Web Traffic Report
  description: Retrieves web traffic metrics from Google Analytics for a brand website.
  tags:
  - marketing
  - analytics
  - google-analytics
  - web
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-traffic
      description: Fetch web traffic data from Google Analytics.
      inputParameters:
      - name: property_id
        type: string
        description: GA4 property ID.
      - name: date_from
        type: string
        description: Start date.
      - name: date_to
        type: string
        description: End date.
      call: ga.run-report
      with:
        property: '{{property_id}}'
        startDate: '{{date_from}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: conversion_rate
        type: string
        mapping: $.rows[0].metricValues[1].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/runReport
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-web-traffic-report.yml

Pulls current headcount by department and cost center from Workday and returns the structured dataset for workforce planning and finance reporting.

naftiko: '0.5'
info:
  label: Workday Headcount Report Snapshot
  description: Pulls current headcount by department and cost center from Workday and returns the structured dataset for workforce planning and finance reporting.
  tags:
  - hr
  - finance
  - workday
  - reporting
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns current active employee headcount grouped by department and cost center from Workday. Use for workforce planning, finance period close, and budget reviews.
      call: workday.get-headcount
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
        items:
        - name: employee_id
          type: string
          mapping: $.id
        - name: full_name
          type: string
          mapping: $.name
        - name: department
          type: string
          mapping: $.department
        - name: cost_center
          type: string
          mapping: $.costCenter
  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: /colgate-palmolive/workers
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-headcount-report-snapshot.yml

Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard.

naftiko: '0.5'
info:
  label: Regulatory Document Compliance Tracker
  description: Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard.
  tags:
  - regulatory
  - quality
  - jira
  - sharepoint
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-compliance
      description: Track regulatory submission status.
      inputParameters:
      - name: submission_id
        type: string
        description: Jira submission key.
      steps:
      - name: get-status
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{submission_id}}'
      - name: check-docs
        type: call
        call: sharepoint.list-folder
        with:
          folder: '{{submission_id}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: regulatory-tracker
  consumes:
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/drive/items
      operations:
      - name: search-docs
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → regulatory-document-compliance-tracker.yml

Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks.

naftiko: '0.5'
info:
  label: Okta Privileged Access Audit
  description: Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks.
  tags:
  - security
  - identity
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-access
      description: Audit privileged access.
      inputParameters:
      - name: role_type
        type: string
        description: Okta admin role type.
      steps:
      - name: get-admins
        type: call
        call: okta.list-admins
        with:
          role_type: '{{role_type}}'
      - name: check-employment
        type: call
        call: workday.get-active
        with:
          emails: '{{get-admins.emails}}'
      - name: create-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Access audit: {{role_type}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://colgatepalmolive.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → okta-privileged-access-audit.yml

Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams.

naftiko: '0.5'
info:
  label: SAP Intercompany Transfer Workflow
  description: Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: intercompany
    port: 8080
    tools:
    - name: create-transfer
      description: Create intercompany stock transfer.
      inputParameters:
      - name: material
        type: string
        description: Material.
      - name: from_plant
        type: string
        description: Source plant.
      - name: to_plant
        type: string
        description: Target plant.
      - name: quantity
        type: number
        description: Quantity.
      steps:
      - name: transfer
        type: call
        call: sap.create-transfer
        with:
          material: '{{material}}'
          from: '{{from_plant}}'
          to: '{{to_plant}}'
      - name: update
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SC_WH
          query: CALL update_forecast('{{to_plant}}', '{{material}}', {{quantity}})
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics
          text: 'Transfer: {{quantity}} of {{material}} from {{from_plant}} to {{to_plant}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: create-transfer
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-transfer-workflow.yml

Queries the Snowflake account usage schema to identify long-running and expensive queries, and posts a performance audit report to the data engineering Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Query Performance Audit
  description: Queries the Snowflake account usage schema to identify long-running and expensive queries, and posts a performance audit report to the data engineering Teams channel.
  tags:
  - data
  - analytics
  - snowflake
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-performance
    port: 8080
    tools:
    - name: audit-query-performance
      description: Given a time window and cost threshold, retrieve expensive Snowflake queries from account usage and post a top offenders report to the data engineering Teams channel.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back for query history.
      - name: credits_threshold
        in: body
        type: number
        description: Minimum credits consumed to flag a query as expensive.
      steps:
      - name: get-expensive-queries
        type: call
        call: snowflake.get-query-history
        with:
          hoursBack: '{{hours_back}}'
          creditsThreshold: '{{credits_threshold}}'
      - name: post-audit-report
        type: call
        call: msteams.post-channel-message
        with:
          channelId: data-engineering
          message: 'Snowflake query audit (last {{hours_back}}h): {{get-expensive-queries.queryCount}} expensive queries found. Top query: {{get-expensive-queries.topQuery}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgate-palmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /statements
      operations:
      - name: get-query-history
        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/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-performance-audit.yml

When a high-priority ServiceNow incident is raised for a digital product, automatically creates a linked Jira bug and notifies the engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Incident to Jira Bug Bridge
  description: When a high-priority ServiceNow incident is raised for a digital product, automatically creates a linked Jira bug and notifies the engineering team in Microsoft Teams.
  tags:
  - itsm
  - devops
  - servicenow
  - jira
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a ServiceNow P1 incident number, create a linked Jira bug in the engineering project and post an alert to the engineering Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          projectKey: ENG
          issuetype: Bug
          summary: '[P1 Incident] {{get-incident.short_description}}'
          description: 'ServiceNow: {{incident_number}}

            Impact: {{get-incident.impact}}

            Description: {{get-incident.description}}'
      - name: alert-engineering
        type: call
        call: msteams.post-channel-message
        with:
          channelId: engineering-alerts
          message: 'P1 Incident {{incident_number}}: {{get-incident.short_description}} | Jira: {{create-jira-bug.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgate-palmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-to-jira-bug-bridge.yml

Registers a new supplier in SAP Ariba, creates the corresponding vendor master record in SAP S/4HANA, and notifies procurement via Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Onboarding
  description: Registers a new supplier in SAP Ariba, creates the corresponding vendor master record in SAP S/4HANA, and notifies procurement via Teams.
  tags:
  - procurement
  - supplier-management
  - sap-ariba
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: Given supplier details, register the supplier in SAP Ariba, create the vendor master in SAP S/4HANA, and notify the procurement team in Teams.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: Legal name of the supplier.
      - name: supplier_email
        in: body
        type: string
        description: Primary contact email for the supplier.
      - name: country_code
        in: body
        type: string
        description: ISO 2-letter country code for the supplier's primary country.
      steps:
      - name: register-ariba
        type: call
        call: ariba.create-supplier
        with:
          name: '{{supplier_name}}'
          email: '{{supplier_email}}'
          country: '{{country_code}}'
      - name: create-vendor-master
        type: call
        call: sap-erp.create-vendor
        with:
          companyName: '{{supplier_name}}'
          aribaId: '{{register-ariba.supplierId}}'
          country: '{{country_code}}'
      - name: notify-procurement
        type: call
        call: msteams.post-channel-message
        with:
          channelId: procurement-team
          message: 'New supplier onboarded: {{supplier_name}} | Ariba ID: {{register-ariba.supplierId}} | SAP Vendor: {{create-vendor-master.vendorId}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_BusinessPartner
      operations:
      - name: create-vendor
        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/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-onboarding.yml

Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams.

naftiko: '0.5'
info:
  label: Media Mix Optimization Report
  description: Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams.
  tags:
  - marketing
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: media-planning
    port: 8080
    tools:
    - name: gen-media-report
      description: Generate media mix optimization report.
      inputParameters:
      - name: brand
        type: string
        description: Brand.
      - name: date_from
        type: string
        description: Start.
      - name: date_to
        type: string
        description: End.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MARKETING_WH
          query: SELECT channel, roas FROM media WHERE brand='{{brand}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: media-mix
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: media
          text: Media report for {{brand}} ready
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        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: send-message
        method: POST
Open in Framework → View in Fleet → media-mix-optimization-report.yml

When a Datadog monitor triggers a critical alert for a production service, automatically creates a ServiceNow P1 incident and pages the on-call team.

naftiko: '0.5'
info:
  label: Datadog Alert to ServiceNow Incident
  description: When a Datadog monitor triggers a critical alert for a production service, automatically creates a ServiceNow P1 incident and pages the on-call team.
  tags:
  - observability
  - itsm
  - datadog
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-datadog-alert
      description: Given a Datadog monitor alert, create a ServiceNow P1 incident and post a notification to the on-call Teams channel.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the alert.
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name.
      - name: alert_message
        in: body
        type: string
        description: The alert message body from Datadog.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Datadog alert: {{monitor_name}}'
          description: '{{alert_message}}

            Monitor: {{monitor_id}}

            Status: {{get-monitor.overall_state}}'
          urgency: '1'
          impact: '1'
      - name: page-oncall
        type: call
        call: msteams.post-channel-message
        with:
          channelId: oncall-alerts
          message: 'P1 Incident: {{monitor_name}} | ServiceNow: {{create-incident.number}} | Details: {{alert_message}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-servicenow-incident.yml

Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams.

naftiko: '0.5'
info:
  label: SAP Cost Center Budget Monitor
  description: Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams.
  tags:
  - finance
  - operations
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: budget-monitoring
    port: 8080
    tools:
    - name: monitor-budget
      description: Monitor cost center budget.
      inputParameters:
      - name: cost_center
        type: string
        description: Cost center.
      - name: period
        type: string
        description: Period.
      - name: threshold
        type: number
        description: Threshold pct.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-actuals
        with:
          cc: '{{cost_center}}'
          period: '{{period}}'
      - name: get-plan
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FINANCE_WH
          query: SELECT planned FROM budget WHERE cc='{{cost_center}}'
      - name: alert
        type: call
        call: msteams.send-message
        with:
          channel_id: finance
          text: 'Budget: {{cost_center}} at {{get-plan.consumed_pct}}%'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-actuals
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-cost-center-budget-monitor.yml

When Azure Cost Management detects a cost spike exceeding threshold, opens a ServiceNow ticket, tags the offending resources, and alerts the FinOps team in Teams.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly Responder
  description: When Azure Cost Management detects a cost spike exceeding threshold, opens a ServiceNow ticket, tags the offending resources, and alerts the FinOps team in Teams.
  tags:
  - cloud
  - finops
  - azure
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID and anomaly alert details, create a ServiceNow cost management ticket and post an alert to the FinOps Teams channel.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID where the anomaly was detected.
      - name: anomaly_amount
        in: body
        type: number
        description: The anomalous spend amount in USD.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group associated with the cost spike.
      steps:
      - name: get-cost-details
        type: call
        call: azure-cost.get-usage
        with:
          subscriptionId: '{{subscription_id}}'
          resourceGroup: '{{resource_group}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Azure cost anomaly: {{resource_group}} +${{anomaly_amount}}'
          category: cloud_cost
          urgency: '2'
      - name: alert-finops
        type: call
        call: msteams.post-channel-message
        with:
          channelId: finops-alerts
          message: 'Cost anomaly detected in {{resource_group}}: +${{anomaly_amount}}. ServiceNow: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: usage
      path: /subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscriptionId
        in: path
      - name: resourceGroup
        in: path
      operations:
      - name: get-usage
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cost-anomaly-responder.yml

Compares current period payroll totals from Workday against the previous period and flags variances exceeding threshold for finance review.

naftiko: '0.5'
info:
  label: Workday Payroll Variance Report
  description: Compares current period payroll totals from Workday against the previous period and flags variances exceeding threshold for finance review.
  tags:
  - hr
  - finance
  - workday
  - payroll
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: payroll-reporting
    port: 8080
    tools:
    - name: get-payroll-variance
      description: Given a pay period and variance threshold percentage, retrieve Workday payroll totals for the current and prior period, identify variances, and return flagged entries.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier in YYYY-MM format.
      - name: variance_threshold
        in: body
        type: number
        description: Percentage threshold above which a variance is flagged, e.g. 5 for 5%.
      call: workday.get-payroll-results
      with:
        payPeriod: '{{pay_period}}'
      outputParameters:
      - name: total_gross_pay
        type: number
        mapping: $.totals.grossPay
      - name: total_net_pay
        type: number
        mapping: $.totals.netPay
      - name: period
        type: string
        mapping: $.payPeriod
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll-results
      path: /colgate-palmolive/payrollResults
      inputParameters:
      - name: payPeriod
        in: query
      operations:
      - name: get-payroll-results
        method: GET
Open in Framework → View in Fleet → workday-payroll-variance-report.yml

Retrieves the current hiring pipeline status for an open Workday job requisition and summarizes candidate stage counts for recruiters.

naftiko: '0.5'
info:
  label: Workday Recruiting Candidate Status Tracker
  description: Retrieves the current hiring pipeline status for an open Workday job requisition and summarizes candidate stage counts for recruiters.
  tags:
  - hr
  - recruiting
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: get-requisition-pipeline
      description: Given a Workday job requisition ID, return a summary of candidates by stage including screened, interviewed, offered, and rejected counts.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      call: workday.get-job-requisition
      with:
        requisitionId: '{{requisition_id}}'
      outputParameters:
      - name: job_title
        type: string
        mapping: $.jobRequisition.jobTitle
      - name: total_candidates
        type: number
        mapping: $.jobRequisition.candidateCount
      - name: stage_summary
        type: string
        mapping: $.jobRequisition.stageSummary
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /colgate-palmolive/jobRequisitions/{{requisitionId}}
      inputParameters:
      - name: requisitionId
        in: path
      operations:
      - name: get-job-requisition
        method: GET
Open in Framework → View in Fleet → workday-recruiting-candidate-status-tracker.yml

When an expense report is submitted in SAP Concur, validates the amount against policy limits and routes for manager approval via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval
  description: When an expense report is submitted in SAP Concur, validates the amount against policy limits and routes for manager approval via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: approve-expense-report
      description: Given an SAP Concur expense report ID, validate the total against company policy and send an approval request card to the submitter's manager in Teams.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: manager_email
        in: body
        type: string
        description: Email address of the approving manager.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          reportId: '{{report_id}}'
      - name: send-approval
        type: call
        call: msteams.post-message
        with:
          recipient: '{{manager_email}}'
          message: 'Expense approval needed: Report {{report_id}} for {{get-report.Total}} {{get-report.CurrencyCode}} submitted by {{get-report.OwnerName}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{reportId}}
      inputParameters:
      - name: reportId
        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: /chats/messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval.yml

Retrieves a list of Okta users with privileged application assignments for a quarterly access review and posts the report to SharePoint.

naftiko: '0.5'
info:
  label: Okta User Access Review
  description: Retrieves a list of Okta users with privileged application assignments for a quarterly access review and posts the report to SharePoint.
  tags:
  - identity
  - security
  - okta
  - sharepoint
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta group ID, retrieve all active members and their application assignments, then upload the access review report to SharePoint.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Okta group ID to review.
      - name: sharepoint_site_id
        in: body
        type: string
        description: The SharePoint site ID where the report should be uploaded.
      steps:
      - name: get-group-members
        type: call
        call: okta.get-group-members
        with:
          groupId: '{{group_id}}'
      - name: upload-report
        type: call
        call: sharepoint.create-file
        with:
          siteId: '{{sharepoint_site_id}}'
          fileName: access-review-{{group_id}}.json
          content: '{{get-group-members.members}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://colgate-palmolive.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{groupId}}/users
      inputParameters:
      - name: groupId
        in: path
      operations:
      - name: get-group-members
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{siteId}}/drive/root/children
      inputParameters:
      - name: siteId
        in: path
      operations:
      - name: create-file
        method: POST
Open in Framework → View in Fleet → okta-user-access-review.yml

Checks the status of Snowflake data pipelines and tasks, surfaces any failures, and creates ServiceNow incidents for failed jobs requiring manual intervention.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Monitor
  description: Checks the status of Snowflake data pipelines and tasks, surfaces any failures, and creates ServiceNow incidents for failed jobs requiring manual intervention.
  tags:
  - data
  - analytics
  - snowflake
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Given a Snowflake task name, retrieve task execution history, identify failures, and open a ServiceNow incident if the failure count exceeds threshold.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name to check.
      - name: failure_threshold
        in: body
        type: integer
        description: Number of consecutive failures before opening an incident.
      steps:
      - name: get-task-history
        type: call
        call: snowflake.get-task-history
        with:
          taskName: '{{task_name}}'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Snowflake task failure: {{task_name}}'
          category: data_pipeline
          description: 'Task {{task_name}} has exceeded failure threshold. Last error: {{get-task-history.error_message}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgate-palmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/tasks/{{taskName}}/executions
      inputParameters:
      - name: taskName
        in: path
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.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
Open in Framework → View in Fleet → snowflake-data-pipeline-health-monitor.yml

Aggregates demand signals from Salesforce opportunity pipeline and SAP inventory positions to produce a consolidated supply chain outlook report.

naftiko: '0.5'
info:
  label: Supply Chain Demand Signal Aggregator
  description: Aggregates demand signals from Salesforce opportunity pipeline and SAP inventory positions to produce a consolidated supply chain outlook report.
  tags:
  - supply-chain
  - finance
  - salesforce
  - sap
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-reporting
    port: 8080
    tools:
    - name: get-demand-outlook
      description: Given a product family code and planning horizon, retrieve open Salesforce pipeline opportunities and SAP inventory positions to produce a demand vs. supply summary.
      inputParameters:
      - name: product_family
        in: body
        type: string
        description: The Salesforce product family code, e.g. ORAL_CARE.
      - name: horizon_weeks
        in: body
        type: integer
        description: Planning horizon in weeks.
      steps:
      - name: get-pipeline
        type: call
        call: salesforce.get-opportunities-by-product
        with:
          productFamily: '{{product_family}}'
      - name: get-inventory
        type: call
        call: sap-inventory.get-stock-overview
        with:
          productFamily: '{{product_family}}'
      - name: post-outlook
        type: call
        call: msteams.post-channel-message
        with:
          channelId: supply-chain-team
          message: 'Demand outlook for {{product_family}} ({{horizon_weeks}}w): Pipeline={{get-pipeline.totalValue}}, On-hand stock={{get-inventory.totalUnits}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgate-palmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      inputParameters:
      - name: productFamily
        in: query
      operations:
      - name: get-opportunities-by-product
        method: GET
  - type: http
    namespace: sap-inventory
    baseUri: https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      inputParameters:
      - name: productFamily
        in: query
      operations:
      - name: get-stock-overview
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-signal-aggregator.yml

Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews.

naftiko: '0.5'
info:
  label: Product Costing Variance Analyzer
  description: Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews.
  tags:
  - finance
  - manufacturing
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cost-analytics
    port: 8080
    tools:
    - name: analyze-variance
      description: Analyze product costing variances.
      inputParameters:
      - name: material_number
        type: string
        description: Material number.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-standard
        type: call
        call: sap.get-cost
        with:
          material: '{{material_number}}'
      - name: get-actual
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FINANCE_WH
          query: SELECT actual_cost FROM costs WHERE material='{{material_number}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          summary: 'Variance: {{material_number}} ({{period}})'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-cost
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → product-costing-variance-analyzer.yml

Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks.

naftiko: '0.5'
info:
  label: GMP Training Compliance Tracker
  description: Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks.
  tags:
  - quality
  - manufacturing
  - workday
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: gmp-compliance
    port: 8080
    tools:
    - name: track-gmp-compliance
      description: Track GMP training compliance across the workforce.
      inputParameters:
      - name: plant_code
        type: string
        description: Plant code.
      - name: department
        type: string
        description: Department name.
      steps:
      - name: get-certifications
        type: call
        call: workday.get-certifications
        with:
          plant: '{{plant_code}}'
          department: '{{department}}'
      - name: check-overdue
        type: call
        call: snowflake.execute-query
        with:
          warehouse: HR_WH
          query: SELECT employee_id, training, days_overdue FROM gmp_compliance WHERE plant='{{plant_code}}' AND overdue=true
      - name: create-remediation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GMP training overdue: {{plant_code}} {{department}}'
          description: '{{check-overdue.count}} employees with overdue GMP training'
  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: /colgatepalmolive/certifications
      operations:
      - name: get-certifications
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → gmp-training-compliance-tracker.yml

Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams.

naftiko: '0.5'
info:
  label: Supplier Performance Scorecard Generator
  description: Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams.
  tags:
  - procurement
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-analytics
    port: 8080
    tools:
    - name: generate-scorecard
      description: Generate supplier performance scorecard.
      inputParameters:
      - name: supplier_id
        type: string
        description: Ariba supplier ID.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-delivery
        type: call
        call: ariba.get-performance
        with:
          supplier_id: '{{supplier_id}}'
          period: '{{period}}'
      - name: get-quality
        type: call
        call: snowflake.execute-query
        with:
          warehouse: PROCUREMENT_WH
          query: SELECT defect_rate FROM supplier_quality WHERE supplier='{{supplier_id}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement
          text: 'Supplier {{supplier_id}}: OTD {{get-delivery.on_time_rate}}%'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-performance-scorecard-generator.yml

Queries Snowflake for retail POS analytics including velocity, distribution, and share data.

naftiko: '0.5'
info:
  label: Snowflake Retail POS Analytics Query
  description: Queries Snowflake for retail POS analytics including velocity, distribution, and share data.
  tags:
  - analytics
  - sales
  - snowflake
  - retail
capability:
  exposes:
  - type: mcp
    namespace: retail-analytics
    port: 8080
    tools:
    - name: query-pos-data
      description: Query Snowflake retail POS data for a category and retailer.
      inputParameters:
      - name: category
        type: string
        description: Product category.
      - name: retailer
        type: string
        description: Retail account.
      - name: date_from
        type: string
        description: Start date.
      call: snowflake.execute-query
      with:
        warehouse: RETAIL_ANALYTICS_WH
        query: SELECT * FROM pos WHERE category='{{category}}'
      outputParameters:
      - name: data
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-retail-pos-analytics-query.yml

Retrieves actual spending for a cost center from SAP for a fiscal period.

naftiko: '0.5'
info:
  label: SAP Cost Center Actuals Lookup
  description: Retrieves actual spending for a cost center from SAP for a fiscal period.
  tags:
  - finance
  - operations
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: get-actuals
      description: Look up cost center actuals in SAP.
      inputParameters:
      - name: cost_center
        type: string
        description: SAP cost center ID.
      - name: period
        type: string
        description: Fiscal period.
      call: sap.get-actuals
      with:
        cost_center: '{{cost_center}}'
        period: '{{period}}'
      outputParameters:
      - name: total
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-actuals
        method: GET
Open in Framework → View in Fleet → sap-cost-center-actuals-lookup.yml

Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups.

naftiko: '0.5'
info:
  label: Retail Planogram Compliance Audit
  description: Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups.
  tags:
  - sales
  - retail
  - salesforce
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: retail-compliance
    port: 8080
    tools:
    - name: audit-planogram
      description: Audit planogram compliance.
      inputParameters:
      - name: region
        type: string
        description: Region.
      - name: audit_week
        type: string
        description: Audit week.
      steps:
      - name: get-visits
        type: call
        call: salesforce.get-visits
        with:
          region: '{{region}}'
      - name: get-compliance
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RETAIL_WH
          query: SELECT score FROM planogram WHERE region='{{region}}'
      - name: create-followup
        type: call
        call: jira.create-issue
        with:
          project_key: RETAIL
          summary: 'Planogram: {{region}} week {{audit_week}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → retail-planogram-compliance-audit.yml

Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups.

naftiko: '0.5'
info:
  label: Retail Shelf Audit Orchestrator
  description: Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups.
  tags:
  - sales
  - retail
  - salesforce
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: retail-ops
    port: 8080
    tools:
    - name: run-audit
      description: Orchestrate retail shelf audit.
      inputParameters:
      - name: account_id
        type: string
        description: Salesforce account ID.
      - name: audit_period
        type: string
        description: Period.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-compliance
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RETAIL_WH
          query: SELECT score FROM audit WHERE account='{{account_id}}'
      - name: create-followup
        type: call
        call: jira.create-issue
        with:
          project_key: RETAIL
          summary: 'Audit: {{get-account.name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → retail-shelf-audit-orchestrator.yml

Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams.

naftiko: '0.5'
info:
  label: Product Shelf Life Monitoring
  description: Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams.
  tags:
  - quality
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: shelf-life
    port: 8080
    tools:
    - name: monitor-shelf-life
      description: Monitor product shelf life and alert on expiring inventory.
      inputParameters:
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: days_threshold
        type: number
        description: Days until expiry threshold.
      steps:
      - name: get-expiring
        type: call
        call: sap.get-expiring-batches
        with:
          plant: '{{plant_code}}'
          threshold: '{{days_threshold}}'
      - name: get-inventory-value
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SC_WH
          query: SELECT sum(value) FROM inventory WHERE plant='{{plant_code}}' AND days_to_expiry<={{days_threshold}}
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain
          text: 'Shelf life alert: {{get-expiring.count}} batches expiring within {{days_threshold}} days at {{plant_code}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /data
      operations:
      - name: get-expiring-batches
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-shelf-life-monitoring.yml

When a purchase requisition is submitted in SAP Ariba, validates budget availability in SAP S/4HANA and routes the approval to the appropriate manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Requisition Approval
  description: When a purchase requisition is submitted in SAP Ariba, validates budget availability in SAP S/4HANA and routes the approval to the appropriate manager via Microsoft Teams.
  tags:
  - procurement
  - finance
  - sap-ariba
  - sap
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: approve-requisition
      description: Given an Ariba requisition ID, check budget in SAP S/4HANA and send an approval card to the responsible manager in Microsoft Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition ID.
      - name: manager_email
        in: body
        type: string
        description: The Microsoft Teams UPN of the approving manager.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisitionId: '{{requisition_id}}'
      - name: check-budget
        type: call
        call: sap-finance.check-budget
        with:
          cost_center: '{{get-requisition.costCenter}}'
          amount: '{{get-requisition.totalAmount}}'
      - name: send-approval-card
        type: call
        call: msteams.post-message
        with:
          recipient: '{{manager_email}}'
          message: 'Approval needed: Requisition {{requisition_id}} for {{get-requisition.totalAmount}} {{get-requisition.currency}}. Budget status: {{check-budget.status}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-requisitions/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisitionId}}
      inputParameters:
      - name: requisitionId
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: sap-finance
    baseUri: https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: budgets
      path: /A_CostCenter('{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: check-budget
        method: GET
  - 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
Open in Framework → View in Fleet → sap-ariba-requisition-approval.yml

Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Release Approval Handler
  description: Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams.
  tags:
  - operations
  - devops
  - azure-devops
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: handle-release
      description: Handle release approval.
      inputParameters:
      - name: pipeline_id
        type: string
        description: Pipeline ID.
      - name: change_request
        type: string
        description: Change request.
      steps:
      - name: get-pipeline
        type: call
        call: azuredevops.get-run
        with:
          pipeline_id: '{{pipeline_id}}'
      - name: validate
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_request}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: releases
          text: 'Release: Pipeline {{pipeline_id}} ({{get-pipeline.status}})'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/colgatepalmolive
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: pipelines
      path: /_apis/pipelines
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-release-approval-handler.yml

Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams.

naftiko: '0.5'
info:
  label: Consumer Review Analysis Pipeline
  description: Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams.
  tags:
  - marketing
  - quality
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer-insights
    port: 8080
    tools:
    - name: analyze-reviews
      description: Analyze consumer reviews for complaint trends.
      inputParameters:
      - name: product_line
        type: string
        description: Product line.
      - name: period_days
        type: number
        description: Lookback days.
      steps:
      - name: get-reviews
        type: call
        call: snowflake.execute-query
        with:
          warehouse: CONSUMER_WH
          query: SELECT topic, count FROM reviews WHERE product='{{product_line}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: PROD
          summary: 'Reviews: {{product_line}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: insights
          text: Review analysis for {{product_line}} complete
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-review-analysis-pipeline.yml

On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts a failure summary to the engineering Teams channel, and logs the incident in Datadog.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Handler
  description: On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts a failure summary to the engineering Teams channel, and logs the incident in Datadog.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure event, create a Jira bug, log a Datadog event, and alert the engineering Teams channel with full context.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: branch
        in: body
        type: string
        description: The branch on which the failure occurred.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      steps:
      - name: get-run-details
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          projectKey: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}'
          description: 'Run: {{run_id}}

            Branch: {{branch}}

            Conclusion: {{get-run-details.conclusion}}'
      - name: log-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI Failure: {{repo}} {{workflow_name}}'
          text: 'Branch: {{branch}}, Run: {{run_id}}'
          alert_type: error
      - name: alert-team
        type: call
        call: msteams.post-channel-message
        with:
          channelId: engineering-alerts
          message: 'CI Failure: {{repo}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgate-palmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-handler.yml

Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI.

naftiko: '0.5'
info:
  label: Trade Promotion Effectiveness Report
  description: Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI.
  tags:
  - sales
  - marketing
  - salesforce
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: trade-analytics
    port: 8080
    tools:
    - name: generate-tpe
      description: Generate trade promotion effectiveness report.
      inputParameters:
      - name: promotion_id
        type: string
        description: Salesforce promotion ID.
      - name: date_from
        type: string
        description: Start date.
      - name: date_to
        type: string
        description: End date.
      steps:
      - name: get-promo
        type: call
        call: salesforce.get-promotion
        with:
          promotion_id: '{{promotion_id}}'
      - name: get-sales
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SALES_WH
          query: SELECT revenue FROM pos WHERE promo='{{promotion_id}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: trade-promotion-effectiveness
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → trade-promotion-effectiveness-report.yml

Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket.

naftiko: '0.5'
info:
  label: E-commerce Order Fulfillment Tracker
  description: Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket.
  tags:
  - ecommerce
  - supply-chain
  - salesforce
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: ecom-fulfillment
    port: 8080
    tools:
    - name: track-fulfillment
      description: Track e-commerce order fulfillment.
      inputParameters:
      - name: order_id
        type: string
        description: Salesforce order ID.
      - name: ticket_id
        type: string
        description: ServiceNow ticket.
      steps:
      - name: get-order
        type: call
        call: salesforce.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-picking
        type: call
        call: sap.get-delivery
        with:
          order: '{{get-order.sap_order}}'
      - name: update-ticket
        type: call
        call: servicenow.update-incident
        with:
          number: '{{ticket_id}}'
          comment: 'Status: {{get-order.status}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → e-commerce-order-fulfillment-tracker.yml

Retrieves engagement metrics for Colgate-Palmolive's LinkedIn brand campaigns and publishes a weekly performance digest to the marketing Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Brand Campaign Digest
  description: Retrieves engagement metrics for Colgate-Palmolive's LinkedIn brand campaigns and publishes a weekly performance digest to the marketing Teams channel.
  tags:
  - marketing
  - social
  - linkedin
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-performance
      description: Given a LinkedIn campaign ID and date range, retrieve engagement metrics and post a performance digest to the marketing Teams channel.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-campaign-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaignId: '{{campaign_id}}'
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channelId: marketing-team
          message: 'LinkedIn Campaign {{campaign_id}} ({{start_date}} to {{end_date}}): Impressions={{get-campaign-stats.impressions}}, Clicks={{get-campaign-stats.clicks}}, Engagement={{get-campaign-stats.engagementRate}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalytics
      inputParameters:
      - name: campaignId
        in: query
      - name: startDate
        in: query
      - name: endDate
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-brand-campaign-digest.yml

Creates a standard ServiceNow change request for planned maintenance, associates it with affected CI records, and sends pre-change notifications via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Automation
  description: Creates a standard ServiceNow change request for planned maintenance, associates it with affected CI records, and sends pre-change notifications via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: open-change-request
      description: Given a change description, affected configuration items, and planned window, create a ServiceNow standard change request and notify stakeholders in Teams.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the planned change.
      - name: affected_ci
        in: body
        type: string
        description: Comma-separated list of affected configuration item names.
      - name: planned_start
        in: body
        type: string
        description: Planned change start datetime in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned change end datetime in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_description}}'
          type: standard
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
          cmdb_ci: '{{affected_ci}}'
      - name: notify-stakeholders
        type: call
        call: msteams.post-channel-message
        with:
          channelId: it-operations
          message: 'Change request {{create-change.number}} opened: {{change_description}} | Window: {{planned_start}} to {{planned_end}} | CIs: {{affected_ci}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-automation.yml

Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard.

naftiko: '0.5'
info:
  label: Warehouse Capacity Planning Orchestrator
  description: Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard.
  tags:
  - supply-chain
  - logistics
  - sap
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: warehouse-planning
    port: 8080
    tools:
    - name: plan-capacity
      description: Analyze warehouse capacity.
      inputParameters:
      - name: warehouse_id
        type: string
        description: Warehouse number.
      - name: weeks
        type: number
        description: Forecast weeks.
      steps:
      - name: get-util
        type: call
        call: sap.get-warehouse-stock
        with:
          warehouse: '{{warehouse_id}}'
      - name: get-forecast
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SC_WH
          query: SELECT pallets FROM forecast WHERE id='{{warehouse_id}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: warehouse-capacity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-warehouse-stock
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → warehouse-capacity-planning-orchestrator.yml

Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists.

naftiko: '0.5'
info:
  label: Contract Manufacturer Quality Audit
  description: Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists.
  tags:
  - quality
  - procurement
  - sap
  - jira
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: quality-audit
    port: 8080
    tools:
    - name: initiate-audit
      description: Start contract manufacturer quality audit.
      inputParameters:
      - name: supplier_id
        type: string
        description: Supplier ID.
      - name: audit_type
        type: string
        description: Audit type.
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: QAUDIT
          summary: 'CM Audit: {{get-supplier.name}}'
      - name: share-checklist
        type: call
        call: sharepoint.copy-template
        with:
          template: audit-{{audit_type}}
          destination: audits/{{supplier_id}}
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/drive/items
      operations:
      - name: search-docs
        method: GET
Open in Framework → View in Fleet → contract-manufacturer-quality-audit.yml

Returns the current paid time off and vacation accrual balances for an employee from Workday, for use in absence planning and manager approvals.

naftiko: '0.5'
info:
  label: Workday Time-Off Balance Lookup
  description: Returns the current paid time off and vacation accrual balances for an employee from Workday, for use in absence planning and manager approvals.
  tags:
  - hr
  - workday
  - absence-management
capability:
  exposes:
  - type: mcp
    namespace: hr-absence
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Given a Workday employee ID, return current accrued vacation, PTO, and sick leave balances. Use when an employee or manager needs to verify available time-off before approving a request.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-leave-balance
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: vacation_days
        type: number
        mapping: $.leaveBalances.vacation
      - name: pto_days
        type: number
        mapping: $.leaveBalances.pto
      - name: sick_days
        type: number
        mapping: $.leaveBalances.sick
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: leave-balances
      path: /colgate-palmolive/workers/{{worker_id}}/leaveBalance
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-leave-balance
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-lookup.yml

Retrieves headcount data from Workday by department including active employees and open positions.

naftiko: '0.5'
info:
  label: Workday Headcount Report Lookup
  description: Retrieves headcount data from Workday by department including active employees and open positions.
  tags:
  - hr
  - workforce
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount
      description: Get headcount report from Workday by department.
      inputParameters:
      - name: department
        type: string
        description: Department name.
      call: workday.get-headcount
      with:
        department: '{{department}}'
      outputParameters:
      - name: active_count
        type: string
        mapping: $.headcount.active
      - name: open_positions
        type: string
        mapping: $.headcount.open
  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: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-headcount-report-lookup.yml

Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams.

naftiko: '0.5'
info:
  label: Product Recall Investigation Orchestrator
  description: Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams.
  tags:
  - quality
  - supply-chain
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: investigate-recall
      description: Orchestrate product recall investigation.
      inputParameters:
      - name: batch_number
        type: string
        description: Batch number.
      - name: material_number
        type: string
        description: Material number.
      - name: severity
        type: string
        description: Severity level.
      steps:
      - name: trace-batch
        type: call
        call: sap.get-batch-details
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Recall: batch {{batch_number}}'
          urgency: '{{severity}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-alerts
          text: 'RECALL: Batch {{batch_number}}. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-batch-details
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-recall-investigation-orchestrator.yml

Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams.

naftiko: '0.5'
info:
  label: Plant Maintenance Schedule Report
  description: Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams.
  tags:
  - manufacturing
  - operations
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: maintenance-reporting
    port: 8080
    tools:
    - name: gen-schedule
      description: Generate maintenance schedule report.
      inputParameters:
      - name: plant_code
        type: string
        description: Plant code.
      - name: weeks
        type: number
        description: Weeks ahead.
      steps:
      - name: get-orders
        type: call
        call: sap.get-orders
        with:
          plant: '{{plant_code}}'
      - name: get-history
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MFG_WH
          query: SELECT mtbf FROM equipment WHERE plant='{{plant_code}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: maintenance
          text: 'Maintenance for {{plant_code}}: {{get-orders.count}} orders'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-orders
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plant-maintenance-schedule-report.yml

Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline Enrichment
  description: Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: enrich-pipeline
      description: Enrich talent pipeline.
      inputParameters:
      - name: department
        type: string
        description: Department.
      steps:
      - name: get-reqs
        type: call
        call: workday.get-positions
        with:
          department: '{{department}}'
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project_key: RECRUIT
          summary: 'Sourcing: {{department}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-enrichment.yml

Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders.

naftiko: '0.5'
info:
  label: Demand Forecast to Production Sync
  description: Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders.
  tags:
  - supply-chain
  - manufacturing
  - snowflake
  - sap
  - planning
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: sync-demand
      description: Synchronize demand forecasts with production planning.
      inputParameters:
      - name: category
        type: string
        description: Product category.
      - name: plant_code
        type: string
        description: Plant code.
      - name: weeks
        type: number
        description: Planning weeks.
      steps:
      - name: get-forecast
        type: call
        call: snowflake.execute-query
        with:
          warehouse: DEMAND_WH
          query: SELECT sku, units FROM forecast WHERE category='{{category}}'
      - name: check-stock
        type: call
        call: sap.get-stock
        with:
          plant: '{{plant_code}}'
          category: '{{category}}'
      - name: create-orders
        type: call
        call: sap.create-planned-order
        with:
          plant: '{{plant_code}}'
          data: '{{get-forecast.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-stock
        method: GET
      - name: create-planned-order
        method: POST
Open in Framework → View in Fleet → demand-forecast-to-production-sync.yml

Checks Azure AD group memberships for a user to validate access rights.

naftiko: '0.5'
info:
  label: Azure AD User Group Membership Check
  description: Checks Azure AD group memberships for a user to validate access rights.
  tags:
  - security
  - identity
  - azure-active-directory
  - access
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: check-groups
      description: List Azure AD group memberships for access validation.
      inputParameters:
      - name: user_upn
        type: string
        description: User principal name.
      call: azuread.get-member-of
      with:
        upn: '{{user_upn}}'
      outputParameters:
      - name: groups
        type: string
        mapping: $.value
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: member-of
      path: /users/memberOf
      operations:
      - name: get-member-of
        method: GET
Open in Framework → View in Fleet → azure-ad-user-group-membership-check.yml

Scans GitHub Dependabot alerts for critical vulnerabilities, creates Jira security tickets, and notifies the security team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Triage
  description: Scans GitHub Dependabot alerts for critical vulnerabilities, creates Jira security tickets, and notifies the security team in Microsoft Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-vulnerability-alerts
      description: Given a GitHub repository, retrieve critical Dependabot security alerts, create Jira security tickets for each, and post a summary to the security Teams channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      steps:
      - name: get-alerts
        type: call
        call: github.get-dependabot-alerts
        with:
          repo: '{{repo}}'
          severity: critical
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          projectKey: SEC
          issuetype: Security
          summary: 'Critical vulnerability: {{get-alerts.advisory_summary}}'
          description: 'Package: {{get-alerts.package_name}}

            CVSS: {{get-alerts.cvss_score}}

            Repo: {{repo}}'
      - name: notify-security
        type: call
        call: msteams.post-channel-message
        with:
          channelId: security-team
          message: 'Critical vulnerability in {{repo}}: {{get-alerts.advisory_summary}} | Jira: {{create-security-ticket.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{repo}}/dependabot/alerts
      inputParameters:
      - name: repo
        in: path
      - name: severity
        in: query
      operations:
      - name: get-dependabot-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgate-palmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-triage.yml

At month end, retrieves the SAP S/4HANA period close status for all entities, checks for open items, and posts the close checklist status to the finance Teams channel.

naftiko: '0.5'
info:
  label: SAP Finance Period Close Checklist
  description: At month end, retrieves the SAP S/4HANA period close status for all entities, checks for open items, and posts the close checklist status to the finance Teams channel.
  tags:
  - finance
  - erp
  - sap
  - microsoft-teams
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: check-period-close-status
      description: Given a fiscal year and period, retrieve the SAP period close status for all company codes and post the consolidated status report to the finance Teams channel.
      inputParameters:
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year, e.g. 2025.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period number, e.g. 03 for March.
      steps:
      - name: get-close-status
        type: call
        call: sap-finance.get-period-status
        with:
          fiscalYear: '{{fiscal_year}}'
          fiscalPeriod: '{{fiscal_period}}'
      - name: post-status
        type: call
        call: msteams.post-channel-message
        with:
          channelId: finance-team
          message: 'Period close status FY{{fiscal_year}} P{{fiscal_period}}: Open items={{get-close-status.openItems}}, Blocked postings={{get-close-status.blockedPostings}}'
  consumes:
  - type: http
    namespace: sap-finance
    baseUri: https://colgate-palmolive-s4.sap.com/sap/opu/odata/sap/API_FIGL_PERIOD_LOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-status
      path: /A_AccountingPeriodLock
      inputParameters:
      - name: fiscalYear
        in: query
      - name: fiscalPeriod
        in: query
      operations:
      - name: get-period-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-finance-period-close-checklist.yml

Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info.

naftiko: '0.5'
info:
  label: SAP Transport Shipment Tracker
  description: Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info.
  tags:
  - supply-chain
  - logistics
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: logistics-tracking
    port: 8080
    tools:
    - name: track-shipment
      description: Track outbound shipment.
      inputParameters:
      - name: delivery_number
        type: string
        description: SAP delivery number.
      - name: sf_order_id
        type: string
        description: Salesforce order ID.
      steps:
      - name: get-delivery
        type: call
        call: sap.get-delivery
        with:
          delivery: '{{delivery_number}}'
      - name: update-order
        type: call
        call: salesforce.update-order
        with:
          order_id: '{{sf_order_id}}'
          tracking: '{{get-delivery.tracking}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → sap-transport-shipment-tracker.yml

Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns.

naftiko: '0.5'
info:
  label: Snowflake Supply Chain KPI Query
  description: Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns.
  tags:
  - supply-chain
  - analytics
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sc-analytics
    port: 8080
    tools:
    - name: query-sc-kpis
      description: Query supply chain KPIs from Snowflake.
      inputParameters:
      - name: region
        type: string
        description: Region code.
      - name: period
        type: string
        description: Period.
      call: snowflake.execute-query
      with:
        warehouse: SC_ANALYTICS_WH
        query: SELECT fill_rate, otif FROM sc_kpis WHERE region='{{region}}'
      outputParameters:
      - name: fill_rate
        type: string
        mapping: $.data[0].fill_rate
      - name: otif
        type: string
        mapping: $.data[0].otif
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-supply-chain-kpi-query.yml

Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks.

naftiko: '0.5'
info:
  label: Packaging Sustainability Compliance Check
  description: Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks.
  tags:
  - sustainability
  - quality
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: check-packaging
      description: Verify packaging sustainability compliance.
      inputParameters:
      - name: material_number
        type: string
        description: Material number.
      - name: plant_code
        type: string
        description: Plant code.
      steps:
      - name: get-bom
        type: call
        call: sap.get-bom
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: check
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SUSTAINABILITY_WH
          query: SELECT recyclable_pct FROM packaging WHERE material IN ({{get-bom.components}})
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: SUSTAIN
          summary: 'Packaging: {{material_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → packaging-sustainability-compliance-check.yml

Calculates a customer health score from Salesforce case history and product usage data, then updates the account record for proactive retention management.

naftiko: '0.5'
info:
  label: Salesforce Customer Health Score Updater
  description: Calculates a customer health score from Salesforce case history and product usage data, then updates the account record for proactive retention management.
  tags:
  - crm
  - customer-success
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: customer-success
    port: 8080
    tools:
    - name: update-health-score
      description: Given a Salesforce account ID, retrieve open cases and usage data, compute a health score, and update the account record with the latest score.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account record ID.
      steps:
      - name: get-account-cases
        type: call
        call: salesforce.get-account-cases
        with:
          accountId: '{{account_id}}'
      - name: update-account
        type: call
        call: salesforce-update.update-account
        with:
          accountId: '{{account_id}}'
          healthScore: '{{get-account-cases.healthIndicator}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgate-palmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Account/{{accountId}}/Cases
      inputParameters:
      - name: accountId
        in: path
      operations:
      - name: get-account-cases
        method: GET
  - type: http
    namespace: salesforce-update
    baseUri: https://colgate-palmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{accountId}}
      inputParameters:
      - name: accountId
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-customer-health-score-updater.yml

Uses Anthropic Claude to summarize product compliance documents stored in SharePoint and posts the summary to the relevant product team channel in Microsoft Teams.

naftiko: '0.5'
info:
  label: Intelligent Document Summarization
  description: Uses Anthropic Claude to summarize product compliance documents stored in SharePoint and posts the summary to the relevant product team channel in Microsoft Teams.
  tags:
  - ai
  - automation
  - anthropic
  - sharepoint
  - microsoft-teams
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: ai-docs
    port: 8080
    tools:
    - name: summarize-compliance-document
      description: Given a SharePoint file path and target Teams channel, retrieve the document content, send it to Claude for summarization, and post the summary to the Teams channel.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID containing the document.
      - name: file_path
        in: body
        type: string
        description: The relative file path in SharePoint.
      - name: teams_channel_id
        in: body
        type: string
        description: The Teams channel ID to post the summary to.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          siteId: '{{site_id}}'
          filePath: '{{file_path}}'
      - name: summarize
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          content: 'Summarize this compliance document in 3-5 key bullet points: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          message: 'Document summary for {{file_path}}:

            {{summarize.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{siteId}}/drive/root:{{filePath}}:/content
      inputParameters:
      - name: siteId
        in: path
      - name: filePath
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → intelligent-document-summarization.yml

Coordinates a product launch by publishing content to LinkedIn and retrieving early engagement metrics to share with the brand team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Launch Social Media Coordinator
  description: Coordinates a product launch by publishing content to LinkedIn and retrieving early engagement metrics to share with the brand team in Microsoft Teams.
  tags:
  - marketing
  - social
  - linkedin
  - microsoft-teams
  - product-launch
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: publish-launch-content
      description: Given a LinkedIn organization ID and post content, publish the launch post and then retrieve initial engagement metrics, posting the result to the brand Teams channel.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The LinkedIn organization ID for Colgate-Palmolive.
      - name: post_content
        in: body
        type: string
        description: The content text for the LinkedIn post.
      steps:
      - name: publish-post
        type: call
        call: linkedin.create-post
        with:
          organizationId: '{{org_id}}'
          text: '{{post_content}}'
      - name: notify-brand-team
        type: call
        call: msteams.post-channel-message
        with:
          channelId: brand-team
          message: 'Product launch post published on LinkedIn. Post ID: {{publish-post.id}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: shares
      path: /ugcPosts
      operations:
      - name: create-post
        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/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → product-launch-social-media-coordinator.yml

Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals.

naftiko: '0.5'
info:
  label: Production Scheduling Optimizer
  description: Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals.
  tags:
  - manufacturing
  - supply-chain
  - snowflake
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: production-planning
    port: 8080
    tools:
    - name: optimize-schedule
      description: Optimize production scheduling.
      inputParameters:
      - name: plant_code
        type: string
        description: Plant code.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-demand
        type: call
        call: snowflake.execute-query
        with:
          warehouse: DEMAND_WH
          query: SELECT sku, units FROM demand WHERE plant='{{plant_code}}'
      - name: get-capacity
        type: call
        call: sap.get-capacity
        with:
          plant: '{{plant_code}}'
      - name: create-schedule
        type: call
        call: jira.create-issue
        with:
          project_key: PROD
          summary: 'Schedule: {{plant_code}} {{period}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-capacity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → production-scheduling-optimizer.yml

Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams.

naftiko: '0.5'
info:
  label: Brand Sentiment Monitoring Responder
  description: Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams.
  tags:
  - marketing
  - social
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-monitoring
    port: 8080
    tools:
    - name: respond-sentiment
      description: Monitor brand sentiment and respond to negative trends.
      inputParameters:
      - name: brand_name
        type: string
        description: Brand name.
      - name: threshold
        type: number
        description: Negative threshold pct.
      steps:
      - name: get-sentiment
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SOCIAL_WH
          query: SELECT negative_pct FROM sentiment WHERE brand='{{brand_name}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: 'Sentiment alert: {{brand_name}}'
      - name: alert
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-mgmt
          text: 'SENTIMENT: {{brand_name}} negative at {{get-sentiment.negative_pct}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → brand-sentiment-monitoring-responder.yml

Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams.

naftiko: '0.5'
info:
  label: Manufacturing Line Downtime Handler
  description: Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams.
  tags:
  - manufacturing
  - operations
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfg-ops
    port: 8080
    tools:
    - name: handle-downtime
      description: Respond to manufacturing line downtime.
      inputParameters:
      - name: production_line
        type: string
        description: Line ID.
      - name: plant_code
        type: string
        description: Plant code.
      - name: reason
        type: string
        description: Downtime reason.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line down: {{production_line}}'
          urgency: '1'
      - name: update-sap
        type: call
        call: sap.update-status
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
      - name: alert-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-ops
          text: 'LINE DOWN: {{production_line}}. Reason: {{reason}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: update-status
        method: PATCH
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-line-downtime-handler.yml

Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow.

naftiko: '0.5'
info:
  label: Customer Complaint Quality Investigation
  description: Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow.
  tags:
  - quality
  - customer-service
  - sap
  - jira
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: complaint-quality
    port: 8080
    tools:
    - name: route-complaint
      description: Route customer complaint to quality investigation.
      inputParameters:
      - name: ticket_id
        type: string
        description: ServiceNow ticket.
      - name: batch_number
        type: string
        description: Batch number.
      - name: material_number
        type: string
        description: Material number.
      steps:
      - name: trace
        type: call
        call: sap.get-batch
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: create-inv
        type: call
        call: jira.create-issue
        with:
          project_key: QUAL
          summary: 'Complaint: batch {{batch_number}}'
      - name: update
        type: call
        call: servicenow.update-incident
        with:
          number: '{{ticket_id}}'
          comment: 'Investigation: {{create-inv.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → customer-complaint-quality-investigation.yml

Generates learning paths from Workday skills, matches with training, and creates Jira development plans.

naftiko: '0.5'
info:
  label: Employee Learning Path Generator
  description: Generates learning paths from Workday skills, matches with training, and creates Jira development plans.
  tags:
  - hr
  - training
  - workday
  - jira
capability:
  exposes:
  - type: mcp
    namespace: hr-learning
    port: 8080
    tools:
    - name: generate-path
      description: Create personalized learning path.
      inputParameters:
      - name: employee_id
        type: string
        description: Employee ID.
      - name: target_role
        type: string
        description: Target role.
      steps:
      - name: get-skills
        type: call
        call: workday.get-skills
        with:
          worker_id: '{{employee_id}}'
      - name: create-plan
        type: call
        call: jira.create-issue
        with:
          project_key: LEARN
          summary: 'Learning: {{target_role}} for {{employee_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: workers
      path: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → employee-learning-path-generator.yml

Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks.

naftiko: '0.5'
info:
  label: Contractor Access Expiry Handler
  description: Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks.
  tags:
  - security
  - identity
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-lifecycle
    port: 8080
    tools:
    - name: handle-expiry
      description: Handle contractor access expiry.
      inputParameters:
      - name: contractor_email
        type: string
        description: Contractor email.
      steps:
      - name: get-okta
        type: call
        call: okta.get-user
        with:
          email: '{{contractor_email}}'
      - name: check-wd
        type: call
        call: workday.get-worker
        with:
          email: '{{contractor_email}}'
      - name: create-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Expiry: {{contractor_email}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://colgatepalmolive.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → contractor-access-expiry-handler.yml

Pulls completed sprint data from Jira, calculates team velocity metrics, and posts the sprint review summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report
  description: Pulls completed sprint data from Jira, calculates team velocity metrics, and posts the sprint review summary to the engineering Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: engineering-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity
      description: Given a Jira board ID and sprint ID, retrieve completed story points and issues, then post a velocity summary to the engineering Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira software board ID.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to report on.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.get-sprint-issues
        with:
          boardId: '{{board_id}}'
          sprintId: '{{sprint_id}}'
      - name: post-velocity
        type: call
        call: msteams.post-channel-message
        with:
          channelId: engineering-team
          message: 'Sprint {{sprint_id}} complete: {{get-sprint-issues.completedIssues}} issues, {{get-sprint-issues.completedPoints}} story points delivered.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://colgate-palmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-issues
      path: /board/{{boardId}}/sprint/{{sprintId}}/issue
      inputParameters:
      - name: boardId
        in: path
      - name: sprintId
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-report.yml

Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks.

naftiko: '0.5'
info:
  label: Customer Returns Analysis
  description: Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks.
  tags:
  - quality
  - sales
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: returns-analytics
    port: 8080
    tools:
    - name: analyze-returns
      description: Analyze customer return patterns.
      inputParameters:
      - name: material_number
        type: string
        description: Material.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-returns
        type: call
        call: sap.get-returns
        with:
          material: '{{material_number}}'
      - name: get-quality
        type: call
        call: snowflake.execute-query
        with:
          warehouse: QUALITY_WH
          query: SELECT reason FROM returns WHERE material='{{material_number}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: QUAL
          summary: 'Returns: {{material_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-returns
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → customer-returns-analysis.yml

Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account.

naftiko: '0.5'
info:
  label: SAP Credit Memo Processing
  description: Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account.
  tags:
  - finance
  - sales
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: finance-ar
    port: 8080
    tools:
    - name: process-credit-memo
      description: Process credit memo.
      inputParameters:
      - name: invoice_number
        type: string
        description: Invoice number.
      - name: credit_amount
        type: number
        description: Credit amount.
      - name: reason
        type: string
        description: Reason.
      steps:
      - name: validate
        type: call
        call: sap.get-invoice
        with:
          invoice: '{{invoice_number}}'
      - name: create-credit
        type: call
        call: sap.create-credit-memo
        with:
          reference: '{{invoice_number}}'
          amount: '{{credit_amount}}'
      - name: update-account
        type: call
        call: salesforce.update-account
        with:
          id: '{{validate.customer_id}}'
          credit: '{{credit_amount}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-invoice
        method: GET
      - name: create-credit-memo
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → sap-credit-memo-processing.yml

Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Monitoring
  description: Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events.
  tags:
  - supply-chain
  - quality
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: monitor-cold-chain
      description: Monitor cold chain temperature excursions and create incidents.
      inputParameters:
      - name: shipment_id
        type: string
        description: Shipment tracking ID.
      - name: max_temp
        type: number
        description: Maximum allowed temperature in Celsius.
      steps:
      - name: get-temps
        type: call
        call: snowflake.execute-query
        with:
          warehouse: IOT_WH
          query: SELECT timestamp, temp_celsius FROM cold_chain WHERE shipment='{{shipment_id}}' AND temp_celsius>{{max_temp}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold chain excursion: shipment {{shipment_id}}'
          description: '{{get-temps.excursion_count}} temperature excursions above {{max_temp}}C'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-alerts
          text: 'COLD CHAIN ALERT: Shipment {{shipment_id}} had {{get-temps.excursion_count}} excursions'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-monitoring.yml

Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Invoice Three-Way Match
  description: Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow.
  tags:
  - finance
  - procurement
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: ap-automation
    port: 8080
    tools:
    - name: three-way-match
      description: Perform three-way match for vendor invoice.
      inputParameters:
      - name: invoice_number
        type: string
        description: Invoice number.
      - name: po_number
        type: string
        description: PO number.
      steps:
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: get-receipt
        type: call
        call: sap.get-receipt
        with:
          po_number: '{{po_number}}'
      - name: create-exception
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Mismatch: {{invoice_number}} vs PO {{po_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-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: resource
      path: /data
      operations:
      - name: get-po
        method: GET
      - name: get-receipt
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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
Open in Framework → View in Fleet → vendor-invoice-three-way-match.yml

Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams.

naftiko: '0.5'
info:
  label: SAP Financial Period Close Orchestrator
  description: Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams.
  tags:
  - finance
  - operations
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: close-period
      description: Orchestrate financial period close.
      inputParameters:
      - name: period
        type: string
        description: Fiscal period.
      - name: company_code
        type: string
        description: Company code.
      steps:
      - name: check-items
        type: call
        call: sap.get-open-items
        with:
          code: '{{company_code}}'
          period: '{{period}}'
      - name: validate
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FINANCE_WH
          query: SELECT * FROM recon WHERE code='{{company_code}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-close
          text: 'Period {{period}}: Open items {{check-items.count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-open-items
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-financial-period-close-orchestrator.yml

Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel.

naftiko: '0.5'
info:
  label: Distributor Order to Cash Tracker
  description: Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel.
  tags:
  - sales
  - finance
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: order-to-cash
    port: 8080
    tools:
    - name: track-order-to-cash
      description: Track distributor order through fulfillment and collection.
      inputParameters:
      - name: order_id
        type: string
        description: Salesforce order ID.
      steps:
      - name: get-order
        type: call
        call: salesforce.get-order
        with:
          order_id: '{{order_id}}'
      - name: get-fulfillment
        type: call
        call: sap.get-delivery-status
        with:
          order: '{{get-order.sap_reference}}'
      - name: post-status
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-ar
          text: 'Order {{order_id}}: Fulfillment {{get-fulfillment.status}}. Invoice: {{get-fulfillment.invoice_number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-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: /data
      operations:
      - name: get-delivery-status
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → distributor-order-to-cash-tracker.yml

Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams.

naftiko: '0.5'
info:
  label: Production Batch Release Workflow
  description: Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: batch-release
    port: 8080
    tools:
    - name: release-batch
      description: Release production batch after QA.
      inputParameters:
      - name: batch_number
        type: string
        description: Batch number.
      - name: material_number
        type: string
        description: Material number.
      steps:
      - name: check-qa
        type: call
        call: sap.get-inspection
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: release
        type: call
        call: sap.update-batch
        with:
          batch: '{{batch_number}}'
          status: RELEASED
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics
          text: 'Batch {{batch_number}} released. QA: {{check-qa.decision}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-inspection
        method: GET
      - name: update-batch
        method: PATCH
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → production-batch-release-workflow.yml

Searches SharePoint for documents matching a keyword.

naftiko: '0.5'
info:
  label: SharePoint Document Search
  description: Searches SharePoint for documents matching a keyword.
  tags:
  - operations
  - documents
  - sharepoint
  - search
capability:
  exposes:
  - type: mcp
    namespace: doc-management
    port: 8080
    tools:
    - name: search-docs
      description: Search SharePoint for documents.
      inputParameters:
      - name: keyword
        type: string
        description: Search keyword.
      - name: site_id
        type: string
        description: SharePoint site ID.
      call: sharepoint.search
      with:
        siteId: '{{site_id}}'
        query: '{{keyword}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.value
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/drive/items
      operations:
      - name: search-docs
        method: GET
Open in Framework → View in Fleet → sharepoint-document-search.yml

Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications.

naftiko: '0.5'
info:
  label: SAP Recipe Management Lookup
  description: Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications.
  tags:
  - manufacturing
  - r-and-d
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: recipe-mgmt
    port: 8080
    tools:
    - name: get-recipe
      description: Look up a product recipe in SAP by material number. Returns ingredients, process steps, and yield.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      call: sap.get-recipe
      with:
        material: '{{material_number}}'
      outputParameters:
      - name: recipe_id
        type: string
        mapping: $.d.RecipeId
      - name: ingredients
        type: string
        mapping: $.d.Ingredients
      - name: yield_pct
        type: string
        mapping: $.d.PlannedYield
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recipes
      path: /A_Recipe
      operations:
      - name: get-recipe
        method: GET
Open in Framework → View in Fleet → sap-recipe-management-lookup.yml

Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams.

naftiko: '0.5'
info:
  label: Digital Shelf Price Monitor
  description: Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams.
  tags:
  - ecommerce
  - sales
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-ops
    port: 8080
    tools:
    - name: monitor-pricing
      description: Monitor digital shelf pricing for MAP violations.
      inputParameters:
      - name: brand
        type: string
        description: Brand name.
      - name: marketplace
        type: string
        description: Marketplace.
      steps:
      - name: get-prices
        type: call
        call: snowflake.execute-query
        with:
          warehouse: ECOM_WH
          query: SELECT sku, price FROM shelf WHERE brand='{{brand}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: 'MAP violation: {{brand}} on {{marketplace}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: pricing
          text: 'MAP alert: {{brand}} on {{marketplace}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → digital-shelf-price-monitor.yml

Retrieves Meta Ads campaign performance metrics for a campaign and date range.

naftiko: '0.5'
info:
  label: Meta Ad Campaign Performance Lookup
  description: Retrieves Meta Ads campaign performance metrics for a campaign and date range.
  tags:
  - marketing
  - social
  - meta
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-ads
    port: 8080
    tools:
    - name: get-campaign-insights
      description: Fetch Meta Ads campaign insights.
      inputParameters:
      - name: campaign_id
        type: string
        description: Meta campaign ID.
      - name: date_from
        type: string
        description: Start date.
      - name: date_to
        type: string
        description: End date.
      call: meta.get-insights
      with:
        campaign_id: '{{campaign_id}}'
        since: '{{date_from}}'
      outputParameters:
      - name: impressions
        type: string
        mapping: $.data[0].impressions
      - name: spend
        type: string
        mapping: $.data[0].spend
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → meta-ad-campaign-performance-lookup.yml

Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams.

naftiko: '0.5'
info:
  label: Competitive Market Intelligence Digest
  description: Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams.
  tags:
  - marketing
  - analytics
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-intelligence
    port: 8080
    tools:
    - name: generate-digest
      description: Generate competitive market intelligence digest.
      inputParameters:
      - name: category
        type: string
        description: Product category.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MARKET_WH
          query: SELECT brand, share FROM circana WHERE category='{{category}}'
      - name: update-sf
        type: call
        call: salesforce.update-report
        with:
          category: '{{category}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: market-intel
          text: Market digest for {{category}} ready
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → competitive-market-intelligence-digest.yml

Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams.

naftiko: '0.5'
info:
  label: New Product Development Gate Review
  description: Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams.
  tags:
  - r-and-d
  - innovation
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: npd-gates
    port: 8080
    tools:
    - name: conduct-gate-review
      description: Conduct NPD gate review by gathering project status and financials.
      inputParameters:
      - name: project_key
        type: string
        description: Jira project key for NPD.
      - name: gate_number
        type: number
        description: Gate review number.
      steps:
      - name: get-project-status
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{project_key}}'
      - name: get-financials
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FINANCE_WH
          query: SELECT npv, roi_pct, payback_months FROM npd_financials WHERE project='{{project_key}}'
      - name: post-review
        type: call
        call: msteams.send-message
        with:
          channel_id: npd-reviews
          text: 'Gate {{gate_number}} review for {{project_key}}: NPV ${{get-financials.npv}}, ROI {{get-financials.roi_pct}}%'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-development-gate-review.yml

Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI.

naftiko: '0.5'
info:
  label: Workday Diversity Metrics Report
  description: Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI.
  tags:
  - hr
  - analytics
  - workday
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: hr-analytics
    port: 8080
    tools:
    - name: generate-diversity
      description: Generate workforce diversity metrics.
      inputParameters:
      - name: business_unit
        type: string
        description: Business unit.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-demo
        type: call
        call: workday.get-demographics
        with:
          bu: '{{business_unit}}'
      - name: get-analytics
        type: call
        call: snowflake.execute-query
        with:
          warehouse: HR_WH
          query: SELECT diversity_index FROM metrics WHERE bu='{{business_unit}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: diversity-dashboard
  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: /colgatepalmolive/workers
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → workday-diversity-metrics-report.yml

Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams.

naftiko: '0.5'
info:
  label: SAP Maintenance Order Creation
  description: Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams.
  tags:
  - manufacturing
  - operations
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: plant-maintenance
    port: 8080
    tools:
    - name: create-order
      description: Create maintenance order.
      inputParameters:
      - name: snow_ticket
        type: string
        description: ServiceNow ticket.
      - name: equipment_id
        type: string
        description: Equipment ID.
      - name: priority
        type: string
        description: Priority.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-request
        with:
          number: '{{snow_ticket}}'
      - name: create-order
        type: call
        call: sap.create-order
        with:
          equipment: '{{equipment_id}}'
          priority: '{{priority}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: maintenance
          text: 'Maintenance order for {{equipment_id}}. Priority: {{priority}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: create-order
        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: send-message
        method: POST
Open in Framework → View in Fleet → sap-maintenance-order-creation.yml

Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams.

naftiko: '0.5'
info:
  label: Plant Energy Consumption Monitor
  description: Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams.
  tags:
  - manufacturing
  - sustainability
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: energy-monitoring
    port: 8080
    tools:
    - name: monitor-energy
      description: Monitor plant energy against targets.
      inputParameters:
      - name: plant_code
        type: string
        description: Plant code.
      - name: date
        type: string
        description: Date.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: IOT_WH
          query: SELECT kwh FROM energy WHERE plant='{{plant_code}}'
      - name: create-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Energy anomaly: {{plant_code}}'
      - name: alert
        type: call
        call: msteams.send-message
        with:
          channel_id: sustainability
          text: 'Energy alert: {{plant_code}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgatepalmolive.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: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plant-energy-consumption-monitor.yml

Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams.

naftiko: '0.5'
info:
  label: Supply Chain Risk Assessment
  description: Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams.
  tags:
  - supply-chain
  - procurement
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-risk
    port: 8080
    tools:
    - name: assess-risk
      description: Assess supply chain risk.
      inputParameters:
      - name: material_group
        type: string
        description: Material group.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SC_WH
          query: SELECT supplier, share FROM concentration WHERE group='{{material_group}}'
      - name: get-risk
        type: call
        call: ariba.get-risk
        with:
          group: '{{material_group}}'
      - name: post
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-risk
          text: 'Risk for {{material_group}}: Top share {{get-data.top_share}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: get-supplier
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-risk-assessment.yml

Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies.

naftiko: '0.5'
info:
  label: Food Safety Allergen Verification
  description: Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies.
  tags:
  - quality
  - food-safety
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-safety
    port: 8080
    tools:
    - name: verify-allergens
      description: Verify allergen declarations against BOM and regulatory database.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      - name: market
        type: string
        description: Target market country code.
      steps:
      - name: get-ingredients
        type: call
        call: sap.get-bom
        with:
          material: '{{material_number}}'
      - name: check-allergens
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FOOD_SAFETY_WH
          query: SELECT allergen, status FROM allergen_db WHERE ingredient IN ({{get-ingredients.components}}) AND market='{{market}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: FSAFETY
          summary: 'Allergen verification: {{material_number}} for {{market}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /data
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → food-safety-allergen-verification.yml

When a new lead is created in Salesforce, enriches the record with ZoomInfo company data and assigns it to the correct sales territory owner.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment
  description: When a new lead is created in Salesforce, enriches the record with ZoomInfo company data and assigns it to the correct sales territory owner.
  tags:
  - crm
  - sales
  - salesforce
  - zoominfo
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: crm-leads
    port: 8080
    tools:
    - name: enrich-lead
      description: Given a Salesforce lead ID, fetch company firmographics from ZoomInfo and update the Salesforce record with enriched data and territory assignment.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-company
        type: call
        call: zoominfo.search-company
        with:
          companyName: '{{get-lead.Company}}'
          website: '{{get-lead.Website}}'
      - name: update-lead
        type: call
        call: salesforce-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          AnnualRevenue: '{{enrich-company.revenue}}'
          NumberOfEmployees: '{{enrich-company.employeeCount}}'
          Industry: '{{enrich-company.industry}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgate-palmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce-update
    baseUri: https://colgate-palmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment.yml

Triggers a scheduled Power BI dataset refresh after Snowflake pipeline completion and posts the refresh status to the analytics Teams channel.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Trigger
  description: Triggers a scheduled Power BI dataset refresh after Snowflake pipeline completion and posts the refresh status to the analytics Teams channel.
  tags:
  - data
  - analytics
  - power-bi
  - snowflake
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: trigger-report-refresh
      description: Given a Power BI dataset ID, trigger a dataset refresh and post the completion status to the analytics Teams channel.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the dataset.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspaceId: '{{workspace_id}}'
          datasetId: '{{dataset_id}}'
      - name: notify-analytics
        type: call
        call: msteams.post-channel-message
        with:
          channelId: analytics-team
          message: Power BI dataset {{dataset_id}} refresh triggered in workspace {{workspace_id}}.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspaceId}}/datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: workspaceId
        in: path
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        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/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh-trigger.yml

Retrieves vendor payment terms and credit limit from SAP.

naftiko: '0.5'
info:
  label: SAP Vendor Payment Terms Lookup
  description: Retrieves vendor payment terms and credit limit from SAP.
  tags:
  - finance
  - procurement
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: erp-finance
    port: 8080
    tools:
    - name: get-payment-terms
      description: Look up vendor payment terms in SAP.
      inputParameters:
      - name: vendor_number
        type: string
        description: SAP vendor number.
      call: sap.get-vendor-terms
      with:
        vendor: '{{vendor_number}}'
      outputParameters:
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: credit_limit
        type: string
        mapping: $.d.CreditLimit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-vendor-terms
        method: GET
Open in Framework → View in Fleet → sap-vendor-payment-terms-lookup.yml

Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams.

naftiko: '0.5'
info:
  label: SAP Warehouse Transfer Posting
  description: Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: post-transfer
      description: Post warehouse transfer.
      inputParameters:
      - name: material
        type: string
        description: Material.
      - name: from_loc
        type: string
        description: Source.
      - name: to_loc
        type: string
        description: Target.
      - name: quantity
        type: number
        description: Quantity.
      steps:
      - name: transfer
        type: call
        call: sap.post-transfer
        with:
          material: '{{material}}'
          from: '{{from_loc}}'
      - name: update
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SC_WH
          query: CALL update_inv('{{material}}', {{quantity}})
      - name: confirm
        type: call
        call: msteams.send-message
        with:
          channel_id: warehouse
          text: 'Transfer: {{quantity}} of {{material}} to {{to_loc}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: post-transfer
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-warehouse-transfer-posting.yml

Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams.

naftiko: '0.5'
info:
  label: New SKU Onboarding Workflow
  description: Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams.
  tags:
  - supply-chain
  - sales
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sku-management
    port: 8080
    tools:
    - name: onboard-sku
      description: Orchestrate new SKU onboarding.
      inputParameters:
      - name: sku_name
        type: string
        description: Product name.
      - name: category
        type: string
        description: Category.
      - name: unit_cost
        type: number
        description: Unit cost.
      steps:
      - name: create-material
        type: call
        call: sap.create-material
        with:
          description: '{{sku_name}}'
          group: '{{category}}'
      - name: create-product
        type: call
        call: salesforce.create-product
        with:
          Name: '{{sku_name}}'
          ProductCode: '{{create-material.number}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain
          text: 'New SKU: {{sku_name}} ({{create-material.number}})'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → new-sku-onboarding-workflow.yml

Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks.

naftiko: '0.5'
info:
  label: Production Yield Analysis
  description: Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks.
  tags:
  - manufacturing
  - quality
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: production-analytics
    port: 8080
    tools:
    - name: analyze-yield
      description: Analyze production yield.
      inputParameters:
      - name: line
        type: string
        description: Production line.
      - name: plant_code
        type: string
        description: Plant code.
      - name: period
        type: string
        description: Period.
      steps:
      - name: get-yield
        type: call
        call: sap.get-confirmations
        with:
          plant: '{{plant_code}}'
          line: '{{line}}'
      - name: get-waste
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MFG_WH
          query: SELECT waste_pct FROM waste WHERE line='{{line}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: MFG
          summary: 'Yield: {{line}} ({{period}})'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://colgatepalmolive-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: resource
      path: /data
      operations:
      - name: get-confirmations
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://colgatepalmolive.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://colgatepalmolive.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → production-yield-analysis.yml

Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, monitors the run result, and creates a ServiceNow change record.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioning
  description: Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, monitors the run result, and creates a ServiceNow change record.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: trigger-terraform-run
      description: Given a Terraform Cloud workspace ID and message, trigger a plan and apply run, then create a ServiceNow change record documenting the infrastructure change.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID.
      - name: change_description
        in: body
        type: string
        description: Description of the infrastructure change being applied.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspaceId: '{{workspace_id}}'
          message: '{{change_description}}'
      - name: create-change-record
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Terraform infra change: {{change_description}}'
          description: 'Workspace: {{workspace_id}}

            Run ID: {{create-run.runId}}'
          category: Infrastructure
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.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
        method: POST
Open in Framework → View in Fleet → terraform-cloud-workspace-provisioning.yml

When Adobe Analytics detects a traffic anomaly on a Colgate-Palmolive digital property, creates a ServiceNow ticket and notifies the digital team in Teams.

naftiko: '0.5'
info:
  label: Adobe Analytics Anomaly Triage
  description: When Adobe Analytics detects a traffic anomaly on a Colgate-Palmolive digital property, creates a ServiceNow ticket and notifies the digital team in Teams.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - servicenow
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: digital-monitoring
    port: 8080
    tools:
    - name: handle-analytics-anomaly
      description: Given an Adobe Analytics report suite ID and anomaly description, create a ServiceNow ticket for investigation and alert the digital team in Teams.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID where the anomaly occurred.
      - name: anomaly_description
        in: body
        type: string
        description: Description of the detected anomaly.
      - name: metric
        in: body
        type: string
        description: The metric that anomaly was detected on, e.g. visits, revenue.
      steps:
      - name: get-anomaly-data
        type: call
        call: adobe-analytics.get-anomaly-report
        with:
          reportSuiteId: '{{report_suite_id}}'
          metric: '{{metric}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Analytics anomaly on {{report_suite_id}}: {{anomaly_description}}'
          category: digital_analytics
          description: 'Metric: {{metric}}

            Anomaly: {{anomaly_description}}

            Value: {{get-anomaly-data.currentValue}}'
      - name: notify-digital-team
        type: call
        call: msteams.post-channel-message
        with:
          channelId: digital-team
          message: 'Analytics anomaly detected on {{report_suite_id}}: {{anomaly_description}} | ServiceNow: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: anomaly-detection
      path: /anomalyDetection/suites/{{reportSuiteId}}
      inputParameters:
      - name: reportSuiteId
        in: path
      operations:
      - name: get-anomaly-report
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://colgate-palmolive.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-anomaly-triage.yml

Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams.

naftiko: '0.5'
info:
  label: Marketing Campaign Launch Coordinator
  description: Coordinates launch by creating Salesforce campaign, Meta ads, and notifying marketing via Teams.
  tags:
  - marketing
  - campaigns
  - salesforce
  - meta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: campaign-ops
    port: 8080
    tools:
    - name: launch-campaign
      description: Orchestrate marketing campaign launch.
      inputParameters:
      - name: campaign_name
        type: string
        description: Campaign name.
      - name: brand
        type: string
        description: Brand.
      - name: start_date
        type: string
        description: Start date.
      - name: budget
        type: number
        description: Budget USD.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          Name: '{{campaign_name}}'
          Brand: '{{brand}}'
      - name: activate-ads
        type: call
        call: meta.activate
        with:
          name: '{{campaign_name}}'
          status: ACTIVE
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing
          text: Campaign '{{campaign_name}}' launched for {{brand}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://colgatepalmolive.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects
      operations:
      - name: query
        method: GET
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: get-insights
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → marketing-campaign-launch-coordinator.yml

Fetches approved open job requisitions from Workday Recruiting and publishes them to the General Mills LinkedIn company page.

naftiko: '0.5'
info:
  label: Workday Open Requisition to LinkedIn Publisher
  description: Fetches approved open job requisitions from Workday Recruiting and publishes them to the General Mills LinkedIn company page.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: talent-publishing
    port: 8080
    tools:
    - name: publish-job-to-linkedin
      description: Given a Workday job requisition ID, fetch job details from Workday and post the role to the General Mills LinkedIn company page. Use when a recruiter approves a role for external publication.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID to publish.
      steps:
      - name: get-requisition
        type: call
        call: workday-jobs.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: post-to-linkedin
        type: call
        call: linkedin-jobs.create-job-posting
        with:
          title: '{{get-requisition.job_title}}'
          description: '{{get-requisition.job_description}}'
          location: '{{get-requisition.location}}'
          company_id: $secrets.linkedin_gm_company_id
  consumes:
  - type: http
    namespace: workday-jobs
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /generalmills/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin-jobs
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /simpleJobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → workday-open-requisition-to-linkedin-publisher.yml

Exports current General Mills headcount grouped by department and cost center from Workday for quarterly workforce planning and executive reporting.

naftiko: '0.5'
info:
  label: Workday Headcount Export for Finance
  description: Exports current General Mills headcount grouped by department and cost center from Workday for quarterly workforce planning and executive reporting.
  tags:
  - hr
  - reporting
  - workday
  - headcount
  - finance
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-by-department
      description: Returns active General Mills employees grouped by department and cost center from Workday. Use for headcount planning, budget reviews, and HR analytics.
      call: workday-hcm.headcount-export
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
      - name: total_count
        type: number
        mapping: $.total
  consumes:
  - type: http
    namespace: workday-hcm
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers-export
      path: /generalmills/workers
      inputParameters:
      - name: format
        in: query
        value: json
      operations:
      - name: headcount-export
        method: GET
Open in Framework → View in Fleet → workday-headcount-export-for-finance.yml

Triggers a Terraform Cloud plan-and-apply run for a General Mills infrastructure workspace following an approved change request.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Run
  description: Triggers a Terraform Cloud plan-and-apply run for a General Mills infrastructure workspace following an approved change request.
  tags:
  - cloud
  - infrastructure
  - terraform
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: trigger-terraform-run
      description: Given a Terraform Cloud workspace ID and run message, trigger a new plan-and-apply run. Use when deploying approved General Mills infrastructure changes to cloud environments.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID (e.g., ws-xxxxxxxxxxxxxxxx).
      - name: message
        in: body
        type: string
        description: Human-readable message describing the reason for this run.
      call: terraform-cloud.create-run
      with:
        workspace_id: '{{workspace_id}}'
        message: '{{message}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.data.id
      - name: status
        type: string
        mapping: $.data.attributes.status
  consumes:
  - type: http
    namespace: terraform-cloud
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-run.yml

Queries Microsoft Graph for General Mills Microsoft 365 license assignments and consumption for IT cost allocation and renewal planning.

naftiko: '0.5'
info:
  label: Microsoft 365 License Utilization Report
  description: Queries Microsoft Graph for General Mills Microsoft 365 license assignments and consumption for IT cost allocation and renewal planning.
  tags:
  - identity
  - microsoft-365
  - reporting
  - it-finance
capability:
  exposes:
  - type: mcp
    namespace: m365-reporting
    port: 8080
    tools:
    - name: get-license-utilization
      description: Query Microsoft Graph for all subscribed Microsoft 365 SKUs and consumed unit counts. Use for monthly IT license chargeback, compliance audits, and renewal planning at General Mills.
      call: msgraph-lic.get-subscribed-skus
      outputParameters:
      - name: skus
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: msgraph-lic
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: subscribed-skus
      path: /subscribedSkus
      operations:
      - name: get-subscribed-skus
        method: GET
Open in Framework → View in Fleet → microsoft-365-license-utilization-report.yml

When a Workday role change is approved, updates Azure AD group membership to reflect the new role and notifies the employee via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Access Provisioner
  description: When a Workday role change is approved, updates Azure AD group membership to reflect the new role and notifies the employee via Microsoft Teams.
  tags:
  - hr
  - identity
  - workday
  - azure-ad
  - microsoft-teams
  - role-change
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID, new role, and Azure AD group ID, update group membership and send a Teams notification to the employee. Use when an internal transfer or promotion is finalized in Workday at General Mills.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee changing roles.
      - name: new_role
        in: body
        type: string
        description: The new job title.
      - name: new_ad_group
        in: body
        type: string
        description: Azure AD group ID for the new role's access.
      steps:
      - name: get-worker
        type: call
        call: workday-role.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: add-to-group
        type: call
        call: azure-ad-role.add-group-member
        with:
          group_id: '{{new_ad_group}}'
          user_id: '{{get-worker.azure_object_id}}'
      - name: notify-employee
        type: call
        call: msteams-role.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          text: Your role has been updated to {{new_role}}. Your system access has been provisioned. Welcome to your new position!
  consumes:
  - type: http
    namespace: workday-role
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /generalmills/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: azure-ad-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_ad_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members/$ref
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
  - type: http
    namespace: msteams-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-access-provisioner.yml

Updates a Salesforce customer account record with new contact, industry, or revenue information from the General Mills CRM team.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Update
  description: Updates a Salesforce customer account record with new contact, industry, or revenue information from the General Mills CRM team.
  tags:
  - crm
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-accounts
    port: 8080
    tools:
    - name: update-customer-account
      description: Given a Salesforce account ID and updated attributes, patch the account record. Use when CRM operations refreshes retailer or distributor account data for the General Mills sales team.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID (18-character SFDC ID).
      - name: industry
        in: body
        type: string
        description: Updated industry classification.
      - name: annual_revenue
        in: body
        type: number
        description: Updated annual revenue estimate.
      - name: phone
        in: body
        type: string
        description: Updated main phone number for the account.
      call: salesforce-crm.update-account
      with:
        account_id: '{{account_id}}'
        industry: '{{industry}}'
        annual_revenue: '{{annual_revenue}}'
        phone: '{{phone}}'
      outputParameters:
      - name: success
        type: boolean
        mapping: $.success
  consumes:
  - type: http
    namespace: salesforce-crm
    baseUri: https://generalmills.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-customer-account-update.yml

Escalates a ServiceNow incident to P1, assigns the on-call engineering group, and broadcasts an alert to the General Mills IT operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Escalation
  description: Escalates a ServiceNow incident to P1, assigns the on-call engineering group, and broadcasts an alert to the General Mills IT operations Microsoft Teams channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-incident-ops
    port: 8080
    tools:
    - name: escalate-to-p1
      description: Given a ServiceNow incident number and escalation reason, update priority to P1, reassign to the on-call group, and post a critical alert to the IT operations Teams channel. Use when an incident is confirmed as business-critical at General Mills.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: escalation_reason
        in: body
        type: string
        description: Reason for the P1 escalation.
      steps:
      - name: update-incident
        type: call
        call: servicenow-itsm.patch-incident
        with:
          number: '{{incident_number}}'
          priority: '1'
          assignment_group: GM_IT_Critical_OnCall
          work_notes: 'P1 escalation: {{escalation_reason}}'
      - name: alert-it-ops
        type: call
        call: msteams-itsm.send-message
        with:
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'P1 ESCALATION: {{incident_number}} — {{escalation_reason}}. Assigned to GM IT Critical On-Call. Immediate response required.'
  consumes:
  - type: http
    namespace: servicenow-itsm
    baseUri: https://generalmills.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: patch-incident
        method: PATCH
  - type: http
    namespace: msteams-itsm
    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
Open in Framework → View in Fleet → servicenow-p1-incident-escalation.yml

Fetches LinkedIn campaign performance analytics for General Mills brand pages and posts a summary to the marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Brand Campaign Performance Digest
  description: Fetches LinkedIn campaign performance analytics for General Mills brand pages and posts a summary to the marketing Microsoft Teams channel.
  tags:
  - marketing
  - linkedin
  - microsoft-teams
  - reporting
  - social
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-campaign
      description: Given a LinkedIn campaign ID and date range, fetch impressions, clicks, and engagement metrics and post a performance summary to the marketing Teams channel. Use for weekly brand and campaign performance reviews.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID to retrieve analytics for.
      - name: start_date
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: get-analytics
        type: call
        call: linkedin-analytics.get-campaign-stats
        with:
          campaign_id: '{{campaign_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-summary
        type: call
        call: msteams-marketing.send-message
        with:
          channel_id: $secrets.teams_marketing_channel_id
          text: 'LinkedIn Campaign {{campaign_id}} ({{start_date}} — {{end_date}}): Impressions={{get-analytics.impressions}}, Clicks={{get-analytics.clicks}}, CTR={{get-analytics.ctr}}%.'
  consumes:
  - type: http
    namespace: linkedin-analytics
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalyticsV2
      inputParameters:
      - name: q
        in: query
        value: analytics
      - name: pivot
        in: query
        value: CAMPAIGN
      operations:
      - name: get-campaign-stats
        method: GET
  - type: http
    namespace: msteams-marketing
    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
Open in Framework → View in Fleet → linkedin-brand-campaign-performance-digest.yml

Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks.

naftiko: '0.5'
info:
  label: Private Label Contract Review Workflow
  description: Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks.
  tags:
  - sales
  - procurement
  - salesforce
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: contract-mgmt
    port: 8080
    tools:
    - name: review-pl-contract
      description: Review a private label contract across CRM, ERP, and project systems.
      inputParameters:
      - name: contract_id
        type: string
        description: Salesforce contract ID.
      steps:
      - name: get-contract
        type: call
        call: salesforce.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: check-pricing
        type: call
        call: sap.get-pricing
        with:
          customer: '{{get-contract.customer_id}}'
          materials: '{{get-contract.product_list}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project_key: CONTRACTS
          summary: 'PL Contract Review: {{get-contract.customer_name}}'
          description: 'Contract value: {{get-contract.total_value}}. Margin: {{check-pricing.margin_pct}}%'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://generalmills.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /sobjects/Contract
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: sap
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing
      path: /data
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: jira
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → private-label-contract-review-workflow.yml

Queries SAP S/4HANA for procurement and operating spend by cost center for a fiscal period for General Mills financial close and budget variance reporting.

naftiko: '0.5'
info:
  label: SAP Cost Center Spend Report
  description: Queries SAP S/4HANA for procurement and operating spend by cost center for a fiscal period for General Mills financial close and budget variance reporting.
  tags:
  - finance
  - erp
  - sap
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: get-spend-by-cost-center
      description: Given a fiscal year, period, and optional cost center code, return total spend actuals from SAP S/4HANA. Use for monthly budget variance reviews, quarterly financial close, and executive cost reporting.
      inputParameters:
      - name: fiscal_year
        in: body
        type: string
        description: The SAP fiscal year (e.g., 2025).
      - name: period
        in: body
        type: string
        description: The fiscal period number (1-12).
      - name: cost_center
        in: body
        type: string
        description: Optional SAP cost center code to filter results.
      call: sap-cca.get-cost-center-actuals
      with:
        fiscal_year: '{{fiscal_year}}'
        period: '{{period}}'
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: total_actuals
        type: number
        mapping: $.d.results[0].AmountInCoCodeCurrency
      - name: currency
        type: string
        mapping: $.d.results[0].CompanyCodeCurrency
  consumes:
  - type: http
    namespace: sap-cca
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/FAC_COSTCENTER_0001
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-actuals
      path: /CostCenterActuals
      inputParameters:
      - name: fiscal_year
        in: query
      - name: period
        in: query
      - name: cost_center
        in: query
      operations:
      - name: get-cost-center-actuals
        method: GET
Open in Framework → View in Fleet → sap-cost-center-spend-report.yml

Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders.

naftiko: '0.5'
info:
  label: Store Level Inventory Replenishment
  description: Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders.
  tags:
  - supply-chain
  - sales
  - snowflake
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: replenishment
    port: 8080
    tools:
    - name: trigger-replenishment
      description: Trigger store replenishment based on POS velocity and DC inventory.
      inputParameters:
      - name: retailer
        type: string
        description: Retailer account name.
      - name: region
        type: string
        description: Sales region.
      steps:
      - name: get-pos-velocity
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RETAIL_WH
          query: SELECT sku, velocity, weeks_of_supply FROM pos WHERE retailer='{{retailer}}' AND region='{{region}}' AND weeks_of_supply<2
      - name: check-dc-stock
        type: call
        call: sap.get-dc-inventory
        with:
          region: '{{region}}'
          skus: '{{get-pos-velocity.skus}}'
      - name: create-order
        type: call
        call: salesforce.create-replenishment
        with:
          retailer: '{{retailer}}'
          items: '{{get-pos-velocity.data}}'
          available: '{{check-dc-stock.levels}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://generalmills.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /data
      operations:
      - name: get-dc-inventory
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://generalmills.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order
      operations:
      - name: create-replenishment
        method: POST
Open in Framework → View in Fleet → store-level-inventory-replenishment.yml

Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams.

naftiko: '0.5'
info:
  label: Waste Reduction Initiative Tracker
  description: Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams.
  tags:
  - manufacturing
  - sustainability
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: waste-reduction
    port: 8080
    tools:
    - name: track-waste-reduction
      description: Track waste reduction progress against targets.
      inputParameters:
      - name: plant_code
        type: string
        description: Plant code.
      - name: initiative_id
        type: string
        description: Jira initiative key.
      steps:
      - name: get-waste-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MFG_WH
          query: SELECT waste_type, current_pct, target_pct FROM waste_tracking WHERE plant='{{plant_code}}'
      - name: update-initiative
        type: call
        call: jira.update-issue
        with:
          issue_key: '{{initiative_id}}'
          comment: 'Current waste: {{get-waste-data.current_total}}%. Target: {{get-waste-data.target_total}}%'
      - name: post-progress
        type: call
        call: msteams.send-message
        with:
          channel_id: sustainability
          text: 'Waste reduction at {{plant_code}}: {{get-waste-data.current_total}}% (target: {{get-waste-data.target_total}}%)'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://generalmills.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: update-issue
        method: PUT
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → waste-reduction-initiative-tracker.yml

Opens a Salesforce case for a retail trade promotion request linked to the customer account, enabling the General Mills trade marketing team to track promotions.

naftiko: '0.5'
info:
  label: Salesforce Trade Promotion Case Creator
  description: Opens a Salesforce case for a retail trade promotion request linked to the customer account, enabling the General Mills trade marketing team to track promotions.
  tags:
  - crm
  - marketing
  - salesforce
  - trade-promotion
capability:
  exposes:
  - type: mcp
    namespace: trade-marketing
    port: 8080
    tools:
    - name: create-promotion-case
      description: Given a Salesforce account ID, promotion type, and start/end dates, create a Salesforce case to track a retail trade promotion. Use when General Mills trade marketing initiates a promotional program with a retail partner.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce retailer account ID.
      - name: promotion_type
        in: body
        type: string
        description: Type of promotion (e.g., price reduction, display feature, coupon).
      - name: start_date
        in: body
        type: string
        description: Promotion start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Promotion end date in YYYY-MM-DD format.
      call: salesforce-promo.create-case
      with:
        account_id: '{{account_id}}'
        subject: 'Trade Promotion: {{promotion_type}} ({{start_date}} to {{end_date}})'
        type: Trade Promotion
      outputParameters:
      - name: case_number
        type: string
        mapping: $.caseNumber
      - name: case_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: salesforce-promo
    baseUri: https://generalmills.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
Open in Framework → View in Fleet → salesforce-trade-promotion-case-creator.yml

Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks.

naftiko: '0.5'
info:
  label: Nutrition Label Compliance Check
  description: Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks.
  tags:
  - quality
  - regulatory
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: label-compliance
    port: 8080
    tools:
    - name: check-nutrition-label
      description: Check nutrition label compliance against regulations.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      - name: target_market
        type: string
        description: Target market country code.
      steps:
      - name: get-recipe
        type: call
        call: sap.get-recipe
        with:
          material: '{{material_number}}'
      - name: check-regs
        type: call
        call: snowflake.execute-query
        with:
          warehouse: REGULATORY_WH
          query: SELECT requirement, compliant FROM label_regs WHERE market='{{target_market}}' AND material='{{material_number}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: REGULATORY
          summary: 'Label compliance: {{material_number}} for {{target_market}}'
          description: 'Non-compliant items: {{check-regs.non_compliant_count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recipes
      path: /data
      operations:
      - name: get-recipe
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://generalmills.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nutrition-label-compliance-check.yml

Queries ServiceNow for the status of the latest scheduled backup job and alerts the General Mills IT operations Teams channel if backup failed or is overdue.

naftiko: '0.5'
info:
  label: ServiceNow Backup Verification Check
  description: Queries ServiceNow for the status of the latest scheduled backup job and alerts the General Mills IT operations Teams channel if backup failed or is overdue.
  tags:
  - itsm
  - operations
  - servicenow
  - microsoft-teams
  - backup
capability:
  exposes:
  - type: mcp
    namespace: backup-verification
    port: 8080
    tools:
    - name: verify-backup-status
      description: Query ServiceNow for the latest backup job record and post a Teams alert summarizing status. Use as part of daily General Mills IT operations checks.
      inputParameters:
      - name: backup_job_name
        in: body
        type: string
        description: The ServiceNow scheduled job name for the backup to verify.
      steps:
      - name: get-backup-record
        type: call
        call: servicenow-bkp.get-backup-record
        with:
          job_name: '{{backup_job_name}}'
      - name: post-status
        type: call
        call: msteams-bkp.send-message
        with:
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'Backup Check — {{backup_job_name}}: Status={{get-backup-record.status}}, Last run={{get-backup-record.last_run_date}}. Investigate if status is not ''Success''.'
  consumes:
  - type: http
    namespace: servicenow-bkp
    baseUri: https://generalmills.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: backup-records
      path: /table/scheduled_job
      inputParameters:
      - name: job_name
        in: query
      operations:
      - name: get-backup-record
        method: GET
  - type: http
    namespace: msteams-bkp
    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
Open in Framework → View in Fleet → servicenow-backup-verification-check.yml

Fetches critical Dependabot security alerts for a General Mills GitHub repository and creates Jira security issues for each unresolved vulnerability.

naftiko: '0.5'
info:
  label: GitHub Repository Security Alert Triage
  description: Fetches critical Dependabot security alerts for a General Mills GitHub repository and creates Jira security issues for each unresolved vulnerability.
  tags:
  - security
  - devops
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: security-triage
    port: 8080
    tools:
    - name: triage-dependabot-alerts
      description: Given a GitHub repository and Jira project key, fetch all open critical Dependabot alerts and create a Jira security issue for each. Use during General Mills security triage cycles or in response to vulnerability disclosures.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for security issues (e.g., SEC).
      steps:
      - name: get-alerts
        type: call
        call: github-sec.list-dependabot-alerts
        with:
          repo: '{{repo}}'
          severity: critical
          state: open
      - name: create-security-issue
        type: call
        call: jira-sec.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Security
          summary: 'Critical Dependabot alerts in {{repo}}: {{get-alerts.total_count}} open'
          description: 'Repository: {{repo}}

            Open critical vulnerabilities: {{get-alerts.total_count}}

            Review: https://github.com/{{repo}}/security/dependabot'
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{repo}}/dependabot/alerts
      inputParameters:
      - name: repo
        in: path
      - name: severity
        in: query
      - name: state
        in: query
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira-sec
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-repository-security-alert-triage.yml

Retrieves employee time off balances from Workday.

naftiko: '0.5'
info:
  label: Workday Time Off Balance Lookup
  description: Retrieves employee time off balances from Workday.
  tags:
  - hr
  - workforce
  - workday
  - time-off
capability:
  exposes:
  - type: mcp
    namespace: hr-time-mgmt
    port: 8080
    tools:
    - name: get-time-off
      description: Look up time off balances in Workday.
      inputParameters:
      - name: employee_id
        type: string
        description: Workday employee ID.
      call: workday.get-time-off
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: vacation
        type: string
        mapping: $.balance.vacation
      - name: sick
        type: string
        mapping: $.balance.sick
  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: /generalmills/workers
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-lookup.yml

Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams.

naftiko: '0.5'
info:
  label: Co-Manufacturer Production Monitoring
  description: Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams.
  tags:
  - manufacturing
  - supply-chain
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: co-mfg
    port: 8080
    tools:
    - name: monitor-co-mfg
      description: Monitor co-manufacturer production output against plans.
      inputParameters:
      - name: co_mfg_id
        type: string
        description: Co-manufacturer identifier.
      - name: period
        type: string
        description: Production period.
      steps:
      - name: get-output
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MFG_WH
          query: SELECT sku, actual_units, planned_units FROM co_mfg_output WHERE mfg_id='{{co_mfg_id}}' AND period='{{period}}'
      - name: get-orders
        type: call
        call: sap.get-orders
        with:
          supplier: '{{co_mfg_id}}'
          period: '{{period}}'
      - name: post-status
        type: call
        call: msteams.send-message
        with:
          channel_id: co-manufacturing
          text: 'Co-mfg {{co_mfg_id}} ({{period}}): Actual {{get-output.total_units}} vs planned {{get-orders.planned_units}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://generalmills.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /data
      operations:
      - name: get-orders
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → co-manufacturer-production-monitoring.yml

Fetches all open Jira issues in the current sprint for a General Mills engineering project and posts a backlog status summary to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Backlog Health Digest
  description: Fetches all open Jira issues in the current sprint for a General Mills engineering project and posts a backlog status summary to the engineering Microsoft Teams channel.
  tags:
  - devops
  - jira
  - microsoft-teams
  - reporting
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: devops-reporting
    port: 8080
    tools:
    - name: digest-sprint-backlog
      description: Given a Jira project key and Teams channel, query open sprint issues and post a backlog health summary. Use for daily stand-up prep or sprint review briefings at General Mills.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key (e.g., TECH, GMILS).
      - name: channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID to post the digest to.
      steps:
      - name: get-issues
        type: call
        call: jira-sprint.search-issues
        with:
          jql: project={{project_key}} AND sprint in openSprints() ORDER BY status ASC
      - name: post-digest
        type: call
        call: msteams-sprint.send-message
        with:
          channel_id: '{{channel_id}}'
          text: 'Sprint Backlog ({{project_key}}): {{get-issues.total}} open — To Do: {{get-issues.todo_count}}, In Progress: {{get-issues.inprogress_count}}, In Review: {{get-issues.review_count}}.'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue-search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams-sprint
    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
Open in Framework → View in Fleet → jira-sprint-backlog-health-digest.yml

Creates a ServiceNow change request for a planned General Mills IT or infrastructure change with risk-based routing.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Creation
  description: Creates a ServiceNow change request for a planned General Mills IT or infrastructure change with risk-based routing.
  tags:
  - itsm
  - change-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: create-change-request
      description: Given change description, risk level, and implementation window, create a ServiceNow change request. Use when planning IT, application, or infrastructure changes in the General Mills environment.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the change.
      - name: risk
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: start_date
        in: body
        type: string
        description: Planned implementation start in ISO 8601 format.
      - name: end_date
        in: body
        type: string
        description: Planned implementation end in ISO 8601 format.
      call: servicenow-chg.create-change
      with:
        short_description: '{{short_description}}'
        risk: '{{risk}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: change_number
        type: string
        mapping: $.result.number
      - name: state
        type: string
        mapping: $.result.state
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://generalmills.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-creation.yml

Creates a new SAP purchase order for a General Mills procurement request, links it to the appropriate cost center, and notifies the requester via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Purchase Order Creation
  description: Creates a new SAP purchase order for a General Mills procurement request, links it to the appropriate cost center, and notifies the requester via Microsoft Teams.
  tags:
  - finance
  - procurement
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: create-purchase-order
      description: Given supplier ID, cost center, item description, and amount, create a SAP S/4HANA purchase order and send a confirmation to the requester via Microsoft Teams. Use when fulfilling General Mills procurement requests.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP vendor/supplier number.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center to charge the purchase to.
      - name: item_description
        in: body
        type: string
        description: Description of the goods or services being purchased.
      - name: amount
        in: body
        type: number
        description: Total purchase order value.
      - name: requester_upn
        in: body
        type: string
        description: Microsoft Teams UPN of the procurement requester.
      steps:
      - name: create-po
        type: call
        call: sap-create-po.create-purchase-order
        with:
          supplier_id: '{{supplier_id}}'
          cost_center: '{{cost_center}}'
          item_description: '{{item_description}}'
          amount: '{{amount}}'
      - name: notify-requester
        type: call
        call: msteams-procure.send-message
        with:
          recipient_upn: '{{requester_upn}}'
          text: 'Purchase order {{create-po.po_number}} created for ${{amount}} against cost center {{cost_center}}. Status: {{create-po.status}}.'
  consumes:
  - type: http
    namespace: sap-create-po
    baseUri: https://generalmills-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
      operations:
      - name: create-purchase-order
        method: POST
  - type: http
    namespace: msteams-procure
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-purchase-order-creation.yml

Triggers a Power BI dataset refresh and posts a dashboard link to the General Mills executive leadership Microsoft Teams channel before leadership briefings.

naftiko: '0.5'
info:
  label: Power BI Executive Reporting Digest
  description: Triggers a Power BI dataset refresh and posts a dashboard link to the General Mills executive leadership Microsoft Teams channel before leadership briefings.
  tags:
  - reporting
  - power-bi
  - microsoft-teams
  - executive
capability:
  exposes:
  - type: mcp
    namespace: exec-reporting
    port: 8080
    tools:
    - name: publish-exec-dashboard
      description: Given Power BI workspace and dataset IDs and a dashboard URL, trigger a refresh and post the dashboard link to the executive Teams channel. Use before weekly leadership briefings or board reporting cycles.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      - name: dashboard_url
        in: body
        type: string
        description: The Power BI dashboard URL to share with leadership.
      steps:
      - name: refresh-dataset
        type: call
        call: powerbi-exec.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: post-link
        type: call
        call: msteams-exec.send-message
        with:
          channel_id: $secrets.teams_exec_channel_id
          text: 'Executive dashboard refreshed and ready for review: {{dashboard_url}} (Request ID: {{refresh-dataset.requestId}})'
  consumes:
  - type: http
    namespace: powerbi-exec
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams-exec
    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
Open in Framework → View in Fleet → power-bi-executive-reporting-digest.yml

Queries Azure Cost Management for General Mills subscription spend anomalies and posts an alert to the FinOps Microsoft Teams channel when thresholds are exceeded.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly Alert Handler
  description: Queries Azure Cost Management for General Mills subscription spend anomalies and posts an alert to the FinOps Microsoft Teams channel when thresholds are exceeded.
  tags:
  - cloud
  - finops
  - azure
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID and spend threshold, query Azure Cost Management and post an alert to the FinOps Teams channel if the threshold is exceeded. Use when responding to Azure cost anomaly notifications.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to audit.
      - name: threshold_usd
        in: body
        type: number
        description: Spend threshold in USD; alert fires when current spend exceeds this.
      steps:
      - name: get-spend
        type: call
        call: azure-cost.query-usage
        with:
          subscription_id: '{{subscription_id}}'
      - name: alert-finops
        type: call
        call: msteams-finops.send-message
        with:
          channel_id: $secrets.teams_finops_channel_id
          text: Azure Cost Alert — Subscription {{subscription_id}} at {{get-spend.total_cost}} {{get-spend.currency}} has crossed the ${{threshold_usd}} threshold. Review the billing dashboard.
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: cost-query
      path: /{{subscription_id}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: query-usage
        method: POST
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-cost-anomaly-alert-handler.yml

Lists members of privileged Azure AD groups for General Mills quarterly access certifications and writes results to a SharePoint audit list.

naftiko: '0.5'
info:
  label: Azure AD Privileged Access Review
  description: Lists members of privileged Azure AD groups for General Mills quarterly access certifications and writes results to a SharePoint audit list.
  tags:
  - identity
  - security
  - azure-ad
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Azure AD group ID and SharePoint site and list IDs, retrieve all group members and write them to the SharePoint access review list. Use quarterly for privileged access certification at General Mills.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Azure AD group ID to audit.
      - name: sharepoint_site_id
        in: body
        type: string
        description: The SharePoint site ID for audit records.
      - name: sharepoint_list_id
        in: body
        type: string
        description: The SharePoint list ID for the review entries.
      steps:
      - name: list-members
        type: call
        call: azure-ad-review.list-group-members
        with:
          group_id: '{{group_id}}'
      - name: write-audit-record
        type: call
        call: sharepoint-audit.create-list-item
        with:
          site_id: '{{sharepoint_site_id}}'
          list_id: '{{sharepoint_list_id}}'
          members: '{{list-members.value}}'
  consumes:
  - type: http
    namespace: azure-ad-review
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_ad_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-group-members
        method: GET
  - type: http
    namespace: sharepoint-audit
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: list-items
      path: /sites/{{site_id}}/lists/{{list_id}}/items
      inputParameters:
      - name: site_id
        in: path
      - name: list_id
        in: path
      operations:
      - name: create-list-item
        method: POST
Open in Framework → View in Fleet → azure-ad-privileged-access-review.yml

Looks up a General Mills SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency.

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Lookup
  description: Looks up a General Mills SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency.
  tags:
  - finance
  - erp
  - sap
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP PO number, return status, vendor name, total value, and currency. Use when auditing procurement spend, resolving supplier invoicing queries, or preparing for financial close.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP S/4HANA purchase order number.
      call: sap-s4.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: number
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap-s4
    baseUri: https://generalmills-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
Open in Framework → View in Fleet → sap-s-4hana-purchase-order-lookup.yml

When a GitHub Actions workflow fails on the main branch, creates a Jira bug and posts an alert to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Actions CI Failure Handler
  description: When a GitHub Actions workflow fails on the main branch, creates a Jira bug and posts an alert to the engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions failure event, create a Jira Bug and post an alert to the engineering Teams channel. Use when a protected-branch workflow fails at General Mills.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID.
      - name: branch
        in: body
        type: string
        description: The branch the workflow ran on.
      - name: run_url
        in: body
        type: string
        description: Direct URL to the failed workflow run.
      steps:
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI] {{repo}} / {{branch}} — {{workflow_name}} failed'
          description: 'Run {{run_id}} failed on {{branch}}.

            Workflow: {{workflow_name}}

            URL: {{run_url}}'
      - name: notify-engineering
        type: call
        call: msteams-eng.send-message
        with:
          channel_id: $secrets.teams_engineering_channel_id
          text: 'CI Failure: {{repo}} ({{branch}}) — {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://generalmills.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-failure-handler.yml

Fetches open Salesforce opportunities above a threshold for a General Mills sales region and posts a pipeline summary to the sales Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Digest
  description: Fetches open Salesforce opportunities above a threshold for a General Mills sales region and posts a pipeline summary to the sales Microsoft Teams channel.
  tags:
  - crm
  - sales
  - salesforce
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-pipeline
    port: 8080
    tools:
    - name: digest-opportunity-pipeline
      description: Given a sales region and minimum deal value, query Salesforce for open opportunities and post a pipeline summary to the sales Teams channel. Use for weekly pipeline reviews and sales leadership briefings.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Sales region to filter opportunities (e.g., North America, EMEA).
      - name: min_amount
        in: body
        type: number
        description: Minimum opportunity value in USD to include.
      steps:
      - name: query-pipeline
        type: call
        call: salesforce-pipeline.query-opportunities
        with:
          region: '{{region}}'
          min_amount: '{{min_amount}}'
      - name: post-summary
        type: call
        call: msteams-pipeline.send-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'Sales Pipeline ({{region}}, >${{min_amount}}): {{query-pipeline.total_count}} opportunities totaling ${{query-pipeline.total_value}}.'
  consumes:
  - type: http
    namespace: salesforce-pipeline
    baseUri: https://generalmills.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams-pipeline
    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
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-digest.yml

Returns approval status and date coverage for a General Mills employee time-off request from Workday.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Status Lookup
  description: Returns approval status and date coverage for a General Mills employee time-off request from Workday.
  tags:
  - hr
  - workday
  - time-off
capability:
  exposes:
  - type: mcp
    namespace: hr-time
    port: 8080
    tools:
    - name: get-time-off-request
      description: Given a Workday worker ID and time-off request ID, return current approval status and covered dates. Use when employees or managers need to verify leave approval status.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the employee.
      - name: request_id
        in: body
        type: string
        description: The Workday time-off request ID.
      call: workday-pto.get-time-off-request
      with:
        worker_id: '{{worker_id}}'
        request_id: '{{request_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.overallStatus
      - name: start_date
        type: string
        mapping: $.data.startDate
      - name: end_date
        type: string
        mapping: $.data.endDate
  consumes:
  - type: http
    namespace: workday-pto
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off-requests
      path: /generalmills/workers/{{worker_id}}/timeOffRequests/{{request_id}}
      inputParameters:
      - name: worker_id
        in: path
      - name: request_id
        in: path
      operations:
      - name: get-time-off-request
        method: GET
Open in Framework → View in Fleet → workday-time-off-request-status-lookup.yml

When a Salesforce opportunity closes as Closed-Won, opens a ServiceNow customer onboarding ticket and notifies the account owner via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Customer Onboarding Trigger
  description: When a Salesforce opportunity closes as Closed-Won, opens a ServiceNow customer onboarding ticket and notifies the account owner via Microsoft Teams.
  tags:
  - crm
  - sales
  - salesforce
  - servicenow
  - customer-onboarding
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: trigger-customer-onboarding
      description: Given a Salesforce opportunity ID, retrieve account details, open a ServiceNow onboarding ticket, and notify the account owner via Teams. Use when a new General Mills retail or food service customer deal is closed.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID that was closed-won.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-won.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: open-onboard-ticket
        type: call
        call: servicenow-won.create-incident
        with:
          category: customer_onboarding
          short_description: 'New customer onboarding: {{get-opportunity.account_name}}'
          description: Opportunity {{opportunity_id}}, value ${{get-opportunity.amount}}, closed {{get-opportunity.close_date}}
      - name: notify-owner
        type: call
        call: msteams-won.send-message
        with:
          recipient_upn: '{{get-opportunity.owner_email}}'
          text: 'Opportunity {{opportunity_id}} ({{get-opportunity.account_name}}) is Closed-Won! Onboarding ticket: {{open-onboard-ticket.number}}. Implementation begins.'
  consumes:
  - type: http
    namespace: salesforce-won
    baseUri: https://generalmills.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: servicenow-won
    baseUri: https://generalmills.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-won
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-customer-onboarding-trigger.yml

Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the PO, and notifies the approving manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Supplier Invoice Submission
  description: Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the PO, and notifies the approving manager via Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ap-processing
    port: 8080
    tools:
    - name: submit-supplier-invoice
      description: Given invoice details and a linked SAP PO number, create the invoice record in SAP S/4HANA and notify the finance manager in Microsoft Teams for approval. Use during General Mills accounts-payable processing.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP PO number this invoice is billed against.
      - name: invoice_number
        in: body
        type: string
        description: The supplier invoice number.
      - name: amount
        in: body
        type: number
        description: Invoice total in the PO currency.
      - name: approver_upn
        in: body
        type: string
        description: Microsoft Teams UPN of the finance approver.
      steps:
      - name: create-invoice
        type: call
        call: sap-ap.create-supplier-invoice
        with:
          po_number: '{{po_number}}'
          invoice_number: '{{invoice_number}}'
          amount: '{{amount}}'
      - name: notify-approver
        type: call
        call: msteams-ap.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Invoice {{invoice_number}} for SAP PO {{po_number}} (${{amount}}) has been submitted. Invoice ID: {{create-invoice.invoice_id}}. Please review and approve in SAP.'
  consumes:
  - type: http
    namespace: sap-ap
    baseUri: https://generalmills-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: supplier-invoices
      path: /A_SupplierInvoice
      operations:
      - name: create-supplier-invoice
        method: POST
  - type: http
    namespace: msteams-ap
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-supplier-invoice-submission.yml

Triggers an on-demand Power BI dataset refresh for General Mills consumer brand performance dashboards used by the marketing and finance teams.

naftiko: '0.5'
info:
  label: Power BI Consumer Brand Dashboard Refresh
  description: Triggers an on-demand Power BI dataset refresh for General Mills consumer brand performance dashboards used by the marketing and finance teams.
  tags:
  - data
  - analytics
  - power-bi
  - marketing
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: refresh-brand-dashboard
      description: Given a Power BI workspace ID and dataset ID, trigger an on-demand dataset refresh. Use when consumer brand or retail sales data must be reflected in dashboards outside the scheduled refresh window.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      call: powerbi.refresh-dataset
      with:
        workspace_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-consumer-brand-dashboard-refresh.yml

Updates product pricing in SAP, syncs to BigCommerce storefront, logs changes in Snowflake audit trail, and notifies sales teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Global Pricing Update Orchestrator
  description: Updates product pricing in SAP, syncs to BigCommerce storefront, logs changes in Snowflake audit trail, and notifies sales teams via Microsoft Teams.
  tags:
  - pricing
  - sap
  - bigcommerce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-update
    port: 8080
    tools:
    - name: update-pricing
      description: Orchestrate global pricing update across SAP, BigCommerce, Snowflake, and Teams.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: new_price
        in: body
        type: string
        description: The new price.
      - name: region
        in: body
        type: string
        description: The pricing region.
      steps:
      - name: update-sap-price
        type: call
        call: sap.update-pricing
        with:
          sku: '{{product_sku}}'
          price: '{{new_price}}'
          region: '{{region}}'
      - name: sync-storefront
        type: call
        call: bigcommerce.update-product-price
        with:
          sku: '{{product_sku}}'
          price: '{{new_price}}'
      - name: log-change
        type: call
        call: snowflake.insert-audit
        with:
          table: PRICING_AUDIT
          sku: '{{product_sku}}'
          new_price: '{{new_price}}'
          region: '{{region}}'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-team
          text: 'Pricing updated for {{product_sku}} in {{region}}: ${{new_price}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPRICING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing
      path: /PricingSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: update-pricing
        method: PATCH
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: update-product-price
        method: PUT
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-audit
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → global-pricing-update-orchestrator.yml

Creates a Facebook ad campaign, syncs audience from Salesforce, uploads creative assets from Box, and tracks performance in Google Sheets.

naftiko: '0.5'
info:
  label: Facebook Ad Campaign Orchestrator
  description: Creates a Facebook ad campaign, syncs audience from Salesforce, uploads creative assets from Box, and tracks performance in Google Sheets.
  tags:
  - advertising
  - facebook
  - salesforce
  - box
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: fb-ad-campaign
    port: 8080
    tools:
    - name: launch-ad-campaign
      description: Orchestrate Facebook ad campaign across Facebook, Salesforce, Box, and Google Sheets.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: budget
        in: body
        type: string
        description: The daily budget.
      steps:
      - name: create-campaign
        type: call
        call: facebook.create-campaign
        with:
          name: '{{campaign_name}}'
          daily_budget: '{{budget}}'
          objective: BRAND_AWARENESS
      - name: sync-audience
        type: call
        call: salesforce.get-audience
        with:
          segment: toy-buyers
      - name: upload-creatives
        type: call
        call: box.get-folder-items
        with:
          folder_id: ad-creatives
      - name: setup-tracking
        type: call
        call: gsheets.create-sheet
        with:
          spreadsheet_id: ad-performance
          title: '{{campaign_name}}'
  consumes:
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: campaigns
      path: /act_hasbro/campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: audiences
      path: /sobjects/Campaign
      operations:
      - name: get-audience
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders/{{folder_id}}/items
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: get-folder-items
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: sheets
      path: /{{spreadsheet_id}}/sheets
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: create-sheet
        method: POST
Open in Framework → View in Fleet → facebook-ad-campaign-orchestrator.yml

Sends a formatted email via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Outlook Email Sender
  description: Sends a formatted email via Microsoft Outlook.
  tags:
  - communications
  - email
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: email-sending
    port: 8080
    tools:
    - name: send-email
      description: Send an email via Microsoft Outlook.
      inputParameters:
      - name: to_address
        in: body
        type: string
        description: Recipient email.
      - name: subject
        in: body
        type: string
        description: Email subject.
      - name: body_text
        in: body
        type: string
        description: Email body.
      call: outlook.send-mail
      with:
        to: '{{to_address}}'
        subject: '{{subject}}'
        body: '{{body_text}}'
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-email-sender.yml

Triggers a Unity Cloud Build for a Hasbro digital game, waits for completion, uploads the artifact to Amazon S3, and notifies the game dev team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Unity Game Build Pipeline
  description: Triggers a Unity Cloud Build for a Hasbro digital game, waits for completion, uploads the artifact to Amazon S3, and notifies the game dev team in Microsoft Teams.
  tags:
  - gaming
  - development
  - unity
  - amazon-s3
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: game-builds
    port: 8080
    tools:
    - name: trigger-game-build
      description: Trigger a Unity Cloud Build and distribute the artifact.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Unity Cloud project ID.
      - name: build_target
        in: body
        type: string
        description: The build target (e.g. ios, android, webgl).
      steps:
      - name: start-build
        type: call
        call: unity.start-build
        with:
          project_id: '{{project_id}}'
          build_target: '{{build_target}}'
      - name: upload-artifact
        type: call
        call: s3.put-object
        with:
          bucket: hasbro-game-builds
          key: '{{project_id}}/{{build_target}}/{{start-build.build_number}}.zip'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: game-dev
          text: 'Unity build #{{start-build.build_number}} for {{project_id}} ({{build_target}}) complete. S3: s3://hasbro-game-builds/{{project_id}}/{{build_target}}/{{start-build.build_number}}.zip'
  consumes:
  - type: http
    namespace: unity
    baseUri: https://build-api.cloud.unity3d.com/api/v1
    authentication:
      type: bearer
      token: $secrets.unity_token
    resources:
    - name: builds
      path: /orgs/hasbro/projects/{{project_id}}/buildtargets/{{build_target}}/builds
      inputParameters:
      - name: project_id
        in: path
      - name: build_target
        in: path
      operations:
      - name: start-build
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → unity-game-build-pipeline.yml

On trade show registration, creates a Salesforce campaign, schedules meetings via Zoom, uploads booth materials to SharePoint, and sends invitations via MailChimp.

naftiko: '0.5'
info:
  label: Trade Show Event Coordinator
  description: On trade show registration, creates a Salesforce campaign, schedules meetings via Zoom, uploads booth materials to SharePoint, and sends invitations via MailChimp.
  tags:
  - events
  - salesforce
  - zoom
  - sharepoint
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: trade-show
    port: 8080
    tools:
    - name: coordinate-trade-show
      description: Orchestrate trade show coordination across Salesforce, Zoom, SharePoint, and MailChimp.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: The trade show event name.
      - name: event_date
        in: body
        type: string
        description: The event date.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{event_name}}'
          type: Trade Show
          start_date: '{{event_date}}'
      - name: schedule-meetings
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{event_name}} - Buyer Meetings'
          start_time: '{{event_date}}T09:00:00Z'
      - name: upload-materials
        type: call
        call: sharepoint.upload-file
        with:
          site: marketing
          folder: TradeShows/{{event_name}}
      - name: send-invitations
        type: call
        call: mailchimp.send-campaign
        with:
          subject: Join Hasbro at {{event_name}}
          list_id: trade-show-contacts
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site}}/drive/root:/{{folder}}
      inputParameters:
      - name: site
        in: path
      - name: folder
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → trade-show-event-coordinator.yml

Retrieves a product from the SAP product catalog by SKU, returning product name, category, MSRP, availability status, and age rating.

naftiko: '0.5'
info:
  label: Product Catalog Lookup
  description: Retrieves a product from the SAP product catalog by SKU, returning product name, category, MSRP, availability status, and age rating.
  tags:
  - product
  - catalog
  - sap
capability:
  exposes:
  - type: mcp
    namespace: product-catalog
    port: 8080
    tools:
    - name: get-product
      description: Look up a Hasbro product by SKU from SAP.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU code.
      call: sap.get-product
      with:
        sku: '{{product_sku}}'
      outputParameters:
      - name: product_name
        type: string
        mapping: $.d.ProductName
      - name: category
        type: string
        mapping: $.d.Category
      - name: msrp
        type: string
        mapping: $.d.MSRP
      - name: availability
        type: string
        mapping: $.d.AvailabilityStatus
      - name: age_rating
        type: string
        mapping: $.d.AgeRating
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → product-catalog-lookup.yml

Retrieves product details from SAP, creates a photography task in Asana, uploads assets to Google Drive, and publishes to the BigCommerce product page.

naftiko: '0.5'
info:
  label: Product Photography Workflow
  description: Retrieves product details from SAP, creates a photography task in Asana, uploads assets to Google Drive, and publishes to the BigCommerce product page.
  tags:
  - creative
  - sap
  - asana
  - google-drive
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: product-photography
    port: 8080
    tools:
    - name: manage-photography
      description: Orchestrate product photography workflow across SAP, Asana, Google Drive, and BigCommerce.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      steps:
      - name: get-product
        type: call
        call: sap.get-product
        with:
          sku: '{{product_sku}}'
      - name: create-task
        type: call
        call: asana.create-task
        with:
          name: 'Photography: {{get-product.ProductName}}'
          project: product-photography
      - name: create-folder
        type: call
        call: gdrive.create-folder
        with:
          name: '{{product_sku}}_photos'
          parent: product-assets
      - name: update-listing
        type: call
        call: bigcommerce.update-product-images
        with:
          sku: '{{product_sku}}'
          folder_url: '{{create-folder.webViewLink}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-product
        method: GET
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: files
      path: /files
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: update-product-images
        method: PUT
Open in Framework → View in Fleet → product-photography-workflow.yml

On employee departure, deactivates the Workday profile, revokes access in Azure Active Directory, creates an IT ticket in ServiceNow, and archives documents in Box.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestrator
  description: On employee departure, deactivates the Workday profile, revokes access in Azure Active Directory, creates an IT ticket in ServiceNow, and archives documents in Box.
  tags:
  - hr
  - workday
  - azure-active-directory
  - servicenow
  - box
capability:
  exposes:
  - type: mcp
    namespace: employee-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: Orchestrate employee offboarding across Workday, Azure AD, ServiceNow, and Box.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee ID.
      - name: last_day
        in: body
        type: string
        description: The last working day.
      steps:
      - name: deactivate-workday
        type: call
        call: workday.deactivate-worker
        with:
          id: '{{employee_id}}'
          termination_date: '{{last_day}}'
      - name: revoke-access
        type: call
        call: azuread.disable-user
        with:
          employee_id: '{{employee_id}}'
      - name: create-it-ticket
        type: call
        call: servicenow.create-request
        with:
          type: Offboarding
          description: 'Offboard employee {{employee_id}}. Last day: {{last_day}}'
      - name: archive-docs
        type: call
        call: box.move-folder
        with:
          source: employees/{{employee_id}}
          destination: archived-employees/{{employee_id}}
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/hasbro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /Human_Resources/Workers/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: deactivate-worker
        method: PATCH
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders/{{source}}
      inputParameters:
      - name: source
        in: path
      operations:
      - name: move-folder
        method: PUT
Open in Framework → View in Fleet → employee-offboarding-orchestrator.yml

On safety recall initiation, creates a ServiceNow incident, notifies the product safety team via Slack, updates the SAP product status, and sends retailer notifications through Microsoft Outlook.

naftiko: '0.5'
info:
  label: Toy Safety Recall Orchestrator
  description: On safety recall initiation, creates a ServiceNow incident, notifies the product safety team via Slack, updates the SAP product status, and sends retailer notifications through Microsoft Outlook.
  tags:
  - safety
  - servicenow
  - slack
  - sap
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: safety-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Orchestrate a toy safety recall across ServiceNow, Slack, SAP, and Outlook.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The affected product SKU.
      - name: recall_reason
        in: body
        type: string
        description: The reason for the recall.
      - name: severity
        in: body
        type: string
        description: The severity level (low, medium, high, critical).
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Safety Recall: {{product_sku}} - {{recall_reason}}'
          urgency: '{{severity}}'
          category: Product Safety
      - name: notify-safety-team
        type: call
        call: slack.post-message
        with:
          channel: product-safety
          text: 'RECALL ALERT: {{product_sku}} - {{recall_reason}}. Severity: {{severity}}. Incident: {{create-incident.number}}'
      - name: update-product-status
        type: call
        call: sap.update-product
        with:
          sku: '{{product_sku}}'
          status: RECALLED
      - name: notify-retailers
        type: call
        call: outlook.send-email
        with:
          to: retail-partners@hasbro.com
          subject: 'Product Recall Notice: {{product_sku}}'
          body: 'A recall has been initiated for {{product_sku}} due to {{recall_reason}}. Please remove from shelves immediately. Reference: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: update-product
        method: PATCH
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → toy-safety-recall-orchestrator.yml

Archives completed product assets from SharePoint to Box for long-term retention.

naftiko: '0.5'
info:
  label: Box Asset Archive
  description: Archives completed product assets from SharePoint to Box for long-term retention.
  tags:
  - document-management
  - archival
  - sharepoint
  - box
capability:
  exposes:
  - type: mcp
    namespace: asset-archival
    port: 8080
    tools:
    - name: archive-to-box
      description: Move a SharePoint asset to Box for archival.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: file_path
        in: body
        type: string
        description: File path in SharePoint.
      - name: box_folder_id
        in: body
        type: string
        description: Target Box folder ID.
      steps:
      - name: get-file
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          file_path: '{{file_path}}'
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: '{{box_folder_id}}'
          file_name: '{{file_path}}'
          content: '{{get-file.content}}'
  consumes:
  - 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:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file-content
        method: GET
  - 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
Open in Framework → View in Fleet → box-asset-archive.yml

Pulls campaign performance data from Adobe Analytics, enriches with Salesforce campaign details, and publishes a summary to Confluence.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Analyzer
  description: Pulls campaign performance data from Adobe Analytics, enriches with Salesforce campaign details, and publishes a summary to Confluence.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: campaign-analytics
    port: 8080
    tools:
    - name: analyze-campaign
      description: Analyze a marketing campaign by combining Adobe Analytics and Salesforce data.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      steps:
      - name: get-sf-campaign
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-analytics
        type: call
        call: adobe-analytics.get-report
        with:
          rsid: '{{report_suite_id}}'
          campaign_code: '{{get-sf-campaign.Campaign_Code__c}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: MKT
          title: 'Campaign Report: {{get-sf-campaign.Name}}'
          body: 'Impressions: {{get-analytics.impressions}}. Clicks: {{get-analytics.clicks}}. Conversions: {{get-analytics.conversions}}. ROI: {{get-analytics.roi}}. SF Leads: {{get-sf-campaign.NumberOfLeads}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - 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
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-analyzer.yml

Retrieves real-time inventory levels from SAP for a product SKU at a specified distribution center, returning quantity on hand, reserved, and available.

naftiko: '0.5'
info:
  label: Retail Inventory Check
  description: Retrieves real-time inventory levels from SAP for a product SKU at a specified distribution center, returning quantity on hand, reserved, and available.
  tags:
  - retail
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory-management
    port: 8080
    tools:
    - name: check-inventory
      description: Check inventory levels for a product at a distribution center.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: warehouse_code
        in: body
        type: string
        description: The distribution center code.
      call: sap.get-inventory
      with:
        sku: '{{product_sku}}'
        warehouse: '{{warehouse_code}}'
      outputParameters:
      - name: on_hand
        type: integer
        mapping: $.d.QuantityOnHand
      - name: reserved
        type: integer
        mapping: $.d.QuantityReserved
      - name: available
        type: integer
        mapping: $.d.QuantityAvailable
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /InventorySet(SKU='{{sku}}',Warehouse='{{warehouse}}')
      inputParameters:
      - name: sku
        in: path
      - name: warehouse
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → retail-inventory-check.yml

Pulls new product data from SAP, creates a MailChimp email campaign, and sends to the subscriber list.

naftiko: '0.5'
info:
  label: MailChimp Product Newsletter
  description: Pulls new product data from SAP, creates a MailChimp email campaign, and sends to the subscriber list.
  tags:
  - marketing
  - newsletter
  - mailchimp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: product-newsletter
    port: 8080
    tools:
    - name: send-product-newsletter
      description: Create and send a product newsletter via MailChimp.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: The MailChimp audience list ID.
      - name: product_category
        in: body
        type: string
        description: The product category to feature.
      steps:
      - name: get-new-products
        type: call
        call: sap.get-new-products
        with:
          category: '{{product_category}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: '{{list_id}}'
          subject: 'New from Hasbro: {{product_category}}'
          body: 'Check out {{get-new-products.count}} new products in {{product_category}}! Featured: {{get-new-products.featured_name}} - {{get-new-products.featured_description}}.'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_id: '{{create-campaign.id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: new-products
      path: /NewProductSet?$filter=Category eq '{{category}}'
      inputParameters:
      - name: category
        in: query
      operations:
      - name: get-new-products
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
    - name: campaign-actions
      path: /campaigns/{{campaign_id}}/actions/send
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-product-newsletter.yml

Queries expiring contracts from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets.

naftiko: '0.5'
info:
  label: Contract Renewal Reminder Pipeline
  description: Queries expiring contracts from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets.
  tags:
  - legal
  - salesforce
  - jira
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: process-renewals
      description: Orchestrate contract renewal reminders across Salesforce, Jira, Outlook, and Google Sheets.
      inputParameters:
      - name: days_before_expiry
        in: body
        type: string
        description: Days before expiry to trigger reminders.
      steps:
      - name: get-expiring
        type: call
        call: salesforce.query-contracts
        with:
          filter: expiring_within_days:{{days_before_expiry}}
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: LEGAL
          summary: Contract Renewal Required
          type: Task
      - name: send-reminders
        type: call
        call: outlook.send-email
        with:
          to: legal-team@hasbro.com
          subject: Contract Renewals Due Within {{days_before_expiry}} Days
          body: '{{get-expiring.count}} contracts require renewal. Jira: {{create-tasks.key}}'
      - name: log-renewals
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: contract-tracker
          values: '{{get-expiring.contracts}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /query?q=SELECT+Id,Name+FROM+Contract
      operations:
      - name: query-contracts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    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: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → contract-renewal-reminder-pipeline.yml

Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name, coverage level, and effective date.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Lookup
  description: Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name, coverage level, and effective date.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday-benefits
    port: 8080
    tools:
    - name: get-benefits
      description: Look up employee benefits enrollment in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-benefits
      with:
        id: '{{employee_id}}'
      outputParameters:
      - name: plan_name
        type: string
        mapping: $.Benefit_Plan
      - name: coverage_level
        type: string
        mapping: $.Coverage_Level
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/hasbro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefits
      path: /Benefits/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-lookup.yml

Uploads video to YouTube, creates a social post in HubSpot, updates content calendar in Airtable, and shares the link via Microsoft Teams.

naftiko: '0.5'
info:
  label: YouTube Brand Content Pipeline
  description: Uploads video to YouTube, creates a social post in HubSpot, updates content calendar in Airtable, and shares the link via Microsoft Teams.
  tags:
  - content
  - youtube
  - hubspot
  - airtable
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: youtube-content
    port: 8080
    tools:
    - name: publish-brand-video
      description: Orchestrate YouTube brand content publishing across YouTube, HubSpot, Airtable, and Teams.
      inputParameters:
      - name: video_title
        in: body
        type: string
        description: The video title.
      - name: brand
        in: body
        type: string
        description: The brand name.
      steps:
      - name: upload-video
        type: call
        call: youtube.upload-video
        with:
          title: '{{video_title}}'
          category: Entertainment
      - name: create-social
        type: call
        call: hubspot.create-social-post
        with:
          content: 'Watch now: {{video_title}} - {{upload-video.url}}'
          campaign: '{{brand}}'
      - name: update-calendar
        type: call
        call: airtable.create-record
        with:
          table: ContentCalendar
          title: '{{video_title}}'
          url: '{{upload-video.url}}'
          status: Published
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: content-team
          text: 'New {{brand}} video published: {{video_title}} - {{upload-video.url}}'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/upload/youtube/v3
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: videos
      path: /videos?part=snippet,status
      operations:
      - name: upload-video
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social-posts
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-social-post
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v0/appHasbro
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /ContentCalendar
      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: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → youtube-brand-content-pipeline.yml

Retrieves product safety test results from SAP, checks against compliance requirements, and creates a ServiceNow task if any test fails.

naftiko: '0.5'
info:
  label: Toy Safety Compliance Checker
  description: Retrieves product safety test results from SAP, checks against compliance requirements, and creates a ServiceNow task if any test fails.
  tags:
  - compliance
  - safety
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: safety-compliance
    port: 8080
    tools:
    - name: check-safety-compliance
      description: Check product safety test results and flag failures.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU to check.
      steps:
      - name: get-test-results
        type: call
        call: sap.get-safety-tests
        with:
          sku: '{{product_sku}}'
      - name: create-task
        type: call
        call: servicenow.create-record
        with:
          table: u_compliance_tasks
          short_description: 'Safety review: {{product_sku}} - {{get-test-results.failed_count}} failures'
          description: 'Product {{product_sku}} has {{get-test-results.failed_count}} failed safety tests. Categories: {{get-test-results.failed_categories}}. Tested: {{get-test-results.test_date}}.'
          assigned_group: Product_Safety_Team
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_SAFETY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: safety-tests
      path: /SafetyTestSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-safety-tests
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → toy-safety-compliance-checker.yml

Retrieves marketing content from SharePoint, translates via Azure Cognitive Services, uploads localized versions to Google Drive, and notifies regional teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Content Localization Pipeline
  description: Retrieves marketing content from SharePoint, translates via Azure Cognitive Services, uploads localized versions to Google Drive, and notifies regional teams via Microsoft Teams.
  tags:
  - localization
  - sharepoint
  - microsoft-azure
  - google-drive
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: content-localization
    port: 8080
    tools:
    - name: localize-content
      description: Orchestrate content localization across SharePoint, Azure, Google Drive, and Teams.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document ID.
      - name: target_language
        in: body
        type: string
        description: The target language code.
      steps:
      - name: get-content
        type: call
        call: sharepoint.get-document
        with:
          id: '{{document_id}}'
      - name: translate
        type: call
        call: azure-translate.translate-text
        with:
          text: '{{get-content.body}}'
          to: '{{target_language}}'
      - name: upload-localized
        type: call
        call: gdrive.upload-file
        with:
          folder: Localized/{{target_language}}
          content: '{{translate.translated_text}}'
      - name: notify-region
        type: call
        call: msteams.send-message
        with:
          channel_id: regional-marketing
          text: 'Localized content ready for {{target_language}}: {{upload-localized.webViewLink}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/hasbro
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /drive/items/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: azure-translate
    baseUri: https://api.cognitive.microsofttranslator.com
    authentication:
      type: bearer
      token: $secrets.azure_translate_key
    resources:
    - name: translate
      path: /translate?api-version=3.0&to={{to}}
      inputParameters:
      - name: to
        in: path
      operations:
      - name: translate-text
        method: POST
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: files
      path: /files?uploadType=multipart
      operations:
      - name: upload-file
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → content-localization-pipeline.yml

Enrolls customers in loyalty via Salesforce, creates welcome email in MailChimp, provisions points in Stripe, and tracks enrollment in Snowflake.

naftiko: '0.5'
info:
  label: Customer Loyalty Program Pipeline
  description: Enrolls customers in loyalty via Salesforce, creates welcome email in MailChimp, provisions points in Stripe, and tracks enrollment in Snowflake.
  tags:
  - loyalty
  - salesforce
  - mailchimp
  - stripe
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: loyalty-program
    port: 8080
    tools:
    - name: enroll-loyalty
      description: Orchestrate loyalty program enrollment across Salesforce, MailChimp, Stripe, and Snowflake.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The customer email.
      - name: tier
        in: body
        type: string
        description: The loyalty tier.
      steps:
      - name: create-contact
        type: call
        call: salesforce.create-contact
        with:
          email: '{{customer_email}}'
          loyalty_tier: '{{tier}}'
      - name: send-welcome
        type: call
        call: mailchimp.send-automation
        with:
          workflow: loyalty-welcome
          email: '{{customer_email}}'
      - name: provision-points
        type: call
        call: stripe.create-customer
        with:
          email: '{{customer_email}}'
          metadata: '{"loyalty_tier":"{{tier}}"}'
      - name: log-enrollment
        type: call
        call: snowflake.insert-data
        with:
          table: LOYALTY_ENROLLMENTS
          email: '{{customer_email}}'
          tier: '{{tier}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: automations
      path: /automations
      operations:
      - name: send-automation
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: customers
      path: /customers
      operations:
      - name: create-customer
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
Open in Framework → View in Fleet → customer-loyalty-program-pipeline.yml

Retrieves application performance metrics from New Relic by application ID, returning response time, error rate, and throughput.

naftiko: '0.5'
info:
  label: New Relic Application Performance Lookup
  description: Retrieves application performance metrics from New Relic by application ID, returning response time, error rate, and throughput.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: newrelic-apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Look up application performance metrics in New Relic.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-app
      with:
        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: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{id}}.json
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-application-performance-lookup.yml

Aggregates supplier delivery data from SAP, calculates scores in Snowflake, generates scorecards in Google Sheets, and distributes via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Supplier Performance Scorecard Pipeline
  description: Aggregates supplier delivery data from SAP, calculates scores in Snowflake, generates scorecards in Google Sheets, and distributes via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - snowflake
  - google-sheets
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: supplier-scorecard
    port: 8080
    tools:
    - name: generate-scorecard
      description: Orchestrate supplier performance scorecard generation across SAP, Snowflake, Google Sheets, and Outlook.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The supplier ID.
      - name: period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: get-delivery-data
        type: call
        call: sap.get-supplier-deliveries
        with:
          supplier: '{{supplier_id}}'
          period: '{{period}}'
      - name: calculate-scores
        type: call
        call: snowflake.run-scoring
        with:
          supplier: '{{supplier_id}}'
          data: '{{get-delivery-data.results}}'
      - name: create-scorecard
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Scorecard - {{supplier_id}} - {{period}}
      - name: distribute
        type: call
        call: outlook.send-email
        with:
          to: procurement@hasbro.com
          subject: 'Supplier Scorecard: {{supplier_id}} - {{period}}'
          body: 'Score: {{calculate-scores.overall_score}}. Report: {{create-scorecard.spreadsheetUrl}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSUPPLIER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /DeliverySet?$filter=Supplier eq '{{supplier}}'
      inputParameters:
      - name: supplier
        in: path
      operations:
      - name: get-supplier-deliveries
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-scoring
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → supplier-performance-scorecard-pipeline.yml

Posts job listings to LinkedIn, syncs applicants to Workday, creates interview schedules in Zoom, and notifies hiring managers via Slack.

naftiko: '0.5'
info:
  label: Talent Acquisition Pipeline
  description: Posts job listings to LinkedIn, syncs applicants to Workday, creates interview schedules in Zoom, and notifies hiring managers via Slack.
  tags:
  - recruiting
  - linkedin
  - workday
  - zoom
  - slack
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: manage-hiring
      description: Orchestrate talent acquisition across LinkedIn, Workday, Zoom, and Slack.
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: The job title.
      - name: department
        in: body
        type: string
        description: The department.
      steps:
      - name: post-job
        type: call
        call: linkedin.create-job-post
        with:
          title: '{{job_title}}'
          department: '{{department}}'
          company: Hasbro
      - name: create-requisition
        type: call
        call: workday.create-requisition
        with:
          title: '{{job_title}}'
          department: '{{department}}'
      - name: setup-interviews
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Interview: {{job_title}}'
          type: scheduled
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: hiring-{{department}}
          text: 'Job posted: {{job_title}}. LinkedIn: {{post-job.url}}. Requisition: {{create-requisition.id}}'
  consumes:
  - 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-post
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/hasbro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /Recruiting/Job_Requisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → talent-acquisition-pipeline.yml

Queries SAP warehouse utilization, cross-references demand forecasts in Snowflake, updates capacity dashboards in Power BI, and alerts operations via Slack.

naftiko: '0.5'
info:
  label: Warehouse Capacity Planning Pipeline
  description: Queries SAP warehouse utilization, cross-references demand forecasts in Snowflake, updates capacity dashboards in Power BI, and alerts operations via Slack.
  tags:
  - logistics
  - sap
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: warehouse-planning
    port: 8080
    tools:
    - name: plan-capacity
      description: Orchestrate warehouse capacity planning across SAP, Snowflake, Power BI, and Slack.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: The warehouse ID.
      - name: planning_horizon
        in: body
        type: string
        description: The planning period.
      steps:
      - name: get-utilization
        type: call
        call: sap.get-warehouse-util
        with:
          warehouse: '{{warehouse_id}}'
      - name: get-forecast
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM DEMAND_FORECAST WHERE warehouse='{{warehouse_id}}' AND period='{{planning_horizon}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: warehouse-capacity
      - name: alert-operations
        type: call
        call: slack.post-message
        with:
          channel: warehouse-ops
          text: 'Capacity update for {{warehouse_id}}: Current utilization {{get-utilization.percentage}}%. Forecast period: {{planning_horizon}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZWAREHOUSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: warehouses
      path: /WarehouseSet('{{warehouse}}')
      inputParameters:
      - name: warehouse
        in: path
      operations:
      - name: get-warehouse-util
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - 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: refresh-dataset
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → warehouse-capacity-planning-pipeline.yml

Retrieves the status of a DocuSign envelope by envelope ID, returning signing status, sender, and completion date.

naftiko: '0.5'
info:
  label: DocuSign Contract Status Lookup
  description: Retrieves the status of a DocuSign envelope by envelope ID, returning signing status, sender, and completion date.
  tags:
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: docusign-contracts
    port: 8080
    tools:
    - name: get-envelope-status
      description: Look up a DocuSign envelope status by ID.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sender
        type: string
        mapping: $.sender.userName
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/hasbro
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-contract-status-lookup.yml

Pulls market data from Circana, enriches with Google Analytics trends, stores insights in Snowflake, and publishes a competitive brief to Confluence.

naftiko: '0.5'
info:
  label: Competitive Intelligence Pipeline
  description: Pulls market data from Circana, enriches with Google Analytics trends, stores insights in Snowflake, and publishes a competitive brief to Confluence.
  tags:
  - intelligence
  - circana
  - google-analytics
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: competitive-intel
    port: 8080
    tools:
    - name: generate-competitive-brief
      description: Orchestrate competitive intelligence analysis across Circana, Google Analytics, Snowflake, and Confluence.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The toy category to analyze.
      - name: period
        in: body
        type: string
        description: The analysis period.
      steps:
      - name: get-market-data
        type: call
        call: circana.get-category-data
        with:
          category: '{{category}}'
          period: '{{period}}'
      - name: get-web-trends
        type: call
        call: ga.get-report
        with:
          view: hasbro-ecommerce
          category: '{{category}}'
      - name: store-insights
        type: call
        call: snowflake.insert-data
        with:
          table: COMPETITIVE_INTEL
          market_data: '{{get-market-data.results}}'
          web_data: '{{get-web-trends.rows}}'
      - name: publish-brief
        type: call
        call: confluence.create-page
        with:
          space_key: STRATEGY
          title: 'Competitive Brief: {{category}} - {{period}}'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: categories
      path: /market-data/{{category}}
      inputParameters:
      - name: category
        in: path
      operations:
      - name: get-category-data
        method: GET
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: reports
      path: /properties/hasbro:runReport
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → competitive-intelligence-pipeline.yml

Marks product as discontinued in SAP, removes from BigCommerce storefront, archives assets in Box, and notifies retail partners via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Product Discontinuation Pipeline
  description: Marks product as discontinued in SAP, removes from BigCommerce storefront, archives assets in Box, and notifies retail partners via Microsoft Outlook.
  tags:
  - product
  - sap
  - bigcommerce
  - box
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: product-discontinuation
    port: 8080
    tools:
    - name: discontinue-product
      description: Orchestrate product discontinuation across SAP, BigCommerce, Box, and Outlook.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: effective_date
        in: body
        type: string
        description: The discontinuation date.
      steps:
      - name: update-sap
        type: call
        call: sap.update-product
        with:
          sku: '{{product_sku}}'
          status: DISCONTINUED
          date: '{{effective_date}}'
      - name: remove-listing
        type: call
        call: bigcommerce.update-product
        with:
          sku: '{{product_sku}}'
          is_visible: 'false'
      - name: archive-assets
        type: call
        call: box.move-folder
        with:
          source: products/{{product_sku}}
          destination: archived-products/{{product_sku}}
      - name: notify-partners
        type: call
        call: outlook.send-email
        with:
          to: retail-partners@hasbro.com
          subject: 'Product Discontinuation: {{product_sku}}'
          body: Product {{product_sku}} will be discontinued effective {{effective_date}}.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: update-product
        method: PATCH
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: update-product
        method: PUT
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders/{{source}}
      inputParameters:
      - name: source
        in: path
      operations:
      - name: move-folder
        method: PUT
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → product-discontinuation-pipeline.yml

Uploads a product asset file to a specified Google Drive folder.

naftiko: '0.5'
info:
  label: Google Drive Asset Repository
  description: Uploads a product asset file to a specified Google Drive folder.
  tags:
  - document-management
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: gdrive-assets
    port: 8080
    tools:
    - name: upload-asset
      description: Upload a product asset to Google Drive.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: The Google Drive folder ID.
      - name: file_name
        in: body
        type: string
        description: The file name.
      - name: content
        in: body
        type: string
        description: The file content.
      call: gdrive.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
        content: '{{content}}'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.id
      - name: web_view_link
        type: string
        mapping: $.webViewLink
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?uploadType=multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → google-drive-asset-repository.yml

Retrieves licensing agreement details from Salesforce, checks royalty payment status in SAP, and creates a Jira task for renewals approaching expiry.

naftiko: '0.5'
info:
  label: Licensing Agreement Tracker
  description: Retrieves licensing agreement details from Salesforce, checks royalty payment status in SAP, and creates a Jira task for renewals approaching expiry.
  tags:
  - licensing
  - legal
  - salesforce
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: licensing-management
    port: 8080
    tools:
    - name: check-license-status
      description: Check licensing agreement status and flag upcoming renewals.
      inputParameters:
      - name: license_id
        in: body
        type: string
        description: The Salesforce licensing agreement ID.
      steps:
      - name: get-agreement
        type: call
        call: salesforce.get-license
        with:
          license_id: '{{license_id}}'
      - name: get-royalties
        type: call
        call: sap.get-royalty-status
        with:
          agreement_ref: '{{get-agreement.Agreement_Ref__c}}'
      - name: create-renewal-task
        type: call
        call: jira.create-issue
        with:
          project_key: LIC
          summary: 'License renewal: {{get-agreement.Name}} - expires {{get-agreement.Expiry_Date__c}}'
          issue_type: Task
          description: 'Licensee: {{get-agreement.Licensee__c}}. Royalty YTD: {{get-royalties.ytd_amount}} {{get-royalties.currency}}. Expiry: {{get-agreement.Expiry_Date__c}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: licenses
      path: /sobjects/License_Agreement__c/{{license_id}}
      inputParameters:
      - name: license_id
        in: path
      operations:
      - name: get-license
        method: GET
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLI_ROYALTY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: royalties
      path: /RoyaltyStatusSet('{{agreement_ref}}')
      inputParameters:
      - name: agreement_ref
        in: path
      operations:
      - name: get-royalty-status
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → licensing-agreement-tracker.yml

Creates a social media campaign across Facebook, Instagram, and Twitter via HubSpot, pulling product imagery from SharePoint.

naftiko: '0.5'
info:
  label: Social Media Campaign Publisher
  description: Creates a social media campaign across Facebook, Instagram, and Twitter via HubSpot, pulling product imagery from SharePoint.
  tags:
  - marketing
  - social-media
  - hubspot
  - sharepoint
  - facebook
  - instagram
  - twitter
capability:
  exposes:
  - type: mcp
    namespace: social-campaigns
    port: 8080
    tools:
    - name: publish-social-campaign
      description: Create and publish a social media campaign with product assets.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU for imagery.
      - name: campaign_message
        in: body
        type: string
        description: The campaign message text.
      steps:
      - name: get-assets
        type: call
        call: sharepoint.get-folder
        with:
          site_id: marketing_site
          folder_path: ProductAssets/{{product_sku}}
      - name: create-broadcast
        type: call
        call: hubspot.create-broadcast
        with:
          content: '{{campaign_message}}'
          channels:
          - facebook
          - instagram
          - twitter
          media_url: '{{get-assets.items[0].webUrl}}'
  consumes:
  - 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}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: broadcasts
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-broadcast
        method: POST
Open in Framework → View in Fleet → social-media-campaign-publisher.yml

Uploads a product video to the Hasbro YouTube channel, creates a Salesforce content record, and shares the link to Microsoft Teams.

naftiko: '0.5'
info:
  label: YouTube Product Video Publisher
  description: Uploads a product video to the Hasbro YouTube channel, creates a Salesforce content record, and shares the link to Microsoft Teams.
  tags:
  - marketing
  - video
  - youtube
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video-publishing
    port: 8080
    tools:
    - name: publish-product-video
      description: Upload a product video to YouTube and notify teams.
      inputParameters:
      - name: video_title
        in: body
        type: string
        description: The video title.
      - name: product_sku
        in: body
        type: string
        description: The related product SKU.
      - name: video_url
        in: body
        type: string
        description: The video source URL.
      steps:
      - name: upload-video
        type: call
        call: youtube.upload-video
        with:
          title: '{{video_title}}'
          description: Official Hasbro product video for {{product_sku}}
          source_url: '{{video_url}}'
      - name: create-content-record
        type: call
        call: salesforce.create-content
        with:
          title: '{{video_title}}'
          type: YouTube Video
          url: '{{upload-video.watch_url}}'
          product_sku: '{{product_sku}}'
      - name: share-link
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-content
          text: 'New product video published: {{video_title}}. Watch: {{upload-video.watch_url}}.'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/upload/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: videos
      path: /videos?uploadType=resumable&part=snippet,status
      operations:
      - name: upload-video
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: content
      path: /sobjects/Content__c
      operations:
      - name: create-content
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → youtube-product-video-publisher.yml

On new retail order, validates inventory in SAP, creates a shipment in the logistics system, updates the BigCommerce order status, and sends confirmation via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Retail Order Fulfillment Orchestrator
  description: On new retail order, validates inventory in SAP, creates a shipment in the logistics system, updates the BigCommerce order status, and sends confirmation via Microsoft Outlook.
  tags:
  - fulfillment
  - sap
  - bigcommerce
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: fulfill-order
      description: Orchestrate retail order fulfillment across SAP, BigCommerce, and Outlook.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: retailer_email
        in: body
        type: string
        description: The retailer contact email.
      steps:
      - name: check-inventory
        type: call
        call: sap.check-inventory
        with:
          order_id: '{{order_id}}'
      - name: create-shipment
        type: call
        call: sap.create-shipment
        with:
          order_id: '{{order_id}}'
          warehouse: '{{check-inventory.warehouse}}'
      - name: update-order-status
        type: call
        call: bigcommerce.update-order
        with:
          id: '{{order_id}}'
          status: Shipped
          tracking_number: '{{create-shipment.tracking_number}}'
      - name: send-confirmation
        type: call
        call: outlook.send-email
        with:
          to: '{{retailer_email}}'
          subject: Order {{order_id}} Shipped
          body: 'Your order {{order_id}} has been shipped. Tracking: {{create-shipment.tracking_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLOGISTICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /InventoryCheck
      operations:
      - name: check-inventory
        method: POST
    - name: shipments
      path: /ShipmentSet
      operations:
      - name: create-shipment
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-order
        method: PUT
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → retail-order-fulfillment-orchestrator.yml

Retrieves a retail partner account from Salesforce by account ID, returning company name, tier, annual revenue, and primary contact.

naftiko: '0.5'
info:
  label: Salesforce Retail Account Lookup
  description: Retrieves a retail partner account from Salesforce by account ID, returning company name, tier, annual revenue, and primary contact.
  tags:
  - retail
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: retail-accounts
    port: 8080
    tools:
    - name: get-retail-account
      description: Look up a Salesforce retail partner account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.Name
      - name: tier
        type: string
        mapping: $.Partner_Tier__c
      - name: annual_revenue
        type: string
        mapping: $.AnnualRevenue
      - name: primary_contact
        type: string
        mapping: $.Primary_Contact__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-retail-account-lookup.yml

On new hire from Workday, provisions Azure AD account, creates a ServiceNow equipment request, assigns Slack channels, and sends welcome email via Microsoft Outlook.

naftiko: '0.5'
info:
  label: New Hire IT Provisioning Pipeline
  description: On new hire from Workday, provisions Azure AD account, creates a ServiceNow equipment request, assigns Slack channels, and sends welcome email via Microsoft Outlook.
  tags:
  - it
  - workday
  - azure-active-directory
  - servicenow
  - slack
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: it-provisioning
    port: 8080
    tools:
    - name: provision-new-hire
      description: Orchestrate IT provisioning for new hires across Workday, Azure AD, ServiceNow, Slack, and Outlook.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: department
        in: body
        type: string
        description: The department name.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          id: '{{employee_id}}'
      - name: create-account
        type: call
        call: azuread.create-user
        with:
          display_name: '{{get-employee.name}}'
          department: '{{department}}'
          email: '{{get-employee.email}}'
      - name: request-equipment
        type: call
        call: servicenow.create-request
        with:
          type: New Hire Equipment
          description: Equipment for {{get-employee.name}} - {{department}}
      - name: add-to-slack
        type: call
        call: slack.invite-user
        with:
          email: '{{get-employee.email}}'
          channels: general,{{department}}
      - name: send-welcome
        type: call
        call: outlook.send-email
        with:
          to: '{{get-employee.email}}'
          subject: Welcome to Hasbro IT
          body: 'Your accounts have been provisioned. Equipment request: {{request-equipment.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/hasbro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /Human_Resources/Workers/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: invitations
      path: /conversations.invite
      operations:
      - name: invite-user
        method: POST
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → new-hire-it-provisioning-pipeline.yml

Publishes a branded content post to the Hasbro LinkedIn company page.

naftiko: '0.5'
info:
  label: LinkedIn Brand Post Publisher
  description: Publishes a branded content post to the Hasbro LinkedIn company page.
  tags:
  - marketing
  - social-media
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: linkedin-publishing
    port: 8080
    tools:
    - name: publish-linkedin-post
      description: Publish a post to the Hasbro LinkedIn company page.
      inputParameters:
      - name: post_text
        in: body
        type: string
        description: The post content text.
      call: linkedin.create-post
      with:
        author: urn:li:organization:hasbro
        text: '{{post_text}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-brand-post-publisher.yml

Queries SAP BW for sales analytics by product line, returning revenue, units, and year-over-year growth.

naftiko: '0.5'
info:
  label: SAP BW Sales Analytics
  description: Queries SAP BW for sales analytics by product line, returning revenue, units, and year-over-year growth.
  tags:
  - analytics
  - sap-bw
  - sales
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: get-sales-analytics
      description: Get sales analytics from SAP BW by product line.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line name.
      - name: period
        in: body
        type: string
        description: The reporting period.
      call: sapbw.get-sales
      with:
        product_line: '{{product_line}}'
        period: '{{period}}'
      outputParameters:
      - name: revenue
        type: string
        mapping: $.d.Revenue
      - name: units_sold
        type: integer
        mapping: $.d.UnitsSold
      - name: yoy_growth
        type: string
        mapping: $.d.YoYGrowth
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://hasbro-bw.sap.com/sap/opu/odata/sap/ZSD_SALES_BW_SRV
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: sales
      path: /SalesAnalyticsSet(ProductLine='{{product_line}}',Period='{{period}}')
      inputParameters:
      - name: product_line
        in: path
      - name: period
        in: path
      operations:
      - name: get-sales
        method: GET
Open in Framework → View in Fleet → sap-bw-sales-analytics.yml

Creates a product specification page in Confluence from SAP product data.

naftiko: '0.5'
info:
  label: Confluence Product Spec Publisher
  description: Creates a product specification page in Confluence from SAP product data.
  tags:
  - documentation
  - confluence
  - sap
capability:
  exposes:
  - type: mcp
    namespace: product-specs
    port: 8080
    tools:
    - name: publish-product-spec
      description: Generate and publish a product specification page to Confluence.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      steps:
      - name: get-product
        type: call
        call: sap.get-product-details
        with:
          sku: '{{product_sku}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: PROD
          title: 'Product Spec: {{get-product.ProductName}} ({{product_sku}})'
          body: 'Category: {{get-product.Category}}. Age: {{get-product.AgeRating}}. Dimensions: {{get-product.Dimensions}}. Weight: {{get-product.Weight}}. Materials: {{get-product.Materials}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductDetailSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-product-details
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-product-spec-publisher.yml

Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, updates inventory targets, and shares results to Confluence.

naftiko: '0.5'
info:
  label: Demand Forecasting Pipeline
  description: Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, updates inventory targets, and shares results to Confluence.
  tags:
  - planning
  - forecasting
  - sap
  - azure-machine-learning
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: demand-forecast
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Run a demand forecast for a product line and publish results.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line to forecast.
      - name: forecast_horizon
        in: body
        type: string
        description: Forecast horizon (e.g. 6_months, 12_months).
      steps:
      - name: get-history
        type: call
        call: sap.get-sales-history
        with:
          product_line: '{{product_line}}'
      - name: run-forecast
        type: call
        call: azml.run-inference
        with:
          model_name: demand_forecast
          input_data: '{{get-history.data}}'
          horizon: '{{forecast_horizon}}'
      - name: publish-results
        type: call
        call: confluence.create-page
        with:
          space_key: PLAN
          title: 'Demand Forecast: {{product_line}} - {{forecast_horizon}}'
          body: 'Forecasted units: {{run-forecast.predicted_units}}. Confidence: {{run-forecast.confidence_interval}}. Recommended stock: {{run-forecast.recommended_stock}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_SALES_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-history
      path: /SalesHistorySet?$filter=ProductLine eq '{{product_line}}'
      inputParameters:
      - name: product_line
        in: query
      operations:
      - name: get-sales-history
        method: GET
  - type: http
    namespace: azml
    baseUri: https://hasbro-ml.azureml.ms/score
    authentication:
      type: bearer
      token: $secrets.azml_token
    resources:
    - name: inference
      path: /{{model_name}}
      inputParameters:
      - name: model_name
        in: path
      operations:
      - name: run-inference
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → demand-forecasting-pipeline.yml

Retrieves headcount data from Workday by department, returning employee count, open positions, and turnover rate.

naftiko: '0.5'
info:
  label: Workday Headcount Report
  description: Retrieves headcount data from Workday by department, returning employee count, open positions, and turnover rate.
  tags:
  - hr
  - workforce
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount
      description: Get headcount metrics from Workday for a department.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday department ID.
      call: workday.get-headcount
      with:
        department_id: '{{department_id}}'
      outputParameters:
      - name: employee_count
        type: integer
        mapping: $.total_count
      - name: open_positions
        type: integer
        mapping: $.open_positions
      - name: turnover_rate
        type: string
        mapping: $.turnover_rate
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /departments/{{department_id}}/headcount
      inputParameters:
      - name: department_id
        in: path
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-headcount-report.yml

Publishes a Google Tag Manager container version for a Hasbro web property.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Publish
  description: Publishes a Google Tag Manager container version for a Hasbro web property.
  tags:
  - marketing
  - analytics
  - google-tag-manager
capability:
  exposes:
  - type: mcp
    namespace: tag-management
    port: 8080
    tools:
    - name: publish-gtm-container
      description: Publish a GTM container version.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The GTM account ID.
      - name: container_id
        in: body
        type: string
        description: The GTM container ID.
      - name: version_id
        in: body
        type: string
        description: The version to publish.
      call: gtm.publish-version
      with:
        account_id: '{{account_id}}'
        container_id: '{{container_id}}'
        version_id: '{{version_id}}'
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.gtm_token
    resources:
    - name: versions
      path: /accounts/{{account_id}}/containers/{{container_id}}/versions/{{version_id}}:publish
      inputParameters:
      - name: account_id
        in: path
      - name: container_id
        in: path
      - name: version_id
        in: path
      operations:
      - name: publish-version
        method: POST
Open in Framework → View in Fleet → google-tag-manager-container-publish.yml

On license renewal trigger, retrieves the agreement from Salesforce, creates a DocuSign envelope for signing, updates the Airtable tracker, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Brand Licensing Renewal Orchestrator
  description: On license renewal trigger, retrieves the agreement from Salesforce, creates a DocuSign envelope for signing, updates the Airtable tracker, and notifies stakeholders via Microsoft Teams.
  tags:
  - licensing
  - salesforce
  - docusign
  - airtable
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: licensing-renewal
    port: 8080
    tools:
    - name: renew-license
      description: Orchestrate a brand licensing renewal across Salesforce, DocuSign, Airtable, and Teams.
      inputParameters:
      - name: license_id
        in: body
        type: string
        description: The licensing agreement ID.
      - name: partner_name
        in: body
        type: string
        description: The licensing partner name.
      steps:
      - name: get-agreement
        type: call
        call: salesforce.get-agreement
        with:
          id: '{{license_id}}'
      - name: create-envelope
        type: call
        call: docusign.create-envelope
        with:
          template_id: license_renewal_template
          signer_name: '{{partner_name}}'
          agreement_id: '{{license_id}}'
      - name: update-tracker
        type: call
        call: airtable.update-record
        with:
          record_id: '{{license_id}}'
          status: Renewal In Progress
          envelope_id: '{{create-envelope.envelopeId}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: licensing-team
          text: 'License renewal initiated for {{partner_name}} ({{license_id}}). DocuSign envelope: {{create-envelope.envelopeId}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: agreements
      path: /sobjects/Contract/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-agreement
        method: GET
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/hasbro
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v0/appHasbro
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /LicenseTracker/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-licensing-renewal-orchestrator.yml

Creates a seasonal promotion plan by pulling product catalog from SAP, setting up a Salesforce campaign, scheduling social posts in HubSpot, and distributing a brief to retailers via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Seasonal Promotion Planner
  description: Creates a seasonal promotion plan by pulling product catalog from SAP, setting up a Salesforce campaign, scheduling social posts in HubSpot, and distributing a brief to retailers via Microsoft Outlook.
  tags:
  - marketing
  - promotions
  - sap
  - salesforce
  - hubspot
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: promo-planning
    port: 8080
    tools:
    - name: plan-seasonal-promotion
      description: Plan and distribute a seasonal promotion across all channels.
      inputParameters:
      - name: season
        in: body
        type: string
        description: The promotional season (e.g. Holiday2026, BackToSchool).
      - name: product_category
        in: body
        type: string
        description: The product category to promote.
      steps:
      - name: get-products
        type: call
        call: sap.get-promo-products
        with:
          category: '{{product_category}}'
          season: '{{season}}'
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{season}} - {{product_category}} Promotion'
          type: Seasonal
          status: Planned
      - name: schedule-social
        type: call
        call: hubspot.create-broadcast
        with:
          content: 'Get ready for {{season}}! Check out our top {{product_category}} picks. #Hasbro #{{season}}'
          campaign_id: '{{create-campaign.Id}}'
      - name: send-retailer-brief
        type: call
        call: outlook.send-email
        with:
          to: retail-partners@hasbro.com
          subject: '{{season}} Promotion Brief - {{product_category}}'
          body: 'Dear Retail Partners, please find the {{season}} promotion lineup for {{product_category}}. Featured products: {{get-products.featured_list}}. Campaign ID: {{create-campaign.Id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: promo-products
      path: /PromoProductSet?$filter=Category eq '{{category}}' and Season eq '{{season}}'
      inputParameters:
      - name: category
        in: query
      - name: season
        in: query
      operations:
      - name: get-promo-products
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: broadcasts
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-broadcast
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → seasonal-promotion-planner.yml

Collects shelf performance data from Circana, stores in Snowflake, updates Tableau dashboards, and sends insights to the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Shelf Analytics Pipeline
  description: Collects shelf performance data from Circana, stores in Snowflake, updates Tableau dashboards, and sends insights to the sales team via Microsoft Teams.
  tags:
  - retail
  - circana
  - snowflake
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: shelf-analytics
    port: 8080
    tools:
    - name: analyze-shelf-performance
      description: Orchestrate retail shelf analytics across Circana, Snowflake, Tableau, and Teams.
      inputParameters:
      - name: retailer
        in: body
        type: string
        description: The retailer name.
      - name: category
        in: body
        type: string
        description: The product category.
      steps:
      - name: get-shelf-data
        type: call
        call: circana.get-shelf-metrics
        with:
          retailer: '{{retailer}}'
          category: '{{category}}'
      - name: store-data
        type: call
        call: snowflake.insert-data
        with:
          table: SHELF_ANALYTICS
          data: '{{get-shelf-data.results}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource: shelf-performance
      - name: share-insights
        type: call
        call: msteams.send-message
        with:
          channel_id: retail-sales
          text: 'Shelf analytics for {{retailer}} ({{category}}): Share of shelf {{get-shelf-data.share_of_shelf}}%'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: shelf
      path: /shelf-metrics
      operations:
      - name: get-shelf-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.hasbro.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/hasbro/datasources/{{datasource}}/refresh
      inputParameters:
      - name: datasource
        in: path
      operations:
      - name: refresh-extract
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-shelf-analytics-pipeline.yml

Queries the SAP warehouse inventory for a given material number, returning on-hand quantity, location, and lot details.

naftiko: '0.5'
info:
  label: SAP Inventory Balance Lookup
  description: Queries the SAP warehouse inventory for a given material number, returning on-hand quantity, location, and lot details.
  tags:
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap-inventory
    port: 8080
    tools:
    - name: get-inventory-balance
      description: Look up inventory balance by material number in SAP.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-inventory
      with:
        material: '{{material_number}}'
      outputParameters:
      - name: on_hand_qty
        type: string
        mapping: $.d.OnHandQty
      - name: warehouse_location
        type: string
        mapping: $.d.StorageLocation
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /InventorySet('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → sap-inventory-balance-lookup.yml

Checks Cloudflare zone health for Hasbro web properties.

naftiko: '0.5'
info:
  label: Cloudflare Web Security Monitor
  description: Checks Cloudflare zone health for Hasbro web properties.
  tags:
  - security
  - cloudflare
  - dns
capability:
  exposes:
  - type: mcp
    namespace: web-security
    port: 8080
    tools:
    - name: check-zone-health
      description: Check DNS and security health for a Cloudflare zone.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The Cloudflare zone ID.
      call: cloudflare.get-zone
      with:
        zone_id: '{{zone_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.result.status
      - name: ssl_status
        type: string
        mapping: $.result.ssl.status
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: zones
      path: /zones/{{zone_id}}
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-zone
        method: GET
Open in Framework → View in Fleet → cloudflare-web-security-monitor.yml

Pulls search performance from Google Analytics, identifies optimization opportunities, updates product descriptions in BigCommerce, and reports via Google Sheets.

naftiko: '0.5'
info:
  label: SEO Content Optimization Pipeline
  description: Pulls search performance from Google Analytics, identifies optimization opportunities, updates product descriptions in BigCommerce, and reports via Google Sheets.
  tags:
  - seo
  - google-analytics
  - bigcommerce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: seo-optimization
    port: 8080
    tools:
    - name: optimize-seo
      description: Orchestrate SEO content optimization across Google Analytics, BigCommerce, and Google Sheets.
      inputParameters:
      - name: product_category
        in: body
        type: string
        description: The product category.
      steps:
      - name: get-search-data
        type: call
        call: ga.get-search-report
        with:
          category: '{{product_category}}'
      - name: update-descriptions
        type: call
        call: bigcommerce.update-products
        with:
          category: '{{product_category}}'
          seo_data: '{{get-search-data.recommendations}}'
      - name: update-tracker
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: seo-tracker
          values: '{{product_category}},{{get-search-data.impressions}},{{get-search-data.clicks}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: reports
      path: /properties/hasbro:runReport
      operations:
      - name: get-search-report
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: update-products
        method: PUT
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → seo-content-optimization-pipeline.yml

On new vendor approval, creates the vendor record in SAP, sets up a shared folder in Box, adds the vendor to Salesforce, and sends welcome package via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Vendor Onboarding Orchestrator
  description: On new vendor approval, creates the vendor record in SAP, sets up a shared folder in Box, adds the vendor to Salesforce, and sends welcome package via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - box
  - salesforce
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Orchestrate vendor onboarding across SAP, Box, Salesforce, and Outlook.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The vendor company name.
      - name: vendor_email
        in: body
        type: string
        description: The vendor primary contact email.
      steps:
      - name: create-sap-vendor
        type: call
        call: sap.create-vendor
        with:
          name: '{{vendor_name}}'
          email: '{{vendor_email}}'
      - name: create-shared-folder
        type: call
        call: box.create-folder
        with:
          folder_name: Vendor_{{vendor_name}}
          parent_id: vendor-documents
      - name: create-salesforce-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{vendor_name}}'
          type: Vendor
          vendor_id: '{{create-sap-vendor.VendorNumber}}'
      - name: send-welcome
        type: call
        call: outlook.send-email
        with:
          to: '{{vendor_email}}'
          subject: Welcome to Hasbro Vendor Network
          body: 'Welcome {{vendor_name}}! Your vendor ID is {{create-sap-vendor.VendorNumber}}. Shared documents: {{create-shared-folder.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZVENDOR_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /VendorSet
      operations:
      - name: create-vendor
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → vendor-onboarding-orchestrator.yml

Initiates a product recall by flagging in SAP, creating a Salesforce case for affected retailers, opening a ServiceNow incident, sending recall notices via Microsoft Outlook, and alerting all teams in Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Recall Coordinator
  description: Initiates a product recall by flagging in SAP, creating a Salesforce case for affected retailers, opening a ServiceNow incident, sending recall notices via Microsoft Outlook, and alerting all teams in Microsoft Teams.
  tags:
  - compliance
  - recall
  - sap
  - salesforce
  - servicenow
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Coordinate a product recall across all systems.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU to recall.
      - name: reason
        in: body
        type: string
        description: The recall reason.
      steps:
      - name: flag-product
        type: call
        call: sap.flag-recall
        with:
          sku: '{{product_sku}}'
          reason: '{{reason}}'
      - name: create-sf-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'RECALL: {{flag-product.ProductName}} ({{product_sku}})'
          description: 'Product recall initiated. Reason: {{reason}}. Affected units: {{flag-product.units_in_field}}.'
          priority: Critical
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Product recall: {{product_sku}}'
          priority: '1'
          description: 'Recall for {{flag-product.ProductName}}. Reason: {{reason}}. SF Case: {{create-sf-case.CaseNumber}}.'
      - name: send-notices
        type: call
        call: outlook.send-email
        with:
          to: retailers-list@hasbro.com
          subject: 'URGENT: Product Recall - {{flag-product.ProductName}}'
          body: 'Hasbro is issuing a recall for {{flag-product.ProductName}} (SKU: {{product_sku}}). Reason: {{reason}}. Please remove from shelves immediately.'
      - name: alert-all
        type: call
        call: msteams.send-message
        with:
          channel_id: company-wide-alerts
          text: 'PRODUCT RECALL: {{flag-product.ProductName}} ({{product_sku}}). Reason: {{reason}}. SF Case: {{create-sf-case.CaseNumber}}. ServiceNow: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_RECALL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recalls
      path: /RecallSet
      operations:
      - name: flag-recall
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.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: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-email
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-recall-coordinator.yml

On vulnerability detection from Cloudflare, creates a Jira security ticket, notifies security team via Slack, triggers patch deployment in Azure DevOps, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Pipeline
  description: On vulnerability detection from Cloudflare, creates a Jira security ticket, notifies security team via Slack, triggers patch deployment in Azure DevOps, and logs in ServiceNow.
  tags:
  - security
  - cloudflare
  - jira
  - slack
  - azure-devops
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vuln-remediation
    port: 8080
    tools:
    - name: remediate-vulnerability
      description: Orchestrate security vulnerability remediation across Cloudflare, Jira, Slack, Azure DevOps, and ServiceNow.
      inputParameters:
      - name: vuln_id
        in: body
        type: string
        description: The vulnerability ID.
      - name: severity
        in: body
        type: string
        description: The severity level.
      steps:
      - name: get-vuln-details
        type: call
        call: cloudflare.get-vulnerability
        with:
          id: '{{vuln_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Vulnerability: {{get-vuln-details.name}}'
          priority: '{{severity}}'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: security-ops
          text: 'VULN ALERT [{{severity}}]: {{get-vuln-details.name}}. Jira: {{create-ticket.key}}'
      - name: trigger-patch
        type: call
        call: azuredevops.queue-build
        with:
          definition_id: security-patch
          parameters: '{"vuln":"{{vuln_id}}"}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: vulnerabilities
      path: /zones/hasbro/vulnerabilities/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-vulnerability
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/hasbro/_apis
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: builds
      path: /build/builds?api-version=7.0
      operations:
      - name: queue-build
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-pipeline.yml

Processes a customer return by creating a Zendesk ticket, initiating refund via Stripe, updating inventory in SAP, and logging the return in Snowflake.

naftiko: '0.5'
info:
  label: Customer Returns Processing Pipeline
  description: Processes a customer return by creating a Zendesk ticket, initiating refund via Stripe, updating inventory in SAP, and logging the return in Snowflake.
  tags:
  - returns
  - zendesk
  - stripe
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: returns-processing
    port: 8080
    tools:
    - name: process-return
      description: Orchestrate customer returns across Zendesk, Stripe, SAP, and Snowflake.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The order ID.
      - name: reason
        in: body
        type: string
        description: The return reason.
      steps:
      - name: create-ticket
        type: call
        call: zendesk.create-ticket
        with:
          subject: 'Return: Order {{order_id}}'
          description: '{{reason}}'
      - name: process-refund
        type: call
        call: stripe.create-refund
        with:
          payment_intent: '{{order_id}}'
      - name: update-inventory
        type: call
        call: sap.update-inventory
        with:
          order_id: '{{order_id}}'
          type: return
      - name: log-return
        type: call
        call: snowflake.insert-data
        with:
          table: RETURNS_LOG
          order_id: '{{order_id}}'
          reason: '{{reason}}'
          refund_id: '{{process-refund.id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://hasbro.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: create-ticket
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /InventoryAdjustment
      operations:
      - name: update-inventory
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
Open in Framework → View in Fleet → customer-returns-processing-pipeline.yml

Retrieves historical spend from SAP, builds forecast models in Snowflake, creates budget templates in Google Sheets, and submits for approval via Microsoft Teams.

naftiko: '0.5'
info:
  label: Annual Budget Planning Pipeline
  description: Retrieves historical spend from SAP, builds forecast models in Snowflake, creates budget templates in Google Sheets, and submits for approval via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: budget-planning
    port: 8080
    tools:
    - name: plan-budget
      description: Orchestrate annual budget planning across SAP, Snowflake, Google Sheets, and Teams.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year.
      steps:
      - name: get-historical
        type: call
        call: sap.get-spend-history
        with:
          department: '{{department}}'
          year: '{{fiscal_year}}'
      - name: build-forecast
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM BUDGET_FORECAST WHERE dept='{{department}}'
      - name: create-template
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Budget {{fiscal_year}} - {{department}}
      - name: submit-approval
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-approvals
          text: 'Budget plan ready for {{department}} FY{{fiscal_year}}: {{create-template.spreadsheetUrl}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZFINANCE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: spend
      path: /SpendHistorySet
      operations:
      - name: get-spend-history
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → annual-budget-planning-pipeline.yml

Creates a patent case in Salesforce, generates filing documents in SharePoint, assigns legal review via Jira, and notifies the IP team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Patent Filing Coordination Pipeline
  description: Creates a patent case in Salesforce, generates filing documents in SharePoint, assigns legal review via Jira, and notifies the IP team via Microsoft Teams.
  tags:
  - legal
  - salesforce
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patent-filing
    port: 8080
    tools:
    - name: coordinate-patent-filing
      description: Orchestrate patent filing coordination across Salesforce, SharePoint, Jira, and Teams.
      inputParameters:
      - name: invention_title
        in: body
        type: string
        description: The invention title.
      - name: inventor_name
        in: body
        type: string
        description: The inventor name.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Patent Filing: {{invention_title}}'
          inventor: '{{inventor_name}}'
      - name: create-documents
        type: call
        call: sharepoint.create-folder
        with:
          site: legal
          path: Patents/{{invention_title}}
      - name: assign-review
        type: call
        call: jira.create-issue
        with:
          project: IP
          summary: 'Patent Review: {{invention_title}}'
          description: 'Inventor: {{inventor_name}}'
      - name: notify-ip-team
        type: call
        call: msteams.send-message
        with:
          channel_id: ip-legal
          text: 'New patent filing: {{invention_title}} by {{inventor_name}}. Case: {{create-case.Id}}. Jira: {{assign-review.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site}}/drive/root:/{{path}}
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patent-filing-coordination-pipeline.yml

Triggers SAP financial period close, generates reports in Power BI, archives records in Box, and notifies finance leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Financial Close Pipeline
  description: Triggers SAP financial period close, generates reports in Power BI, archives records in Box, and notifies finance leadership via Microsoft Teams.
  tags:
  - finance
  - sap
  - power-bi
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: financial-close
    port: 8080
    tools:
    - name: execute-close
      description: Orchestrate financial close across SAP, Power BI, Box, and Teams.
      inputParameters:
      - name: period
        in: body
        type: string
        description: The financial period.
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      steps:
      - name: close-period
        type: call
        call: sap.close-period
        with:
          period: '{{period}}'
          company_code: '{{company_code}}'
      - name: refresh-reports
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: financial-reports
      - name: archive-records
        type: call
        call: box.create-folder
        with:
          parent_id: financial-archive
          name: '{{period}}_{{company_code}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-leadership
          text: Financial close completed for {{period}} ({{company_code}}). Reports refreshed.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZFINANCE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: periods
      path: /PeriodCloseSet
      operations:
      - name: close-period
        method: POST
  - 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: refresh-dataset
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      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: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-financial-close-pipeline.yml

Sends a formatted message to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notifier
  description: Sends a formatted message to a Microsoft Teams channel.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: team-notifications
    port: 8080
    tools:
    - name: send-channel-notification
      description: Send a message to a Microsoft Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Teams channel ID.
      - name: message_text
        in: body
        type: string
        description: The message text.
      call: msteams.send-channel-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{message_text}}'
  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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notifier.yml

Aggregates weekly sales from Snowflake, generates a Power BI report, creates a summary in Confluence, and distributes via Slack.

naftiko: '0.5'
info:
  label: Weekly Sales Digest Pipeline
  description: Aggregates weekly sales from Snowflake, generates a Power BI report, creates a summary in Confluence, and distributes via Slack.
  tags:
  - sales
  - snowflake
  - power-bi
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sales-digest
    port: 8080
    tools:
    - name: generate-digest
      description: Orchestrate weekly sales digest across Snowflake, Power BI, Confluence, and Slack.
      inputParameters:
      - name: week_ending
        in: body
        type: string
        description: The week ending date.
      steps:
      - name: query-sales
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM WEEKLY_SALES WHERE week_ending='{{week_ending}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: weekly-sales
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: SALES
          title: Weekly Sales Digest - {{week_ending}}
      - name: distribute
        type: call
        call: slack.post-message
        with:
          channel: sales-leadership
          text: 'Weekly sales digest for {{week_ending}} is ready. Total: ${{query-sales.total_revenue}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - 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: refresh-dataset
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → weekly-sales-digest-pipeline.yml

Retrieves sales velocity data from SAP BW, analyzes shelf performance from Circana, and generates a planogram recommendation report in Confluence.

naftiko: '0.5'
info:
  label: Retail Planogram Optimizer
  description: Retrieves sales velocity data from SAP BW, analyzes shelf performance from Circana, and generates a planogram recommendation report in Confluence.
  tags:
  - retail
  - merchandising
  - sap-bw
  - circana
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: planogram-optimization
    port: 8080
    tools:
    - name: optimize-planogram
      description: Generate a planogram optimization report based on sales and market data.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The retail category.
      - name: retailer_id
        in: body
        type: string
        description: The retailer account ID.
      steps:
      - name: get-sales-velocity
        type: call
        call: sapbw.get-velocity
        with:
          category: '{{category}}'
          retailer: '{{retailer_id}}'
      - name: get-market-data
        type: call
        call: circana.get-category-data
        with:
          category: '{{category}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: RETAIL
          title: 'Planogram Recommendation: {{category}} - {{retailer_id}}'
          body: 'Top sellers: {{get-sales-velocity.top_products}}. Market share: {{get-market-data.market_share}}. Recommended facing: {{get-sales-velocity.recommended_facing}}.'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://hasbro-bw.sap.com/sap/opu/odata/sap/ZSD_VELOCITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: velocity
      path: /VelocitySet(Category='{{category}}',Retailer='{{retailer}}')
      inputParameters:
      - name: category
        in: path
      - name: retailer
        in: path
      operations:
      - name: get-velocity
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: categories
      path: /categories/{{category}}/performance
      inputParameters:
      - name: category
        in: path
      operations:
      - name: get-category-data
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → retail-planogram-optimizer.yml

Creates a Zoom meeting and sends calendar invites via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Zoom Meeting Scheduler
  description: Creates a Zoom meeting and sends calendar invites via Microsoft Outlook.
  tags:
  - communications
  - meetings
  - zoom
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: meeting-scheduler
    port: 8080
    tools:
    - name: schedule-meeting
      description: Create a Zoom meeting and send invites.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: start_time
        in: body
        type: string
        description: Start time in ISO 8601.
      - name: attendee_emails
        in: body
        type: array
        description: Attendee email list.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{topic}}'
          start_time: '{{start_time}}'
      - name: send-invite
        type: call
        call: outlook.send-email
        with:
          to: '{{attendee_emails}}'
          subject: 'Meeting: {{topic}}'
          body: 'Join Zoom: {{create-meeting.join_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → zoom-meeting-scheduler.yml

Detects abandoned carts in BigCommerce, sends recovery emails via MailChimp, logs events in Snowflake, and updates metrics in Google Analytics.

naftiko: '0.5'
info:
  label: E-commerce Cart Abandonment Pipeline
  description: Detects abandoned carts in BigCommerce, sends recovery emails via MailChimp, logs events in Snowflake, and updates metrics in Google Analytics.
  tags:
  - e-commerce
  - bigcommerce
  - mailchimp
  - snowflake
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: cart-abandonment
    port: 8080
    tools:
    - name: recover-abandoned-cart
      description: Orchestrate cart abandonment recovery across BigCommerce, MailChimp, Snowflake, and Google Analytics.
      inputParameters:
      - name: cart_id
        in: body
        type: string
        description: The abandoned cart ID.
      steps:
      - name: get-cart
        type: call
        call: bigcommerce.get-cart
        with:
          id: '{{cart_id}}'
      - name: send-recovery-email
        type: call
        call: mailchimp.send-automation
        with:
          workflow: cart-recovery
          email: '{{get-cart.email}}'
          cart_value: '{{get-cart.cart_amount}}'
      - name: log-event
        type: call
        call: snowflake.insert-data
        with:
          table: CART_ABANDONMENT
          cart_id: '{{cart_id}}'
          value: '{{get-cart.cart_amount}}'
      - name: track-event
        type: call
        call: ga.send-event
        with:
          category: ecommerce
          action: cart_recovery_sent
          label: '{{cart_id}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: carts
      path: /carts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-cart
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: automations
      path: /automations
      operations:
      - name: send-automation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
  - type: http
    namespace: ga
    baseUri: https://www.google-analytics.com
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: collect
      path: /mp/collect
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → e-commerce-cart-abandonment-pipeline.yml

Retrieves test results from SAP quality module, generates certification documents in SharePoint, updates compliance tracker in Airtable, and notifies the legal team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Compliance Certification Pipeline
  description: Retrieves test results from SAP quality module, generates certification documents in SharePoint, updates compliance tracker in Airtable, and notifies the legal team via Microsoft Teams.
  tags:
  - compliance
  - sap
  - sharepoint
  - airtable
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-cert
    port: 8080
    tools:
    - name: certify-product
      description: Orchestrate product compliance certification across SAP, SharePoint, Airtable, and Teams.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: market
        in: body
        type: string
        description: The target market.
      steps:
      - name: get-test-results
        type: call
        call: sap.get-quality-results
        with:
          sku: '{{product_sku}}'
      - name: generate-cert
        type: call
        call: sharepoint.create-document
        with:
          site: compliance
          path: Certifications/{{product_sku}}/{{market}}
          template: compliance_certificate
      - name: update-tracker
        type: call
        call: airtable.create-record
        with:
          table: ComplianceTracker
          sku: '{{product_sku}}'
          market: '{{market}}'
          status: Certified
      - name: notify-legal
        type: call
        call: msteams.send-message
        with:
          channel_id: legal-compliance
          text: 'Product {{product_sku}} certified for {{market}}. Certificate: {{generate-cert.webUrl}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZQUALITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality
      path: /QualityResultSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-quality-results
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site}}/drive/root:/{{path}}
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: create-document
        method: PUT
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v0/appHasbro
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /ComplianceTracker
      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: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-compliance-certification-pipeline.yml

Fetches packaging design from Figma, routes for approval via Asana, archives approved assets in Box, and updates product metadata in SAP.

naftiko: '0.5'
info:
  label: Product Packaging Review Pipeline
  description: Fetches packaging design from Figma, routes for approval via Asana, archives approved assets in Box, and updates product metadata in SAP.
  tags:
  - packaging
  - figma
  - asana
  - box
  - sap
capability:
  exposes:
  - type: mcp
    namespace: packaging-review
    port: 8080
    tools:
    - name: review-packaging
      description: Orchestrate packaging design review across Figma, Asana, Box, and SAP.
      inputParameters:
      - name: design_key
        in: body
        type: string
        description: The Figma design file key.
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      steps:
      - name: get-design
        type: call
        call: figma.get-file
        with:
          key: '{{design_key}}'
      - name: create-review-task
        type: call
        call: asana.create-task
        with:
          name: 'Packaging Review: {{product_sku}}'
          notes: 'Review design: {{get-design.thumbnailUrl}}'
          project: packaging-reviews
      - name: archive-design
        type: call
        call: box.upload-file
        with:
          folder_id: packaging-assets
          file_name: '{{product_sku}}_packaging.fig'
      - name: update-product
        type: call
        call: sap.update-product
        with:
          sku: '{{product_sku}}'
          packaging_status: Under Review
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - 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
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /ProductSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: update-product
        method: PATCH
Open in Framework → View in Fleet → product-packaging-review-pipeline.yml

Retrieves an e-commerce order from BigCommerce by order ID, returning order status, total, and shipping details.

naftiko: '0.5'
info:
  label: BigCommerce Order Status Lookup
  description: Retrieves an e-commerce order from BigCommerce by order ID, returning order status, total, and shipping details.
  tags:
  - e-commerce
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: bigcommerce-orders
    port: 8080
    tools:
    - name: get-order
      description: Look up a BigCommerce order by order ID.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      call: bigcommerce.get-order
      with:
        id: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: total
        type: string
        mapping: $.total_inc_tax
      - name: shipping_method
        type: string
        mapping: $.shipping_addresses[0].shipping_method
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → bigcommerce-order-status-lookup.yml

Retrieves payroll summary from ADP for a given pay period.

naftiko: '0.5'
info:
  label: ADP Payroll Summary
  description: Retrieves payroll summary from ADP for a given pay period.
  tags:
  - hr
  - payroll
  - adp
capability:
  exposes:
  - type: mcp
    namespace: hr-payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Get payroll summary from ADP.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: The pay period identifier.
      call: adp.get-payroll
      with:
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: total_gross
        type: string
        mapping: $.payrollSummary.totalGross
      - name: total_net
        type: string
        mapping: $.payrollSummary.totalNet
      - name: employee_count
        type: integer
        mapping: $.payrollSummary.headcount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll-outputs?payPeriod={{pay_period}}
      inputParameters:
      - name: pay_period
        in: query
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-summary.yml

When a retail partner submits a large order via BigCommerce, validates inventory in SAP, creates a Salesforce opportunity, and notifies the sales team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Partner Order Pipeline
  description: When a retail partner submits a large order via BigCommerce, validates inventory in SAP, creates a Salesforce opportunity, and notifies the sales team in Microsoft Teams.
  tags:
  - retail
  - e-commerce
  - bigcommerce
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail-orders
    port: 8080
    tools:
    - name: process-retail-order
      description: Process a large retail partner order from BigCommerce.
      inputParameters:
      - name: bigcommerce_order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{bigcommerce_order_id}}'
      - name: check-inventory
        type: call
        call: sap.get-inventory-batch
        with:
          sku_list: '{{get-order.product_skus}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Retail Order: {{get-order.customer_name}} - {{get-order.total}}'
          amount: '{{get-order.total}}'
          stage: Proposal
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: retail-sales
          text: 'New retail order from {{get-order.customer_name}}: ${{get-order.total}}. Items: {{get-order.item_count}}. SF Opp: {{create-opportunity.Id}}.'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory-batch
      path: /InventoryBatchCheck
      operations:
      - name: get-inventory-batch
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-partner-order-pipeline.yml

Collects consumer reviews from Zendesk, analyzes sentiment via Azure Machine Learning, stores insights in Snowflake, and publishes a summary to Confluence.

naftiko: '0.5'
info:
  label: Consumer Feedback Analysis Pipeline
  description: Collects consumer reviews from Zendesk, analyzes sentiment via Azure Machine Learning, stores insights in Snowflake, and publishes a summary to Confluence.
  tags:
  - feedback
  - zendesk
  - azure-machine-learning
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: feedback-analysis
    port: 8080
    tools:
    - name: analyze-feedback
      description: Orchestrate consumer feedback analysis across Zendesk, Azure ML, Snowflake, and Confluence.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU to analyze feedback for.
      - name: date_range
        in: body
        type: string
        description: The date range for feedback collection.
      steps:
      - name: collect-reviews
        type: call
        call: zendesk.search-tickets
        with:
          query: product:{{product_sku}} created:{{date_range}}
      - name: analyze-sentiment
        type: call
        call: azureml.score-sentiment
        with:
          texts: '{{collect-reviews.results}}'
      - name: store-insights
        type: call
        call: snowflake.insert-data
        with:
          table: CONSUMER_SENTIMENT
          data: '{{analyze-sentiment.predictions}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: PRODUCT
          title: 'Feedback Analysis: {{product_sku}} - {{date_range}}'
          body: 'Sentiment Score: {{analyze-sentiment.average_score}}. Total Reviews: {{collect-reviews.count}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://hasbro.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: search
      path: /search.json
      operations:
      - name: search-tickets
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://hasbro-ml.azureml.net
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-sentiment
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-data
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → consumer-feedback-analysis-pipeline.yml

Retrieves project status from Asana by project GID, returning project name, current status, owner, and due date.

naftiko: '0.5'
info:
  label: Asana Project Status Lookup
  description: Retrieves project status from Asana by project GID, returning project name, current status, owner, and due date.
  tags:
  - project-management
  - asana
capability:
  exposes:
  - type: mcp
    namespace: asana-projects
    port: 8080
    tools:
    - name: get-project-status
      description: Look up an Asana project status by project GID.
      inputParameters:
      - name: project_gid
        in: body
        type: string
        description: The Asana project GID.
      call: asana.get-project
      with:
        gid: '{{project_gid}}'
      outputParameters:
      - name: project_name
        type: string
        mapping: $.data.name
      - name: status
        type: string
        mapping: $.data.current_status.text
  consumes:
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: projects
      path: /projects/{{gid}}
      inputParameters:
      - name: gid
        in: path
      operations:
      - name: get-project
        method: GET
Open in Framework → View in Fleet → asana-project-status-lookup.yml

Analyzes purchase history in Snowflake, generates product recommendations via Azure Machine Learning, publishes to BigCommerce, and sends personalized emails via MailChimp.

naftiko: '0.5'
info:
  label: Cross-Sell Recommendation Pipeline
  description: Analyzes purchase history in Snowflake, generates product recommendations via Azure Machine Learning, publishes to BigCommerce, and sends personalized emails via MailChimp.
  tags:
  - e-commerce
  - snowflake
  - azure-machine-learning
  - bigcommerce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: cross-sell
    port: 8080
    tools:
    - name: generate-recommendations
      description: Orchestrate cross-sell recommendations across Snowflake, Azure ML, BigCommerce, and MailChimp.
      inputParameters:
      - name: customer_segment
        in: body
        type: string
        description: The customer segment.
      steps:
      - name: get-purchase-history
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM PURCHASE_HISTORY WHERE segment='{{customer_segment}}'
      - name: get-recommendations
        type: call
        call: azureml.score-recommendations
        with:
          data: '{{get-purchase-history.results}}'
      - name: update-storefront
        type: call
        call: bigcommerce.update-recommendations
        with:
          segment: '{{customer_segment}}'
          products: '{{get-recommendations.top_products}}'
      - name: send-emails
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: '{{customer_segment}}'
          subject: Products You Might Love
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: azureml
    baseUri: https://hasbro-ml.azureml.net
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-recommendations
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: recommendations
      path: /catalog/products/recommendations
      operations:
      - name: update-recommendations
        method: PUT
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → cross-sell-recommendation-pipeline.yml

Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and last update timestamp.

naftiko: '0.5'
info:
  label: Zendesk Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and last update timestamp.
  tags:
  - support
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: zendesk-tickets
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk support ticket by ID.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        id: '{{ticket_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
      - name: assignee
        type: string
        mapping: $.ticket.assignee_id
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://hasbro.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-support-ticket-lookup.yml

Retrieves sprint status for a product development Jira project, returning completed stories, remaining work, and velocity.

naftiko: '0.5'
info:
  label: Jira Product Development Tracker
  description: Retrieves sprint status for a product development Jira project, returning completed stories, remaining work, and velocity.
  tags:
  - product-development
  - jira
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: product-dev
    port: 8080
    tools:
    - name: get-sprint-status
      description: Get the active sprint status for a Jira project.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira.get-sprint-summary
      with:
        project_key: '{{project_key}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.active_sprint.name
      - name: completed_stories
        type: integer
        mapping: $.completed_count
      - name: remaining_points
        type: integer
        mapping: $.remaining_points
  consumes:
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search?jql=project={{project_key}} AND sprint in openSprints()
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-sprint-summary
        method: GET
Open in Framework → View in Fleet → jira-product-development-tracker.yml

Creates an influencer campaign in HubSpot, generates a contract via DocuSign, tracks deliverables in Asana, and monitors social metrics via Instagram API.

naftiko: '0.5'
info:
  label: Influencer Collaboration Pipeline
  description: Creates an influencer campaign in HubSpot, generates a contract via DocuSign, tracks deliverables in Asana, and monitors social metrics via Instagram API.
  tags:
  - marketing
  - hubspot
  - docusign
  - asana
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: influencer-collab
    port: 8080
    tools:
    - name: launch-influencer-campaign
      description: Orchestrate influencer collaboration across HubSpot, DocuSign, Asana, and Instagram.
      inputParameters:
      - name: influencer_name
        in: body
        type: string
        description: The influencer name.
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      steps:
      - name: create-campaign
        type: call
        call: hubspot.create-campaign
        with:
          name: '{{campaign_name}} - {{influencer_name}}'
      - name: create-contract
        type: call
        call: docusign.create-envelope
        with:
          template_id: influencer_contract
          signer_name: '{{influencer_name}}'
      - name: create-deliverables
        type: call
        call: asana.create-task
        with:
          name: '{{influencer_name}} Deliverables - {{campaign_name}}'
          project: influencer-campaigns
      - name: setup-tracking
        type: call
        call: instagram.create-media-tracker
        with:
          campaign_id: '{{create-campaign.id}}'
          hashtag: '#Hasbro{{campaign_name}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /marketing/v3/campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/hasbro
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media-tracker
      path: /ig_hashtag_search
      operations:
      - name: create-media-tracker
        method: GET
Open in Framework → View in Fleet → influencer-collaboration-pipeline.yml

Monitors social media mentions via HubSpot, checks against brand trademark data in SAP, creates a Jira legal task, and alerts the legal team in Microsoft Teams.

naftiko: '0.5'
info:
  label: IP Infringement Detection Pipeline
  description: Monitors social media mentions via HubSpot, checks against brand trademark data in SAP, creates a Jira legal task, and alerts the legal team in Microsoft Teams.
  tags:
  - legal
  - intellectual-property
  - hubspot
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ip-protection
    port: 8080
    tools:
    - name: flag-ip-infringement
      description: Flag a potential IP infringement, check trademarks, and escalate to legal.
      inputParameters:
      - name: mention_url
        in: body
        type: string
        description: The URL of the suspected infringing content.
      - name: brand_name
        in: body
        type: string
        description: The Hasbro brand or trademark name.
      steps:
      - name: get-trademark
        type: call
        call: sap.get-trademark
        with:
          brand: '{{brand_name}}'
      - name: create-legal-task
        type: call
        call: jira.create-issue
        with:
          project_key: LEGAL
          summary: 'IP infringement: {{brand_name}}'
          issue_type: Task
          priority: High
          description: 'Suspected IP infringement for {{brand_name}} (TM #{{get-trademark.registration_number}}). URL: {{mention_url}}.'
      - name: notify-legal
        type: call
        call: msteams.send-message
        with:
          channel_id: legal-ip
          text: 'IP Alert: Suspected infringement for {{brand_name}}. Jira: {{create-legal-task.key}}. URL: {{mention_url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLI_IP_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: trademarks
      path: /TrademarkSet('{{brand}}')
      inputParameters:
      - name: brand
        in: path
      operations:
      - name: get-trademark
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ip-infringement-detection-pipeline.yml

On low-stock alert, checks SAP inventory levels, creates a replenishment purchase order, notifies the supply chain team via Slack, and updates the Google Sheets demand tracker.

naftiko: '0.5'
info:
  label: Holiday Inventory Replenishment Pipeline
  description: On low-stock alert, checks SAP inventory levels, creates a replenishment purchase order, notifies the supply chain team via Slack, and updates the Google Sheets demand tracker.
  tags:
  - inventory
  - sap
  - slack
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: holiday-replenishment
    port: 8080
    tools:
    - name: replenish-inventory
      description: Orchestrate holiday inventory replenishment across SAP, Slack, and Google Sheets.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: target_quantity
        in: body
        type: string
        description: The target restock quantity.
      steps:
      - name: check-stock
        type: call
        call: sap.get-stock-level
        with:
          sku: '{{product_sku}}'
      - name: create-po
        type: call
        call: sap.create-purchase-order
        with:
          material: '{{product_sku}}'
          quantity: '{{target_quantity}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: supply-chain
          text: 'Replenishment PO {{create-po.PONumber}} created for {{product_sku}}. Qty: {{target_quantity}}'
      - name: update-tracker
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: demand-tracker
          values: '{{product_sku}},{{target_quantity}},{{create-po.PONumber}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /StockLevelSet('{{sku}}')
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: get-stock-level
        method: GET
    - name: purchase-orders
      path: /PurchaseOrderSet
      operations:
      - name: create-purchase-order
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → holiday-inventory-replenishment-pipeline.yml

Retrieves engagement metrics for an Instagram post by media ID, returning impressions, reach, likes, and comments count.

naftiko: '0.5'
info:
  label: Instagram Post Metrics Lookup
  description: Retrieves engagement metrics for an Instagram post by media ID, returning impressions, reach, likes, and comments count.
  tags:
  - social-media
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: instagram-metrics
    port: 8080
    tools:
    - name: get-post-metrics
      description: Look up Instagram post engagement metrics by media ID.
      inputParameters:
      - name: media_id
        in: body
        type: string
        description: The Instagram media ID.
      call: instagram.get-insights
      with:
        id: '{{media_id}}'
      outputParameters:
      - name: impressions
        type: string
        mapping: $.data[0].values[0].value
      - name: reach
        type: string
        mapping: $.data[1].values[0].value
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media-insights
      path: /{{id}}/insights?metric=impressions,reach
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → instagram-post-metrics-lookup.yml

Aggregates royalty data from Snowflake, generates a formatted report in Google Sheets, uploads to SharePoint, and distributes to licensees via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Quarterly Royalty Reporting Pipeline
  description: Aggregates royalty data from Snowflake, generates a formatted report in Google Sheets, uploads to SharePoint, and distributes to licensees via Microsoft Outlook.
  tags:
  - finance
  - snowflake
  - google-sheets
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: royalty-reporting
    port: 8080
    tools:
    - name: generate-royalty-report
      description: Orchestrate quarterly royalty reporting across Snowflake, Google Sheets, SharePoint, and Outlook.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The reporting quarter (e.g., Q1-2026).
      - name: licensee_id
        in: body
        type: string
        description: The licensee partner ID.
      steps:
      - name: query-royalties
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM ROYALTIES WHERE quarter='{{quarter}}' AND licensee='{{licensee_id}}'
      - name: create-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Royalty Report - {{licensee_id}} - {{quarter}}
          data: '{{query-royalties.data}}'
      - name: archive-report
        type: call
        call: sharepoint.upload-file
        with:
          site: finance
          path: Royalties/{{quarter}}/{{licensee_id}}
          file_url: '{{create-report.spreadsheetUrl}}'
      - name: send-report
        type: call
        call: outlook.send-email
        with:
          to: '{{licensee_id}}@partners.hasbro.com'
          subject: '{{quarter}} Royalty Report'
          body: 'Your quarterly royalty report is ready: {{create-report.spreadsheetUrl}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site}}/drive/root:/{{path}}
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → quarterly-royalty-reporting-pipeline.yml

Retrieves latest style guide from SharePoint, distributes to licensees via Box shared links, notifies partners via Microsoft Outlook, and tracks access in Airtable.

naftiko: '0.5'
info:
  label: Brand Style Guide Distribution Pipeline
  description: Retrieves latest style guide from SharePoint, distributes to licensees via Box shared links, notifies partners via Microsoft Outlook, and tracks access in Airtable.
  tags:
  - brand
  - sharepoint
  - box
  - microsoft-outlook
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: style-guide-dist
    port: 8080
    tools:
    - name: distribute-style-guide
      description: Orchestrate brand style guide distribution across SharePoint, Box, Outlook, and Airtable.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand name.
      - name: version
        in: body
        type: string
        description: The style guide version.
      steps:
      - name: get-guide
        type: call
        call: sharepoint.get-file
        with:
          site: brand-assets
          path: StyleGuides/{{brand}}/v{{version}}
      - name: create-shared-link
        type: call
        call: box.create-shared-link
        with:
          file_id: '{{get-guide.id}}'
          access: collaborators
      - name: notify-partners
        type: call
        call: outlook.send-email
        with:
          to: licensees@hasbro.com
          subject: Updated {{brand}} Style Guide v{{version}}
          body: 'Access the latest style guide: {{create-shared-link.url}}'
      - name: track-distribution
        type: call
        call: airtable.create-record
        with:
          table: StyleGuideDistribution
          brand: '{{brand}}'
          version: '{{version}}'
  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}}/drive/root:/{{path}}
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: shared-links
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: create-shared-link
        method: PUT
  - type: http
    namespace: outlook
    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: airtable
    baseUri: https://api.airtable.com/v0/appHasbro
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /StyleGuideDistribution
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → brand-style-guide-distribution-pipeline.yml

Pulls inventory data from SAP and writes it to a Google Sheets dashboard for retail operations visibility.

naftiko: '0.5'
info:
  label: Google Sheets Retail Inventory Dashboard
  description: Pulls inventory data from SAP and writes it to a Google Sheets dashboard for retail operations visibility.
  tags:
  - retail
  - reporting
  - google-sheets
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sheets-inventory
    port: 8080
    tools:
    - name: sync-inventory-dashboard
      description: Pull SAP inventory data and update Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets ID.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse code.
      steps:
      - name: get-inventory
        type: call
        call: sap.get-warehouse-inventory
        with:
          warehouse: '{{warehouse_code}}'
      - name: update-sheet
        type: call
        call: gsheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Inventory!A2:D2
          values:
          - - '{{warehouse_code}}'
            - '{{get-inventory.total_skus}}'
            - '{{get-inventory.total_units}}'
            - '{{get-inventory.fill_rate}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: warehouse-inventory
      path: /WarehouseInventorySet('{{warehouse}}')
      inputParameters:
      - name: warehouse
        in: path
      operations:
      - name: get-warehouse-inventory
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → google-sheets-retail-inventory-dashboard.yml

Retrieves a Tableau workbook view for brand performance metrics, returning the view URL and last refresh timestamp.

naftiko: '0.5'
info:
  label: Tableau Brand Performance Report
  description: Retrieves a Tableau workbook view for brand performance metrics, returning the view URL and last refresh timestamp.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-reports
    port: 8080
    tools:
    - name: get-brand-report
      description: Retrieve Tableau brand performance report by brand name.
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The brand name to filter the report.
      call: tableau.get-view
      with:
        brand: '{{brand_name}}'
      outputParameters:
      - name: view_url
        type: string
        mapping: $.view.contentUrl
      - name: last_refresh
        type: string
        mapping: $.view.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.hasbro.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/hasbro/views?filter=name:eq:BrandPerformance_{{brand}}
      inputParameters:
      - name: brand
        in: path
      operations:
      - name: get-view
        method: GET
Open in Framework → View in Fleet → tableau-brand-performance-report.yml

Pulls sales data from SAP and pushes to a Power BI dataset for real-time dashboard visibility.

naftiko: '0.5'
info:
  label: Power BI Sales Dashboard Sync
  description: Pulls sales data from SAP and pushes to a Power BI dataset for real-time dashboard visibility.
  tags:
  - analytics
  - power-bi
  - sap
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-dashboard
    port: 8080
    tools:
    - name: sync-sales-data
      description: Pull SAP sales data and push to Power BI.
      inputParameters:
      - name: period
        in: body
        type: string
        description: The sales period to sync.
      steps:
      - name: get-sales
        type: call
        call: sap.get-sales-summary
        with:
          period: '{{period}}'
      - name: push-to-bi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: sales_dashboard_ds
          table_name: Sales
          rows:
          - period: '{{period}}'
            total_revenue: '{{get-sales.total_revenue}}'
            units_sold: '{{get-sales.units_sold}}'
            top_product: '{{get-sales.top_product}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_SALES_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales
      path: /SalesSummarySet('{{period}}')
      inputParameters:
      - name: period
        in: path
      operations:
      - name: get-sales-summary
        method: GET
  - 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}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → power-bi-sales-dashboard-sync.yml

Retrieves product roadmap entries from Airtable by product line, returning feature name, status, target quarter, and priority.

naftiko: '0.5'
info:
  label: Airtable Product Roadmap Lookup
  description: Retrieves product roadmap entries from Airtable by product line, returning feature name, status, target quarter, and priority.
  tags:
  - product
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: airtable-roadmap
    port: 8080
    tools:
    - name: get-roadmap-items
      description: Look up product roadmap items in Airtable by product line.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line to filter.
      call: airtable.list-records
      with:
        filter: '{{product_line}}'
      outputParameters:
      - name: feature_name
        type: string
        mapping: $.records[0].fields.Feature
      - name: status
        type: string
        mapping: $.records[0].fields.Status
  consumes:
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v0/appHasbro
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: roadmap
      path: /ProductRoadmap?filterByFormula={ProductLine}='{{filter}}'
      inputParameters:
      - name: filter
        in: path
      operations:
      - name: list-records
        method: GET
Open in Framework → View in Fleet → airtable-product-roadmap-lookup.yml

On critical alert from Datadog, creates a ServiceNow incident, pages on-call via Slack, opens a Zoom bridge, and updates the status page.

naftiko: '0.5'
info:
  label: IT Incident Escalation Pipeline
  description: On critical alert from Datadog, creates a ServiceNow incident, pages on-call via Slack, opens a Zoom bridge, and updates the status page.
  tags:
  - incident
  - datadog
  - servicenow
  - slack
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-incident
      description: Orchestrate IT incident escalation across Datadog, ServiceNow, Slack, and Zoom.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert ID.
      - name: severity
        in: body
        type: string
        description: The incident severity.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-alert
        with:
          id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '{{get-alert.title}}'
          urgency: '{{severity}}'
          category: Infrastructure
      - name: page-oncall
        type: call
        call: slack.post-message
        with:
          channel: incident-response
          text: 'P{{severity}} INCIDENT: {{get-alert.title}}. ServiceNow: {{create-incident.number}}'
      - name: create-bridge
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Incident Bridge: {{create-incident.number}}'
          type: instant
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: alerts
      path: /monitor/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → it-incident-escalation-pipeline.yml

Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.

naftiko: '0.5'
info:
  label: ServiceNow IT Ticket Status
  description: Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.
  tags:
  - it-service
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-tickets
    port: 8080
    tools:
    - name: get-ticket-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[0].state
      - name: priority
        type: string
        mapping: $.result[0].priority
      - name: assigned_group
        type: string
        mapping: $.result[0].assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-it-ticket-status.yml

When a customer complaint arrives via Zendesk, retrieves order details from SAP, creates a Salesforce case, and notifies the product team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint Handler
  description: When a customer complaint arrives via Zendesk, retrieves order details from SAP, creates a Salesforce case, and notifies the product team in Microsoft Teams.
  tags:
  - customer-service
  - zendesk
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-handling
    port: 8080
    tools:
    - name: handle-complaint
      description: Process a customer complaint by pulling order data, creating a case, and alerting the product team.
      inputParameters:
      - name: zendesk_ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: order_number
        in: body
        type: string
        description: The SAP sales order number.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{zendesk_ticket_id}}'
      - name: get-order
        type: call
        call: sap.get-order
        with:
          order_number: '{{order_number}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Complaint: {{get-ticket.subject}}'
          description: 'Zendesk #{{zendesk_ticket_id}}: {{get-ticket.description}}. Product: {{get-order.ProductName}}. Order: {{order_number}}.'
      - name: notify-product
        type: call
        call: msteams.send-message
        with:
          channel_id: product-quality
          text: 'Customer complaint for {{get-order.ProductName}}: {{get-ticket.subject}}. SF Case: {{create-case.CaseNumber}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://hasbro.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /SalesOrderSet('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-handler.yml

On product launch, creates a Salesforce campaign, publishes product assets to SharePoint, sends launch announcement to Microsoft Teams, and posts to social media via HubSpot.

naftiko: '0.5'
info:
  label: New Product Launch Orchestrator
  description: On product launch, creates a Salesforce campaign, publishes product assets to SharePoint, sends launch announcement to Microsoft Teams, and posts to social media via HubSpot.
  tags:
  - product
  - launch
  - salesforce
  - sharepoint
  - microsoft-teams
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: launch-product
      description: Orchestrate a new product launch across Salesforce, SharePoint, Teams, and HubSpot.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU.
      - name: launch_date
        in: body
        type: string
        description: The launch date in YYYY-MM-DD format.
      - name: product_name
        in: body
        type: string
        description: The product display name.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Launch: {{product_name}}'
          start_date: '{{launch_date}}'
          type: Product Launch
          status: Planned
      - name: upload-assets
        type: call
        call: sharepoint.create-folder
        with:
          site_id: marketing_site
          folder_path: ProductLaunches/{{product_sku}}_{{product_name}}
      - name: announce-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: product-launches
          text: 'New product launch: {{product_name}} ({{product_sku}}) on {{launch_date}}. Campaign: {{create-campaign.Id}}. Assets: {{upload-assets.url}}.'
      - name: schedule-social
        type: call
        call: hubspot.create-social-post
        with:
          content: 'Exciting news! {{product_name}} is coming {{launch_date}}! #Hasbro #Toys #NewRelease'
          campaign_id: '{{create-campaign.Id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        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: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social-posts
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-social-post
        method: POST
Open in Framework → View in Fleet → new-product-launch-orchestrator.yml

Pulls training completion data from Pluralsight, syncs with Workday employee records, generates compliance reports in Google Sheets, and alerts managers via Slack.

naftiko: '0.5'
info:
  label: Training Compliance Tracker Pipeline
  description: Pulls training completion data from Pluralsight, syncs with Workday employee records, generates compliance reports in Google Sheets, and alerts managers via Slack.
  tags:
  - training
  - pluralsight
  - workday
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: track-compliance
      description: Orchestrate training compliance tracking across Pluralsight, Workday, Google Sheets, and Slack.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department.
      - name: course_id
        in: body
        type: string
        description: The required course ID.
      steps:
      - name: get-completions
        type: call
        call: pluralsight.get-course-completions
        with:
          course: '{{course_id}}'
      - name: get-employees
        type: call
        call: workday.get-department-roster
        with:
          department: '{{department}}'
      - name: generate-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: 'Training Compliance: {{department}} - {{course_id}}'
      - name: alert-managers
        type: call
        call: slack.post-message
        with:
          channel: '{{department}}-managers'
          text: 'Training compliance report ready. Completion rate: {{get-completions.rate}}%'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: completions
      path: /courses/{{course}}/completions
      inputParameters:
      - name: course
        in: path
      operations:
      - name: get-course-completions
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/hasbro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: departments
      path: /Human_Resources/Departments/{{department}}
      inputParameters:
      - name: department
        in: path
      operations:
      - name: get-department-roster
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → training-compliance-tracker-pipeline.yml

Retrieves a Salesforce opportunity by ID, returning deal stage, amount, close date, and account name.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID, returning deal stage, amount, close date, and account name.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce-opps
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      call: salesforce.get-opportunity
      with:
        id: '{{opportunity_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: string
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-lookup.yml

Looks up a SAP sales order and returns status, customer, total value, and shipping date.

naftiko: '0.5'
info:
  label: SAP Sales Order Status
  description: Looks up a SAP sales order and returns status, customer, total value, and shipping date.
  tags:
  - sales
  - sap
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: sales-orders
    port: 8080
    tools:
    - name: get-sales-order
      description: Look up a SAP sales order by number.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP sales order number.
      call: sap.get-sales-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: customer
        type: string
        mapping: $.d.CustomerName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: ship_date
        type: string
        mapping: $.d.ShipDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /SalesOrderSet('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-sales-order
        method: GET
Open in Framework → View in Fleet → sap-sales-order-status.yml

Pulls supplier data from SAP Ariba, creates an audit checklist in ServiceNow, assigns an auditor via Workday, and notifies the quality team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Quality Audit Orchestrator
  description: Pulls supplier data from SAP Ariba, creates an audit checklist in ServiceNow, assigns an auditor via Workday, and notifies the quality team in Microsoft Teams.
  tags:
  - procurement
  - quality
  - sap-ariba
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-audit
    port: 8080
    tools:
    - name: initiate-supplier-audit
      description: Initiate a supplier quality audit across Ariba, ServiceNow, and Workday.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-audit
        type: call
        call: servicenow.create-record
        with:
          table: u_supplier_audits
          short_description: 'Quality audit: {{get-supplier.name}}'
          description: 'Supplier: {{get-supplier.name}}. Category: {{get-supplier.category}}. Last audit: {{get-supplier.last_audit_date}}.'
          assigned_group: Quality_Assurance
      - name: get-auditor
        type: call
        call: workday.get-available-auditor
        with:
          department: Quality
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-audits
          text: 'Supplier audit initiated for {{get-supplier.name}}. Auditor: {{get-auditor.full_name}}. ServiceNow: {{create-audit.number}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v2
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hasbro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        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: auditors
      path: /workers?department={{department}}&role=auditor
      inputParameters:
      - name: department
        in: query
      operations:
      - name: get-available-auditor
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-quality-audit-orchestrator.yml

Validates production batch in SAP quality module, updates batch status, creates inspection report in Confluence, and alerts quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Quality Gate Pipeline
  description: Validates production batch in SAP quality module, updates batch status, creates inspection report in Confluence, and alerts quality team via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-gate
    port: 8080
    tools:
    - name: process-quality-gate
      description: Orchestrate manufacturing quality gate across SAP, Confluence, and Teams.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The production batch ID.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: validate-batch
        type: call
        call: sap.get-batch-results
        with:
          batch: '{{batch_id}}'
      - name: update-status
        type: call
        call: sap.update-batch-status
        with:
          batch: '{{batch_id}}'
          status: '{{result}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space_key: QUALITY
          title: 'Inspection Report: Batch {{batch_id}}'
          body: 'Result: {{result}}. Details: {{validate-batch.details}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-control
          text: 'Quality gate {{result}} for batch {{batch_id}}. Report: {{create-report.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZQUALITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /BatchSet('{{batch}}')
      inputParameters:
      - name: batch
        in: path
      operations:
      - name: get-batch-results
        method: GET
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-quality-gate-pipeline.yml

Creates a media buy request in Salesforce, routes for budget approval via Jira, submits to Facebook Ads Manager, and tracks spend in Google Sheets.

naftiko: '0.5'
info:
  label: Media Buy Approval Pipeline
  description: Creates a media buy request in Salesforce, routes for budget approval via Jira, submits to Facebook Ads Manager, and tracks spend in Google Sheets.
  tags:
  - advertising
  - salesforce
  - jira
  - facebook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: media-buy
    port: 8080
    tools:
    - name: approve-media-buy
      description: Orchestrate media buy approval across Salesforce, Jira, Facebook, and Google Sheets.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: budget
        in: body
        type: string
        description: The media buy budget.
      steps:
      - name: create-request
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Media Buy: {{campaign_name}}'
          amount: '{{budget}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: MEDIA
          summary: 'Approve media buy: {{campaign_name}} - ${{budget}}'
          type: Approval
      - name: submit-ad
        type: call
        call: facebook.create-ad-set
        with:
          campaign: '{{campaign_name}}'
          budget: '{{budget}}'
      - name: track-spend
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: media-spend
          values: '{{campaign_name}},{{budget}},Pending'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hasbro.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
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: ad-sets
      path: /act_hasbro/adsets
      operations:
      - name: create-ad-set
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → media-buy-approval-pipeline.yml

Sends a message to a specified Slack channel, returning the message timestamp and channel confirmation.

naftiko: '0.5'
info:
  label: Slack Channel Message Sender
  description: Sends a message to a specified Slack channel, returning the message timestamp and channel confirmation.
  tags:
  - communications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-messaging
    port: 8080
    tools:
    - name: send-message
      description: Send a message to a Slack channel.
      inputParameters:
      - name: channel_name
        in: body
        type: string
        description: The Slack channel name.
      - name: message_text
        in: body
        type: string
        description: The message content.
      call: slack.post-message
      with:
        channel: '{{channel_name}}'
        text: '{{message_text}}'
      outputParameters:
      - name: timestamp
        type: string
        mapping: $.ts
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-channel-message-sender.yml

On digital game release, triggers the Unity build pipeline via Azure DevOps, publishes release notes to Confluence, posts announcement to Discord, and updates the product listing on BigCommerce.

naftiko: '0.5'
info:
  label: Digital Game Release Pipeline
  description: On digital game release, triggers the Unity build pipeline via Azure DevOps, publishes release notes to Confluence, posts announcement to Discord, and updates the product listing on BigCommerce.
  tags:
  - gaming
  - azure-devops
  - confluence
  - discord
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: game-release
    port: 8080
    tools:
    - name: release-game
      description: Orchestrate a digital game release across Azure DevOps, Confluence, Discord, and BigCommerce.
      inputParameters:
      - name: game_title
        in: body
        type: string
        description: The game title.
      - name: version
        in: body
        type: string
        description: The release version.
      steps:
      - name: trigger-build
        type: call
        call: azuredevops.queue-build
        with:
          definition_id: game-build-pipeline
          parameters: '{"game":"{{game_title}}","version":"{{version}}"}'
      - name: publish-notes
        type: call
        call: confluence.create-page
        with:
          space_key: GAMES
          title: '{{game_title}} v{{version}} Release Notes'
          parent_id: release-notes
      - name: announce-discord
        type: call
        call: discord.send-message
        with:
          channel_id: game-releases
          content: '{{game_title}} v{{version}} is now available! Build: {{trigger-build.buildId}}'
      - name: update-listing
        type: call
        call: bigcommerce.update-product
        with:
          name: '{{game_title}}'
          version: '{{version}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/hasbro/games/_apis
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: builds
      path: /build/builds?api-version=7.0
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hasbro.atlassian.net/wiki/api/v2
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: discord
    baseUri: https://discord.com/api/v10
    authentication:
      type: bearer
      token: $secrets.discord_bot_token
    resources:
    - name: messages
      path: /channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: update-product
        method: PUT
Open in Framework → View in Fleet → digital-game-release-pipeline.yml

Retrieves a travel expense report from SAP Concur, validates against budget, and creates a Jira approval task.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Report
  description: Retrieves a travel expense report from SAP Concur, validates against budget, and creates a Jira approval task.
  tags:
  - finance
  - travel
  - sap-concur
  - jira
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: process-expense-report
      description: Validate a Concur expense report and route for approval.
      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: create-approval
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          summary: 'Expense review: {{get-report.employee_name}} - {{get-report.total_amount}} {{get-report.currency}}'
          issue_type: Task
          description: 'Expense report {{report_id}}. Total: {{get-report.total_amount}} {{get-report.currency}}. Flagged items: {{get-report.flagged_count}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hasbro.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-report.yml

Queries the Teradata data warehouse for historical sales data by product line and region.

naftiko: '0.5'
info:
  label: Teradata Sales Data Warehouse Query
  description: Queries the Teradata data warehouse for historical sales data by product line and region.
  tags:
  - analytics
  - data-warehouse
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: sales-dwh
    port: 8080
    tools:
    - name: query-sales-history
      description: Query Teradata for historical sales by product line.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line.
      - name: region
        in: body
        type: string
        description: The sales region.
      call: teradata.query-sales
      with:
        product_line: '{{product_line}}'
        region: '{{region}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.results.total_revenue
      - name: total_units
        type: integer
        mapping: $.results.total_units
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://hasbro-td.teradata.com/api/query/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /execute
      operations:
      - name: query-sales
        method: POST
Open in Framework → View in Fleet → teradata-sales-data-warehouse-query.yml

Creates a promotion in SAP, publishes to BigCommerce storefront, sends retailer notifications via MailChimp, and tracks in Google Sheets.

naftiko: '0.5'
info:
  label: Retail Promotion Activation Pipeline
  description: Creates a promotion in SAP, publishes to BigCommerce storefront, sends retailer notifications via MailChimp, and tracks in Google Sheets.
  tags:
  - promotions
  - sap
  - bigcommerce
  - mailchimp
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: promotion-activation
    port: 8080
    tools:
    - name: activate-promotion
      description: Orchestrate retail promotion activation across SAP, BigCommerce, MailChimp, and Google Sheets.
      inputParameters:
      - name: promo_name
        in: body
        type: string
        description: The promotion name.
      - name: discount_percent
        in: body
        type: string
        description: The discount percentage.
      - name: start_date
        in: body
        type: string
        description: The promotion start date.
      steps:
      - name: create-sap-promo
        type: call
        call: sap.create-promotion
        with:
          name: '{{promo_name}}'
          discount: '{{discount_percent}}'
          start: '{{start_date}}'
      - name: publish-storefront
        type: call
        call: bigcommerce.create-coupon
        with:
          name: '{{promo_name}}'
          discount: '{{discount_percent}}'
      - name: notify-retailers
        type: call
        call: mailchimp.send-campaign
        with:
          subject: 'New Promotion: {{promo_name}} - {{discount_percent}}% off'
          list_id: retail-partners
      - name: track-promo
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: promotion-tracker
          values: '{{promo_name}},{{discount_percent}},{{start_date}},Active'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPROMOTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: promotions
      path: /PromotionSet
      operations:
      - name: create-promotion
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/hasbro/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: coupons
      path: /coupons
      operations:
      - name: create-coupon
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → retail-promotion-activation-pipeline.yml

Retrieves a Figma design file by key, returning file name, last modified date, and thumbnail URL.

naftiko: '0.5'
info:
  label: Figma Design File Lookup
  description: Retrieves a Figma design file by key, returning file name, last modified date, and thumbnail URL.
  tags:
  - design
  - figma
capability:
  exposes:
  - type: mcp
    namespace: figma-files
    port: 8080
    tools:
    - name: get-design-file
      description: Look up a Figma design file by file key.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: The Figma file key.
      call: figma.get-file
      with:
        key: '{{file_key}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: last_modified
        type: string
        mapping: $.lastModified
      - name: thumbnail_url
        type: string
        mapping: $.thumbnailUrl
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → figma-design-file-lookup.yml

Executes a parameterized query against Snowflake to retrieve aggregated sales data by product category and date range.

naftiko: '0.5'
info:
  label: Snowflake Sales Data Query
  description: Executes a parameterized query against Snowflake to retrieve aggregated sales data by product category and date range.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-sales
    port: 8080
    tools:
    - name: query-sales
      description: Query aggregated sales data from Snowflake by category.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The product category to filter.
      call: snowflake.run-query
      with:
        category: '{{category}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.data[0].TOTAL_REVENUE
      - name: units_sold
        type: string
        mapping: $.data[0].UNITS_SOLD
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hasbro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-sales-data-query.yml

Processes B2B customer sample requests by creating a Salesforce case, generating a SAP sample delivery, and notifying the sales rep via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Sample Request Orchestrator
  description: Processes B2B customer sample requests by creating a Salesforce case, generating a SAP sample delivery, and notifying the sales rep via Microsoft Teams.
  tags:
  - sales
  - samples
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sample-request
    port: 8080
    tools:
    - name: process-sample-request
      description: Orchestrate a customer product sample request.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: material_number
        in: body
        type: string
        description: The material to sample.
      - name: quantity
        in: body
        type: integer
        description: Sample quantity.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          account_id: '{{customer_id}}'
          subject: 'Sample request: {{material_number}}'
          type: sample_request
      - name: create-sample-delivery
        type: call
        call: sap.create-sample-order
        with:
          customer: '{{customer_id}}'
          material: '{{material_number}}'
          quantity: '{{quantity}}'
      - name: notify-sales-rep
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-notifications
          text: 'Sample request processed for customer {{customer_id}}: {{material_number}} x{{quantity}}. Case: {{create-case.case_number}}. SAP order: {{create-sample-delivery.order_number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://henkel.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: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZSD_SAMPLE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: samples
      path: /SampleOrderSet
      operations:
      - name: create-sample-order
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-sample-request-orchestrator.yml

Escalates adhesive technical support requests by retrieving product specs from SAP, creating a Zendesk escalation ticket, and routing to the appropriate technical specialist via Workday.

naftiko: '0.5'
info:
  label: Adhesive Customer Technical Support Escalation
  description: Escalates adhesive technical support requests by retrieving product specs from SAP, creating a Zendesk escalation ticket, and routing to the appropriate technical specialist via Workday.
  tags:
  - customer-service
  - technical-support
  - sap
  - zendesk
  - workday
capability:
  exposes:
  - type: mcp
    namespace: tech-support-escalation
    port: 8080
    tools:
    - name: escalate-tech-support
      description: Escalate a technical support request for adhesive products.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The existing Zendesk ticket ID.
      - name: product_code
        in: body
        type: string
        description: The adhesive product code.
      - name: application_type
        in: body
        type: string
        description: The customer application type.
      steps:
      - name: get-product-specs
        type: call
        call: sap.get-material
        with:
          material_id: '{{product_code}}'
      - name: find-specialist
        type: call
        call: workday.search-workers
        with:
          query: technical_specialist_adhesive_{{application_type}}
      - name: escalate-ticket
        type: call
        call: zendesk.update-ticket
        with:
          ticket_id: '{{ticket_id}}'
          priority: high
          assignee_email: '{{find-specialist.workers[0].work_email}}'
          internal_note: 'Escalated for {{application_type}} application. Product: {{get-product-specs.product_name}}. Specialist: {{find-specialist.workers[0].fullName}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /MaterialSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers?search={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: zendesk
    baseUri: https://henkel.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: update-ticket
        method: PUT
Open in Framework → View in Fleet → adhesive-customer-technical-support-escalation.yml

Retrieves the current stage, close date, and amount for a Salesforce opportunity by opportunity ID.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Status Lookup
  description: Retrieves the current stage, close date, and amount for a Salesforce opportunity by opportunity ID.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sf-opportunity
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      call: salesforce.get-opportunity
      with:
        opp_id: '{{opportunity_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.StageName
      - name: close_date
        type: string
        mapping: $.CloseDate
      - name: amount
        type: string
        mapping: $.Amount
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-status-lookup.yml

Sends a formatted alert message to a designated Slack channel for manufacturing plant notifications.

naftiko: '0.5'
info:
  label: Slack Plant Alert Broadcaster
  description: Sends a formatted alert message to a designated Slack channel for manufacturing plant notifications.
  tags:
  - communications
  - manufacturing
  - slack
capability:
  exposes:
  - type: mcp
    namespace: plant-alerts
    port: 8080
    tools:
    - name: broadcast-plant-alert
      description: Send an alert message to a Slack plant channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Slack channel ID.
      - name: alert_message
        in: body
        type: string
        description: The alert message text.
      call: slack.post-message
      with:
        channel: '{{channel_id}}'
        text: '{{alert_message}}'
      outputParameters:
      - name: message_ts
        type: string
        mapping: $.ts
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-plant-alert-broadcaster.yml

Retrieves the current status, assignee, and approval state for an IT change request ticket in Jira.

naftiko: '0.5'
info:
  label: Jira IT Change Request Status
  description: Retrieves the current status, assignee, and approval state for an IT change request ticket in Jira.
  tags:
  - it
  - change-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: change-requests
    port: 8080
    tools:
    - name: get-change-request
      description: Look up an IT change request by Jira issue key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., CHG-1234).
      call: jira.get-issue
      with:
        key: '{{issue_key}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: approval_state
        type: string
        mapping: $.fields.customfield_10050
  consumes:
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-it-change-request-status.yml

Tracks influencer marketing campaigns by pulling engagement data from Instagram, matching against campaign spend in SAP, and updating ROI metrics in Google Sheets.

naftiko: '0.5'
info:
  label: Beauty Care Influencer Campaign Tracker
  description: Tracks influencer marketing campaigns by pulling engagement data from Instagram, matching against campaign spend in SAP, and updating ROI metrics in Google Sheets.
  tags:
  - marketing
  - influencer
  - instagram
  - sap
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: influencer-tracking
    port: 8080
    tools:
    - name: track-influencer-campaign
      description: Track ROI of an influencer marketing campaign.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The campaign identifier.
      - name: influencer_handle
        in: body
        type: string
        description: The Instagram handle.
      steps:
      - name: get-engagement
        type: call
        call: instagram.get-media-insights
        with:
          username: '{{influencer_handle}}'
          campaign_hashtag: '{{campaign_id}}'
      - name: get-campaign-spend
        type: call
        call: sap.get-marketing-cost
        with:
          campaign_ref: '{{campaign_id}}'
      - name: update-roi-sheet
        type: call
        call: google-sheets.append-row
        with:
          spreadsheet_id: influencer_roi_tracker
          range: Campaigns!A:F
          values:
          - '{{campaign_id}}'
          - '{{influencer_handle}}'
          - '{{get-engagement.total_reach}}'
          - '{{get-engagement.engagement_rate}}'
          - '{{get-campaign-spend.total_cost}}'
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: insights
      path: /{{username}}/media?fields=insights
      inputParameters:
      - name: username
        in: path
      operations:
      - name: get-media-insights
        method: GET
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZMK_CAMPAIGN_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: costs
      path: /CampaignCostSet('{{campaign_ref}}')
      inputParameters:
      - name: campaign_ref
        in: path
      operations:
      - name: get-marketing-cost
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → beauty-care-influencer-campaign-tracker.yml

Validates product launch readiness by checking SAP material master, regulatory approval status in SharePoint, and marketing assets in Adobe Experience Manager.

naftiko: '0.5'
info:
  label: Product Launch Readiness Checker
  description: Validates product launch readiness by checking SAP material master, regulatory approval status in SharePoint, and marketing assets in Adobe Experience Manager.
  tags:
  - product
  - launch
  - sap
  - sharepoint
  - adobe
capability:
  exposes:
  - type: mcp
    namespace: launch-readiness
    port: 8080
    tools:
    - name: check-launch-readiness
      description: Validate product launch readiness across systems.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: brand_code
        in: body
        type: string
        description: The brand code.
      steps:
      - name: get-material
        type: call
        call: sap.get-material
        with:
          material_id: '{{material_number}}'
      - name: check-regulatory
        type: call
        call: sharepoint.get-document
        with:
          site_id: regulatory_approvals
          file_path: Approvals/{{material_number}}_approval.pdf
      - name: check-marketing-assets
        type: call
        call: aem.get-assets
        with:
          folder: /content/dam/henkel/{{brand_code}}/{{material_number}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: product-launches
          text: 'Launch readiness for {{material_number}}: Material={{get-material.product_name}}, Regulatory={{check-regulatory.status}}, Assets={{check-marketing-assets.count}} files.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /MaterialSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: aem
    baseUri: https://aem.henkel.com/api/assets
    authentication:
      type: bearer
      token: $secrets.aem_token
    resources:
    - name: assets
      path: '{{folder}}.json'
      inputParameters:
      - name: folder
        in: path
      operations:
      - name: get-assets
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-launch-readiness-checker.yml

Retrieves infrastructure health metrics from Datadog.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Check
  description: Retrieves infrastructure health metrics from Datadog.
  tags:
  - it-operations
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-service-health
      description: Get Datadog health metrics for a service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-metrics
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: cpu_usage
        type: string
        mapping: $.series[0].pointlist[-1][1]
      - name: error_rate
        type: string
        mapping: $.series[1].pointlist[-1][1]
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      headerName: DD-API-KEY
    resources:
    - name: metrics
      path: /query?query=avg:system.cpu.user{service:{{service}}}
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-health-check.yml

Searches Splunk for production error logs from manufacturing systems, filtered by plant code and time range.

naftiko: '0.5'
info:
  label: Splunk Production Error Log Search
  description: Searches Splunk for production error logs from manufacturing systems, filtered by plant code and time range.
  tags:
  - monitoring
  - manufacturing
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: production-logs
    port: 8080
    tools:
    - name: search-error-logs
      description: Search Splunk for production error events by plant code.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to search back.
      call: splunk.search
      with:
        search: search index=production plant={{plant_code}} level=ERROR earliest=-{{hours_back}}h
      outputParameters:
      - name: event_count
        type: integer
        mapping: $.results.count
      - name: events
        type: array
        mapping: $.results.events
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.henkel.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → splunk-production-error-log-search.yml

Coordinates environmental compliance audits by pulling permit data from SAP EHS, scheduling inspections in ServiceNow, and distributing audit checklists via SharePoint.

naftiko: '0.5'
info:
  label: Environmental Compliance Audit Coordinator
  description: Coordinates environmental compliance audits by pulling permit data from SAP EHS, scheduling inspections in ServiceNow, and distributing audit checklists via SharePoint.
  tags:
  - compliance
  - environmental
  - sap
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: env-audit
    port: 8080
    tools:
    - name: coordinate-audit
      description: Coordinate an environmental compliance audit.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: audit_date
        in: body
        type: string
        description: Scheduled audit date in YYYY-MM-DD.
      steps:
      - name: get-permits
        type: call
        call: sap-ehs.get-permits
        with:
          plant: '{{plant_code}}'
      - name: schedule-inspection
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Environmental audit: Plant {{plant_code}}'
          scheduled_date: '{{audit_date}}'
          category: environmental_compliance
      - name: distribute-checklist
        type: call
        call: sharepoint.copy-template
        with:
          site_id: environmental_compliance
          source_path: Templates/audit_checklist_template.xlsx
          dest_path: Audits/{{plant_code}}/audit_{{audit_date}}.xlsx
  consumes:
  - type: http
    namespace: sap-ehs
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEH_PERMIT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: permits
      path: /PermitSet?$filter=Plant eq '{{plant}}'
      inputParameters:
      - name: plant
        in: query
      operations:
      - name: get-permits
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: copy
      path: /{{site_id}}/drive/root:/{{source_path}}:/copy
      inputParameters:
      - name: site_id
        in: path
      - name: source_path
        in: path
      operations:
      - name: copy-template
        method: POST
Open in Framework → View in Fleet → environmental-compliance-audit-coordinator.yml

When a safety incident occurs at a plant, creates a ServiceNow incident, logs in SAP EHS, and notifies the safety team and plant manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Safety Incident Reporter
  description: When a safety incident occurs at a plant, creates a ServiceNow incident, logs in SAP EHS, and notifies the safety team and plant manager in Microsoft Teams.
  tags:
  - safety
  - ehs
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: safety-incidents
    port: 8080
    tools:
    - name: report-safety-incident
      description: Report a plant safety incident across all systems.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: incident_description
        in: body
        type: string
        description: Description of the incident.
      - name: severity
        in: body
        type: string
        description: Incident severity (low, medium, high, critical).
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Safety incident at plant {{plant_code}}
          priority: '{{severity}}'
          description: '{{incident_description}}'
          assigned_group: EHS_Team
      - name: log-in-sap
        type: call
        call: sap.create-ehs-incident
        with:
          plant: '{{plant_code}}'
          description: '{{incident_description}}'
          severity: '{{severity}}'
          snow_ref: '{{create-snow-incident.number}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: safety-alerts
          text: 'SAFETY INCIDENT at plant {{plant_code}} ({{severity}}): {{incident_description}}. ServiceNow: {{create-snow-incident.number}}. SAP EHS: {{log-in-sap.incident_id}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://henkel.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: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEH_EHS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: ehs-incidents
      path: /EHSIncidentSet
      operations:
      - name: create-ehs-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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → safety-incident-reporter.yml

Creates a maintenance work order in SAP PM, schedules a technician via Workday, and logs the request in ServiceNow for tracking.

naftiko: '0.5'
info:
  label: Plant Maintenance Work Order Pipeline
  description: Creates a maintenance work order in SAP PM, schedules a technician via Workday, and logs the request in ServiceNow for tracking.
  tags:
  - maintenance
  - manufacturing
  - sap
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: maintenance-orders
    port: 8080
    tools:
    - name: create-work-order
      description: Create and track a plant maintenance work order.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: description
        in: body
        type: string
        description: Work order description.
      - name: priority
        in: body
        type: string
        description: Priority level (high, medium, low).
      steps:
      - name: create-sap-order
        type: call
        call: sap-pm.create-order
        with:
          equipment: '{{equipment_id}}'
          description: '{{description}}'
          priority: '{{priority}}'
      - name: find-technician
        type: call
        call: workday.search-workers
        with:
          query: maintenance_technician_{{equipment_id}}
      - name: log-in-servicenow
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Maintenance: {{description}}'
          category: plant_maintenance
          assignment_group: Plant_Maintenance
          sap_order_number: '{{create-sap-order.order_number}}'
  consumes:
  - type: http
    namespace: sap-pm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPM_WORKORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /WorkOrderSet
      operations:
      - name: create-order
        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: /workers?search={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.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
Open in Framework → View in Fleet → plant-maintenance-work-order-pipeline.yml

Retrieves a SAP production order by number, returning status, planned quantity, completed quantity, and target completion date.

naftiko: '0.5'
info:
  label: Production Order Status
  description: Retrieves a SAP production order by number, returning status, planned quantity, completed quantity, and target completion date.
  tags:
  - manufacturing
  - production
  - sap
capability:
  exposes:
  - type: mcp
    namespace: production-orders
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP production order.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-production-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: planned_qty
        type: integer
        mapping: $.d.PlannedQuantity
      - name: completed_qty
        type: integer
        mapping: $.d.CompletedQuantity
      - name: target_date
        type: string
        mapping: $.d.TargetCompletionDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPP_PRODORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /ProductionOrderSet('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → production-order-status.yml

When a customer support ticket arrives in Zendesk, retrieves product info from SAP, creates a Salesforce case, and notifies the support team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Zendesk Customer Support Ticket Handler
  description: When a customer support ticket arrives in Zendesk, retrieves product info from SAP, creates a Salesforce case, and notifies the support team in Microsoft Teams.
  tags:
  - customer-service
  - zendesk
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: support-handling
    port: 8080
    tools:
    - name: handle-support-ticket
      description: Process a Zendesk support ticket with SAP enrichment.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: material_number
        in: body
        type: string
        description: The related product material number.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_id: '{{material_number}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Support: {{get-ticket.subject}}'
          description: 'Zendesk #{{ticket_id}}: {{get-ticket.description}}. Product: {{get-product.MaterialDescription}}.'
      - name: notify-support
        type: call
        call: msteams.send-message
        with:
          channel_id: customer-support
          text: 'Support ticket for {{get-product.MaterialDescription}}: {{get-ticket.subject}}. SF Case: {{create-case.CaseNumber}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://henkel.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /MaterialSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://henkel.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → zendesk-customer-support-ticket-handler.yml

Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.

naftiko: '0.5'
info:
  label: ServiceNow Ticket Status
  description: Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.
  tags:
  - it-service
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-tickets
    port: 8080
    tools:
    - name: get-ticket-status
      description: Look up a ServiceNow incident.
      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[0].state
      - name: priority
        type: string
        mapping: $.result[0].priority
      - name: assigned_group
        type: string
        mapping: $.result[0].assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-ticket-status.yml

Retrieves the current status, priority, and assigned responder for a PagerDuty incident by incident ID.

naftiko: '0.5'
info:
  label: PagerDuty Incident Status Lookup
  description: Retrieves the current status, priority, and assigned responder for a PagerDuty incident by incident ID.
  tags:
  - operations
  - incident-management
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty-incidents
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a PagerDuty incident by ID.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The PagerDuty incident ID.
      call: pagerduty.get-incident
      with:
        id: '{{incident_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.incident.status
      - name: priority
        type: string
        mapping: $.incident.priority.summary
      - name: assigned_to
        type: string
        mapping: $.incident.assignments[0].assignee.summary
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → pagerduty-incident-status-lookup.yml

Processes a customer complaint by creating a Zendesk ticket, looking up purchase history in Salesforce, and triggering a refund workflow in SAP.

naftiko: '0.5'
info:
  label: Customer Complaint Resolution Orchestrator
  description: Processes a customer complaint by creating a Zendesk ticket, looking up purchase history in Salesforce, and triggering a refund workflow in SAP.
  tags:
  - customer-service
  - complaint
  - zendesk
  - salesforce
  - sap
capability:
  exposes:
  - type: mcp
    namespace: complaint-resolution
    port: 8080
    tools:
    - name: resolve-complaint
      description: Orchestrate customer complaint resolution across support and finance systems.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: Customer email address.
      - name: complaint_text
        in: body
        type: string
        description: The complaint description.
      - name: order_id
        in: body
        type: string
        description: The original order ID.
      steps:
      - name: create-ticket
        type: call
        call: zendesk.create-ticket
        with:
          requester_email: '{{customer_email}}'
          subject: 'Complaint: Order {{order_id}}'
          body: '{{complaint_text}}'
      - name: get-purchase-history
        type: call
        call: salesforce.query
        with:
          soql: SELECT Id, Product__c, Amount FROM Order__c WHERE OrderNumber__c = '{{order_id}}'
      - name: initiate-refund
        type: call
        call: sap.create-credit-memo
        with:
          order_reference: '{{order_id}}'
          amount: '{{get-purchase-history.records[0].Amount}}'
          reason: customer_complaint
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://henkel.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: create-ticket
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query?q={{soql}}
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZFI_CREDIT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: credit-memos
      path: /CreditMemoSet
      operations:
      - name: create-credit-memo
        method: POST
Open in Framework → View in Fleet → customer-complaint-resolution-orchestrator.yml

Checks material availability across plants in SAP S/4HANA, returning stock levels and next replenishment dates.

naftiko: '0.5'
info:
  label: SAP S/4HANA Material Availability Check
  description: Checks material availability across plants in SAP S/4HANA, returning stock levels and next replenishment dates.
  tags:
  - supply-chain
  - sap
  - material-planning
capability:
  exposes:
  - type: mcp
    namespace: material-availability
    port: 8080
    tools:
    - name: check-material-availability
      description: Check material availability across Henkel plants.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.check-availability
      with:
        material_id: '{{material_number}}'
      outputParameters:
      - name: total_stock
        type: integer
        mapping: $.d.TotalStock
      - name: plants_with_stock
        type: array
        mapping: $.d.PlantStock.results
      - name: next_replenishment
        type: string
        mapping: $.d.NextReplenishmentDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZMM_AVAILABILITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /MaterialAvailabilitySet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: check-availability
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-material-availability-check.yml

Retrieves regulatory documents from SAP, stores in SharePoint for compliance tracking, and creates a Jira task for review.

naftiko: '0.5'
info:
  label: Regulatory Compliance Document Manager
  description: Retrieves regulatory documents from SAP, stores in SharePoint for compliance tracking, and creates a Jira task for review.
  tags:
  - compliance
  - regulatory
  - sap
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: regulatory-compliance
    port: 8080
    tools:
    - name: manage-regulatory-doc
      description: Store a regulatory document and create a review task.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: regulation_type
        in: body
        type: string
        description: The regulation type (e.g. REACH, GHS, FDA).
      steps:
      - name: get-reg-data
        type: call
        call: sap.get-regulatory-data
        with:
          material_id: '{{material_number}}'
          regulation: '{{regulation_type}}'
      - name: store-doc
        type: call
        call: sharepoint.create-file
        with:
          site_id: regulatory_site
          file_path: Compliance/{{regulation_type}}/{{material_number}}_{{get-reg-data.document_version}}.pdf
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: REG
          summary: '{{regulation_type}} review: {{material_number}} - {{get-reg-data.product_name}}'
          issue_type: Task
          description: 'Regulatory document for {{get-reg-data.product_name}}. Regulation: {{regulation_type}}. Status: {{get-reg-data.compliance_status}}. Doc: {{store-doc.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEH_REGULATORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: regulatory
      path: /RegulatoryDataSet(Material='{{material_id}}',Regulation='{{regulation}}')
      inputParameters:
      - name: material_id
        in: path
      - name: regulation
        in: path
      operations:
      - name: get-regulatory-data
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-document-manager.yml

Publishes a branded post to the Henkel LinkedIn company page.

naftiko: '0.5'
info:
  label: LinkedIn Brand Update Publisher
  description: Publishes a branded post to the Henkel LinkedIn company page.
  tags:
  - marketing
  - social-media
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: linkedin-publishing
    port: 8080
    tools:
    - name: publish-linkedin-post
      description: Publish a post to the Henkel LinkedIn page.
      inputParameters:
      - name: post_text
        in: body
        type: string
        description: The post content.
      call: linkedin.create-post
      with:
        author: urn:li:organization:henkel
        text: '{{post_text}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-brand-update-publisher.yml

On production line downtime alert from Datadog, creates a SAP PM notification, pages the on-call engineer via PagerDuty, and posts to the plant Slack channel.

naftiko: '0.5'
info:
  label: Production Downtime Escalation Pipeline
  description: On production line downtime alert from Datadog, creates a SAP PM notification, pages the on-call engineer via PagerDuty, and posts to the plant Slack channel.
  tags:
  - manufacturing
  - incident
  - datadog
  - sap
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: downtime-escalation
    port: 8080
    tools:
    - name: escalate-downtime
      description: Escalate production line downtime across operations systems.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The production line identifier.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: alert_severity
        in: body
        type: string
        description: Alert severity (critical, warning).
      steps:
      - name: get-alert-details
        type: call
        call: datadog.get-monitor
        with:
          monitor_tag: line:{{line_id}},plant:{{plant_code}}
      - name: create-pm-notification
        type: call
        call: sap-pm.create-notification
        with:
          equipment: '{{line_id}}'
          plant: '{{plant_code}}'
          description: 'Production downtime: {{get-alert-details.message}}'
      - name: page-engineer
        type: call
        call: pagerduty.create-incident
        with:
          service_id: plant_{{plant_code}}
          title: Line {{line_id}} down at plant {{plant_code}}
          urgency: '{{alert_severity}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: plant-{{plant_code}}-ops
          text: 'DOWNTIME ALERT: Line {{line_id}} is down. SAP notification: {{create-pm-notification.notification_number}}. PagerDuty incident: {{page-engineer.incident_id}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor?monitor_tags={{monitor_tag}}
      inputParameters:
      - name: monitor_tag
        in: query
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: sap-pm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /NotificationSet
      operations:
      - name: create-notification
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → production-downtime-escalation-pipeline.yml

Retrieves the general ledger account balance from Oracle Cloud Financials for a given account code and fiscal period.

naftiko: '0.5'
info:
  label: Oracle Cloud General Ledger Balance
  description: Retrieves the general ledger account balance from Oracle Cloud Financials for a given account code and fiscal period.
  tags:
  - finance
  - accounting
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: gl-balance
    port: 8080
    tools:
    - name: get-gl-balance
      description: Fetch GL account balance for a specific account and period.
      inputParameters:
      - name: account_code
        in: body
        type: string
        description: The GL account code.
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYY-MM format.
      call: oracle-financials.get-balance
      with:
        account: '{{account_code}}'
        period: '{{fiscal_period}}'
      outputParameters:
      - name: debit_total
        type: number
        mapping: $.balance.debitTotal
      - name: credit_total
        type: number
        mapping: $.balance.creditTotal
      - name: net_balance
        type: number
        mapping: $.balance.netBalance
  consumes:
  - type: http
    namespace: oracle-financials
    baseUri: https://henkel-fa.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: balances
      path: /generalLedgerBalances?q=AccountCode={{account}};Period={{period}}
      inputParameters:
      - name: account
        in: query
      - name: period
        in: query
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → oracle-cloud-general-ledger-balance.yml

Calculates Overall Equipment Effectiveness by pulling availability from SAP PM, performance data from the MES system, and quality rates from SAP QM, then publishing to Power BI.

naftiko: '0.5'
info:
  label: Plant OEE Calculation Pipeline
  description: Calculates Overall Equipment Effectiveness by pulling availability from SAP PM, performance data from the MES system, and quality rates from SAP QM, then publishing to Power BI.
  tags:
  - manufacturing
  - oee
  - sap
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: oee-calculation
    port: 8080
    tools:
    - name: calculate-oee
      description: Calculate OEE for a production line and publish to dashboard.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The production line ID.
      - name: shift_date
        in: body
        type: string
        description: The shift date in YYYY-MM-DD.
      steps:
      - name: get-availability
        type: call
        call: sap-pm.get-downtime
        with:
          equipment: '{{line_id}}'
          date: '{{shift_date}}'
      - name: get-performance
        type: call
        call: mes.get-cycle-times
        with:
          line: '{{line_id}}'
          date: '{{shift_date}}'
      - name: get-quality-rate
        type: call
        call: sap-qm.get-defect-rate
        with:
          line: '{{line_id}}'
          date: '{{shift_date}}'
      - name: publish-oee
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: plant-oee-dashboard
  consumes:
  - type: http
    namespace: sap-pm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPM_DOWNTIME_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: downtime
      path: /DowntimeSet(Equipment='{{equipment}}',Date='{{date}}')
      inputParameters:
      - name: equipment
        in: path
      - name: date
        in: path
      operations:
      - name: get-downtime
        method: GET
  - type: http
    namespace: mes
    baseUri: https://mes.henkel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mes_token
    resources:
    - name: cycles
      path: /lines/{{line}}/cycle-times?date={{date}}
      inputParameters:
      - name: line
        in: path
      - name: date
        in: query
      operations:
      - name: get-cycle-times
        method: GET
  - type: http
    namespace: sap-qm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZQM_DEFECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: defects
      path: /DefectRateSet(Line='{{line}}',Date='{{date}}')
      inputParameters:
      - name: line
        in: path
      - name: date
        in: path
      operations:
      - name: get-defect-rate
        method: GET
  - 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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → plant-oee-calculation-pipeline.yml

Creates or updates a Confluence page for SOPs and technical documentation.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Publisher
  description: Creates or updates a Confluence page for SOPs and technical documentation.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: publish-kb-article
      description: Publish a page to Confluence.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Page title.
      - name: content
        in: body
        type: string
        description: Page content.
      call: confluence.create-page
      with:
        space_key: '{{space_key}}'
        title: '{{title}}'
        body: '{{content}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-publisher.yml

When a supplier invoice arrives in SAP, matches against the PO, creates a Jira approval task if variance detected, and notifies finance in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Invoice Processor
  description: When a supplier invoice arrives in SAP, matches against the PO, creates a Jira approval task if variance detected, and notifies finance in Microsoft Teams.
  tags:
  - finance
  - invoicing
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: invoice-processing
    port: 8080
    tools:
    - name: process-invoice
      description: Match a supplier invoice against its PO and route for approval.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice number.
      - name: po_number
        in: body
        type: string
        description: The related PO number.
      steps:
      - name: get-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          summary: 'Invoice variance: {{invoice_number}} vs PO {{po_number}}'
          issue_type: Task
          description: 'Invoice: {{get-invoice.total_amount}} {{get-invoice.currency}}. PO: {{get-po.TotalAmount}}.'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-approvals
          text: 'Invoice {{invoice_number}} for PO {{po_number}} requires approval. Jira: {{create-approval.key}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-invoice-processor.yml

Retrieves lab test results from LIMS, generates a certificate of analysis in SAP QM, and uploads the signed PDF to Box for customer distribution.

naftiko: '0.5'
info:
  label: Lab Test Result to Certificate Pipeline
  description: Retrieves lab test results from LIMS, generates a certificate of analysis in SAP QM, and uploads the signed PDF to Box for customer distribution.
  tags:
  - quality
  - laboratory
  - sap
  - box
capability:
  exposes:
  - type: mcp
    namespace: lab-certificate
    port: 8080
    tools:
    - name: generate-certificate
      description: Generate a certificate of analysis from lab test results.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The production batch number.
      - name: customer_id
        in: body
        type: string
        description: The customer ID for distribution.
      steps:
      - name: get-lab-results
        type: call
        call: lims.get-batch-results
        with:
          batch: '{{batch_number}}'
      - name: create-coa
        type: call
        call: sap-qm.create-certificate
        with:
          batch: '{{batch_number}}'
          test_data: '{{get-lab-results.test_summary}}'
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: coa_{{customer_id}}
          file_name: COA_{{batch_number}}.pdf
          content: '{{create-coa.pdf_content}}'
  consumes:
  - type: http
    namespace: lims
    baseUri: https://lims.henkel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lims_token
    resources:
    - name: results
      path: /batches/{{batch}}/results
      inputParameters:
      - name: batch
        in: path
      operations:
      - name: get-batch-results
        method: GET
  - type: http
    namespace: sap-qm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZQM_CERTIFICATE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: certificates
      path: /CertificateSet
      operations:
      - name: create-certificate
        method: POST
  - 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
Open in Framework → View in Fleet → lab-test-result-to-certificate-pipeline.yml

Uploads R&D documents to Google Drive.

naftiko: '0.5'
info:
  label: Google Drive R&D Document Upload
  description: Uploads R&D documents to Google Drive.
  tags:
  - document-management
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: gdrive-docs
    port: 8080
    tools:
    - name: upload-rd-document
      description: Upload an R&D document to Google Drive.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: Google Drive folder ID.
      - name: file_name
        in: body
        type: string
        description: File name.
      - name: content
        in: body
        type: string
        description: File content.
      call: gdrive.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
        content: '{{content}}'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.id
      - name: web_view_link
        type: string
        mapping: $.webViewLink
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?uploadType=multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → google-drive-r-d-document-upload.yml

Aggregates project status from Jira sprints, budget actuals from SAP, and resource allocation from Workday into a unified Power BI dashboard refresh.

naftiko: '0.5'
info:
  label: Cross-Functional Project Status Aggregator
  description: Aggregates project status from Jira sprints, budget actuals from SAP, and resource allocation from Workday into a unified Power BI dashboard refresh.
  tags:
  - project-management
  - reporting
  - jira
  - sap
  - workday
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: project-aggregator
    port: 8080
    tools:
    - name: aggregate-project-status
      description: Aggregate cross-functional project status into a dashboard.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      steps:
      - name: get-sprint-status
        type: call
        call: jira.get-board-sprints
        with:
          project: '{{project_key}}'
      - name: get-project-budget
        type: call
        call: sap.get-project-actuals
        with:
          project_code: '{{project_key}}'
      - name: get-resource-allocation
        type: call
        call: workday.get-project-staffing
        with:
          project_ref: '{{project_key}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: project-status-dashboard
  consumes:
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{project}}/sprint
      inputParameters:
      - name: project
        in: path
      operations:
      - name: get-board-sprints
        method: GET
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPS_PROJECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: actuals
      path: /ProjectActualsSet('{{project_code}}')
      inputParameters:
      - name: project_code
        in: path
      operations:
      - name: get-project-actuals
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: staffing
      path: /projects/{{project_ref}}/staffing
      inputParameters:
      - name: project_ref
        in: path
      operations:
      - name: get-project-staffing
        method: GET
  - 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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → cross-functional-project-status-aggregator.yml

Pulls production data from SAP and pushes to Power BI for manufacturing visibility.

naftiko: '0.5'
info:
  label: Power BI Manufacturing Dashboard Sync
  description: Pulls production data from SAP and pushes to Power BI for manufacturing visibility.
  tags:
  - analytics
  - power-bi
  - sap
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: mfg-dashboard
    port: 8080
    tools:
    - name: sync-production-dashboard
      description: Sync SAP production data to Power BI.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-production
        type: call
        call: sap.get-production-summary
        with:
          plant: '{{plant_code}}'
      - name: push-to-bi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: production_ds
          table_name: Production
          rows:
          - plant: '{{plant_code}}'
            oee: '{{get-production.oee}}'
            output: '{{get-production.total_output}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPP_PRODORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: summary
      path: /ProductionSummarySet('{{plant}}')
      inputParameters:
      - name: plant
        in: path
      operations:
      - name: get-production-summary
        method: GET
  - 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}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → power-bi-manufacturing-dashboard-sync.yml

Retrieves application performance data from New Relic.

naftiko: '0.5'
info:
  label: New Relic Application Monitor
  description: Retrieves application performance data from New Relic.
  tags:
  - it-operations
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: newrelic-monitoring
    port: 8080
    tools:
    - name: get-newrelic-metrics
      description: Get New Relic performance metrics.
      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: number
        mapping: $.application_summary.response_time
      - name: throughput
        type: number
        mapping: $.application_summary.throughput
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
      headerName: Api-Key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-application-monitor.yml

Tracks outbound shipments by checking SAP transportation management, getting carrier status from project44, and updating the customer in Salesforce.

naftiko: '0.5'
info:
  label: Transport Shipment Tracking Orchestrator
  description: Tracks outbound shipments by checking SAP transportation management, getting carrier status from project44, and updating the customer in Salesforce.
  tags:
  - logistics
  - shipment
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: shipment-tracking
    port: 8080
    tools:
    - name: track-shipment
      description: Track an outbound shipment across logistics systems.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery number.
      steps:
      - name: get-delivery
        type: call
        call: sap-tm.get-delivery
        with:
          delivery_id: '{{delivery_number}}'
      - name: get-carrier-status
        type: call
        call: project44.get-tracking
        with:
          tracking_number: '{{get-delivery.carrier_tracking_number}}'
      - name: update-customer-record
        type: call
        call: salesforce.update-order
        with:
          order_id: '{{get-delivery.sales_order}}'
          shipping_status: '{{get-carrier-status.status}}'
          eta: '{{get-carrier-status.estimated_arrival}}'
  consumes:
  - type: http
    namespace: sap-tm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZTM_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /DeliverySet('{{delivery_id}}')
      inputParameters:
      - name: delivery_id
        in: path
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: project44
    baseUri: https://api.project44.com/api/v4
    authentication:
      type: bearer
      token: $secrets.project44_token
    resources:
    - name: tracking
      path: /shipments/tracking?trackingNumber={{tracking_number}}
      inputParameters:
      - name: tracking_number
        in: query
      operations:
      - name: get-tracking
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: update-order
        method: PATCH
Open in Framework → View in Fleet → transport-shipment-tracking-orchestrator.yml

Retrieves supplier qualification data from SAP Ariba, checks certifications, and creates a ServiceNow task for expired certifications.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Qualification
  description: Retrieves supplier qualification data from SAP Ariba, checks certifications, and creates a ServiceNow task for expired certifications.
  tags:
  - procurement
  - supplier-management
  - sap-ariba
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: supplier-qualification
    port: 8080
    tools:
    - name: check-supplier-quals
      description: Check supplier qualifications and flag expired certifications.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-task
        type: call
        call: servicenow.create-record
        with:
          table: u_supplier_tasks
          short_description: 'Certification review: {{get-supplier.name}} - {{get-supplier.expired_certs}} expired'
          description: 'Supplier: {{get-supplier.name}}. Category: {{get-supplier.category}}. Expired certifications: {{get-supplier.expired_cert_names}}.'
          assigned_group: Procurement_Quality
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v2
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-qualification.yml

On batch recall trigger, retrieves affected batch details from SAP, identifies impacted customers in Salesforce, and sends recall notifications via MailChimp.

naftiko: '0.5'
info:
  label: Batch Recall Notification Orchestrator
  description: On batch recall trigger, retrieves affected batch details from SAP, identifies impacted customers in Salesforce, and sends recall notifications via MailChimp.
  tags:
  - quality
  - recall
  - sap
  - salesforce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: batch-recall
    port: 8080
    tools:
    - name: execute-recall
      description: Orchestrate a product batch recall notification.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The production batch number.
      - name: reason
        in: body
        type: string
        description: The recall reason description.
      steps:
      - name: get-batch-details
        type: call
        call: sap.get-batch
        with:
          batch_id: '{{batch_number}}'
      - name: find-affected-customers
        type: call
        call: salesforce.query-customers
        with:
          soql: SELECT Id, Email FROM Contact WHERE Batch_Purchased__c = '{{batch_number}}'
      - name: send-recall-emails
        type: call
        call: mailchimp.send-campaign
        with:
          template_name: product_recall
          list_id: recall_{{batch_number}}
          merge_vars:
            product_name: '{{get-batch-details.product_name}}'
            batch_number: '{{batch_number}}'
            recall_reason: '{{reason}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /BatchSet('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query?q={{soql}}
      inputParameters:
      - name: soql
        in: query
      operations:
      - name: query-customers
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      key: $secrets.mailchimp_transactional_key
    resources:
    - name: campaigns
      path: /messages/send-template
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → batch-recall-notification-orchestrator.yml

Coordinates R&D project gate reviews by pulling project status from Jira, gathering test results from LIMS, and scheduling review meetings via Microsoft Outlook.

naftiko: '0.5'
info:
  label: R&D Project Gate Review Coordinator
  description: Coordinates R&D project gate reviews by pulling project status from Jira, gathering test results from LIMS, and scheduling review meetings via Microsoft Outlook.
  tags:
  - rd
  - project-management
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: gate-review
    port: 8080
    tools:
    - name: coordinate-gate-review
      description: Coordinate an R&D project gate review.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      - name: gate_number
        in: body
        type: string
        description: The gate review number.
      - name: reviewers
        in: body
        type: string
        description: Comma-separated reviewer emails.
      steps:
      - name: get-project-status
        type: call
        call: jira.get-project-summary
        with:
          project: '{{project_key}}'
      - name: get-lab-results
        type: call
        call: lims.get-test-summary
        with:
          project_ref: '{{project_key}}'
          gate: '{{gate_number}}'
      - name: schedule-review
        type: call
        call: outlook.create-event
        with:
          subject: 'Gate {{gate_number}} Review: {{project_key}}'
          attendees: '{{reviewers}}'
          body: 'Project status: {{get-project-status.summary}}. Lab tests: {{get-lab-results.pass_rate}}% pass rate.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project/{{project}}
      inputParameters:
      - name: project
        in: path
      operations:
      - name: get-project-summary
        method: GET
  - type: http
    namespace: lims
    baseUri: https://lims.henkel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lims_token
    resources:
    - name: tests
      path: /projects/{{project_ref}}/gates/{{gate}}/results
      inputParameters:
      - name: project_ref
        in: path
      - name: gate
        in: path
      operations:
      - name: get-test-summary
        method: GET
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → r-d-project-gate-review-coordinator.yml

Retrieves a B2B customer account from Salesforce by ID, returning company name, segment, annual volume, and primary contact.

naftiko: '0.5'
info:
  label: Salesforce B2B Account Lookup
  description: Retrieves a B2B customer account from Salesforce by ID, returning company name, segment, annual volume, and primary contact.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: b2b-accounts
    port: 8080
    tools:
    - name: get-b2b-account
      description: Look up a Salesforce B2B account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.Name
      - name: segment
        type: string
        mapping: $.Segment__c
      - name: annual_volume
        type: string
        mapping: $.Annual_Volume__c
      - name: primary_contact
        type: string
        mapping: $.Primary_Contact__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-b2b-account-lookup.yml

Tracks expiring contracts in SAP Ariba, alerts legal via Microsoft Teams, and creates a renewal task in Jira for procurement follow-up.

naftiko: '0.5'
info:
  label: Contract Renewal Tracker Orchestrator
  description: Tracks expiring contracts in SAP Ariba, alerts legal via Microsoft Teams, and creates a renewal task in Jira for procurement follow-up.
  tags:
  - procurement
  - contracts
  - sap-ariba
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: track-contract-renewal
      description: Monitor and orchestrate contract renewal process.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The Ariba contract ID.
      steps:
      - name: get-contract
        type: call
        call: ariba.get-contract
        with:
          id: '{{contract_id}}'
      - name: alert-legal
        type: call
        call: msteams.send-message
        with:
          channel_id: legal-contracts
          text: 'Contract {{contract_id}} with {{get-contract.supplier_name}} expires {{get-contract.expiry_date}}. Value: {{get-contract.total_value}}. Please review renewal terms.'
      - name: create-renewal-task
        type: call
        call: jira.create-issue
        with:
          project: PROC
          issue_type: Task
          summary: Renew contract {{contract_id}} - {{get-contract.supplier_name}}
          due_date: '{{get-contract.expiry_date}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → contract-renewal-tracker-orchestrator.yml

Triggers an Azure Data Factory pipeline for ETL processing and notifies the data team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Trigger
  description: Triggers an Azure Data Factory pipeline for ETL processing and notifies the data team in Microsoft Teams.
  tags:
  - data-engineering
  - azure-data-factory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: etl-pipelines
    port: 8080
    tools:
    - name: trigger-adf-pipeline
      description: Trigger an ADF pipeline and notify the team.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The ADF pipeline name.
      steps:
      - name: trigger-run
        type: call
        call: adf.create-pipeline-run
        with:
          pipeline_name: '{{pipeline_name}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: data-engineering
          text: 'ADF pipeline {{pipeline_name}} triggered. Run ID: {{trigger-run.runId}}.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/henkel-rg/providers/Microsoft.DataFactory/factories/henkel-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipelines
      path: /pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: create-pipeline-run
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-trigger.yml

Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, and publishes planning results to Confluence.

naftiko: '0.5'
info:
  label: Demand Planning Pipeline
  description: Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, and publishes planning results to Confluence.
  tags:
  - supply-chain
  - forecasting
  - sap
  - azure-machine-learning
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Run demand forecast for a product line.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line.
      - name: forecast_months
        in: body
        type: integer
        description: Number of months to forecast.
      steps:
      - name: get-history
        type: call
        call: sap.get-sales-history
        with:
          product_line: '{{product_line}}'
      - name: run-forecast
        type: call
        call: azml.run-inference
        with:
          model_name: demand_forecast
          input_data: '{{get-history.data}}'
          horizon: '{{forecast_months}}'
      - name: publish-results
        type: call
        call: confluence.create-page
        with:
          space_key: SC
          title: 'Demand Forecast: {{product_line}} - {{forecast_months}}mo'
          body: 'Predicted volume: {{run-forecast.predicted_units}}. Confidence: {{run-forecast.confidence}}. Recommended production: {{run-forecast.recommended_qty}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZSD_SALES_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-history
      path: /SalesHistorySet?$filter=ProductLine eq '{{product_line}}'
      inputParameters:
      - name: product_line
        in: query
      operations:
      - name: get-sales-history
        method: GET
  - type: http
    namespace: azml
    baseUri: https://henkel-ml.azureml.ms/score
    authentication:
      type: bearer
      token: $secrets.azml_token
    resources:
    - name: inference
      path: /{{model_name}}
      inputParameters:
      - name: model_name
        in: path
      operations:
      - name: run-inference
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → demand-planning-pipeline.yml

Tracks safety training compliance by pulling training records from Cornerstone LMS, checking certification expiry, and creating follow-up tasks in ServiceNow for non-compliant employees.

naftiko: '0.5'
info:
  label: Workplace Safety Training Compliance Tracker
  description: Tracks safety training compliance by pulling training records from Cornerstone LMS, checking certification expiry, and creating follow-up tasks in ServiceNow for non-compliant employees.
  tags:
  - safety
  - training
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: safety-training
    port: 8080
    tools:
    - name: check-training-compliance
      description: Check safety training compliance and create remediation tasks.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: training_course_id
        in: body
        type: string
        description: The training course ID.
      steps:
      - name: get-training-records
        type: call
        call: cornerstone.get-completion-report
        with:
          course_id: '{{training_course_id}}'
          organizational_unit: plant_{{plant_code}}
      - name: get-employee-list
        type: call
        call: workday.get-headcount
        with:
          location: plant_{{plant_code}}
      - name: create-remediation-tasks
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Safety training non-compliance: {{training_course_id}} at plant {{plant_code}}'
          category: safety_compliance
          description: 'Total employees: {{get-employee-list.count}}. Completed: {{get-training-records.completed_count}}. Non-compliant: {{get-employee-list.count}} - {{get-training-records.completed_count}}.'
  consumes:
  - type: http
    namespace: cornerstone
    baseUri: https://henkel.csod.com/services/api/x/v2
    authentication:
      type: bearer
      token: $secrets.cornerstone_token
    resources:
    - name: reports
      path: /reports/completions?courseId={{course_id}}&ou={{organizational_unit}}
      inputParameters:
      - name: course_id
        in: query
      - name: organizational_unit
        in: query
      operations:
      - name: get-completion-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /headcount?location={{location}}
      inputParameters:
      - name: location
        in: query
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.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
Open in Framework → View in Fleet → workplace-safety-training-compliance-tracker.yml

Compares actual spend from SAP against budget in Oracle Cloud, calculates variance, and sends a summary email via Microsoft Outlook to cost center owners.

naftiko: '0.5'
info:
  label: Cost Center Budget Variance Reporter
  description: Compares actual spend from SAP against budget in Oracle Cloud, calculates variance, and sends a summary email via Microsoft Outlook to cost center owners.
  tags:
  - finance
  - budget
  - sap
  - oracle-cloud
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: budget-variance
    port: 8080
    tools:
    - name: report-variance
      description: Generate budget variance report for a cost center.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center code.
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYY-MM format.
      steps:
      - name: get-actual-spend
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: get-budget
        type: call
        call: oracle-financials.get-budget
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: send-report
        type: call
        call: outlook.send-email
        with:
          to: '{{get-actual-spend.cost_center_owner_email}}'
          subject: 'Budget Variance Report: {{cost_center}} - {{fiscal_period}}'
          body: 'Actual: {{get-actual-spend.total}}. Budget: {{get-budget.total}}. Variance: {{get-budget.total}} - {{get-actual-spend.total}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZFI_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: actuals
      path: /CostCenterActualsSet(CostCenter='{{cost_center}}',Period='{{period}}')
      inputParameters:
      - name: cost_center
        in: path
      - name: period
        in: path
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: oracle-financials
    baseUri: https://henkel-fa.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: budgets
      path: /budgets?costCenter={{cost_center}}&period={{period}}
      inputParameters:
      - name: cost_center
        in: query
      - name: period
        in: query
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: outlook
    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
Open in Framework → View in Fleet → cost-center-budget-variance-reporter.yml

Retrieves brand website performance metrics from Google Analytics.

naftiko: '0.5'
info:
  label: Google Analytics Brand Performance
  description: Retrieves brand website performance metrics from Google Analytics.
  tags:
  - marketing
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: get-brand-performance
      description: Get Google Analytics metrics for a Henkel brand site.
      inputParameters:
      - name: brand_property_id
        in: body
        type: string
        description: The GA property ID.
      call: ga.get-brand-metrics
      with:
        property_id: '{{brand_property_id}}'
      outputParameters:
      - name: sessions
        type: integer
        mapping: $.rows[0].metricValues[0].value
      - name: users
        type: integer
        mapping: $.rows[0].metricValues[1].value
      - name: conversion_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-brand-metrics
        method: POST
Open in Framework → View in Fleet → google-analytics-brand-performance.yml

Extracts a snapshot of brand-level sales data from a Tableau workbook, returning region, category, and revenue totals.

naftiko: '0.5'
info:
  label: Tableau Brand Sales Dashboard Snapshot
  description: Extracts a snapshot of brand-level sales data from a Tableau workbook, returning region, category, and revenue totals.
  tags:
  - analytics
  - sales
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: brand-dashboard
    port: 8080
    tools:
    - name: get-brand-sales
      description: Retrieve brand sales dashboard data from Tableau.
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The Henkel brand name.
      call: tableau.get-view-data
      with:
        workbook: brand-sales-performance
        view: regional-summary
        filter_brand: '{{brand_name}}'
      outputParameters:
      - name: total_revenue
        type: number
        mapping: $.data.summary.totalRevenue
      - name: top_region
        type: string
        mapping: $.data.summary.topRegion
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.henkel.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/henkel/workbooks/{{workbook}}/views/{{view}}/data
      inputParameters:
      - name: workbook
        in: path
      - name: view
        in: path
      operations:
      - name: get-view-data
        method: GET
Open in Framework → View in Fleet → tableau-brand-sales-dashboard-snapshot.yml

Processes inbound EDI purchase orders from retail partners, creates corresponding SAP sales orders, and sends acknowledgment via AS2 gateway.

naftiko: '0.5'
info:
  label: Retail Partner EDI Data Exchange
  description: Processes inbound EDI purchase orders from retail partners, creates corresponding SAP sales orders, and sends acknowledgment via AS2 gateway.
  tags:
  - edi
  - retail
  - sap
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: edi-exchange
    port: 8080
    tools:
    - name: process-edi-order
      description: Process an inbound EDI 850 purchase order from a retail partner.
      inputParameters:
      - name: edi_transaction_id
        in: body
        type: string
        description: The EDI transaction ID.
      - name: partner_id
        in: body
        type: string
        description: The trading partner ID.
      steps:
      - name: parse-edi
        type: call
        call: edi-gateway.get-transaction
        with:
          transaction_id: '{{edi_transaction_id}}'
      - name: create-sales-order
        type: call
        call: sap.create-sales-order
        with:
          customer: '{{partner_id}}'
          items: '{{parse-edi.line_items}}'
          po_number: '{{parse-edi.po_number}}'
      - name: send-acknowledgment
        type: call
        call: edi-gateway.send-855
        with:
          partner_id: '{{partner_id}}'
          po_number: '{{parse-edi.po_number}}'
          sales_order: '{{create-sales-order.order_number}}'
  consumes:
  - type: http
    namespace: edi-gateway
    baseUri: https://edi.henkel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.edi_gateway_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
    - name: outbound
      path: /outbound/855
      operations:
      - name: send-855
        method: POST
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZSD_SALESORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /SalesOrderSet
      operations:
      - name: create-sales-order
        method: POST
Open in Framework → View in Fleet → retail-partner-edi-data-exchange.yml

Retrieves search performance data from Google Search Console for Henkel brand sites.

naftiko: '0.5'
info:
  label: Google Search Console SEO Tracker
  description: Retrieves search performance data from Google Search Console for Henkel brand sites.
  tags:
  - marketing
  - seo
  - google-search-console
capability:
  exposes:
  - type: mcp
    namespace: seo-tracking
    port: 8080
    tools:
    - name: get-search-performance
      description: Get search performance from Google Search Console.
      inputParameters:
      - name: site_url
        in: body
        type: string
        description: The site URL.
      call: gsc.get-search-analytics
      with:
        site_url: '{{site_url}}'
      outputParameters:
      - name: total_clicks
        type: integer
        mapping: $.rows[0].clicks
      - name: total_impressions
        type: integer
        mapping: $.rows[0].impressions
  consumes:
  - type: http
    namespace: gsc
    baseUri: https://www.googleapis.com/webmasters/v3
    authentication:
      type: bearer
      token: $secrets.google_search_console_token
    resources:
    - name: search-analytics
      path: /sites/{{site_url}}/searchAnalytics/query
      inputParameters:
      - name: site_url
        in: path
      operations:
      - name: get-search-analytics
        method: POST
Open in Framework → View in Fleet → google-search-console-seo-tracker.yml

Retrieves batch quality test results from SAP, validates against specifications, and creates a ServiceNow task if any parameter is out of tolerance.

naftiko: '0.5'
info:
  label: Manufacturing Batch Quality Check
  description: Retrieves batch quality test results from SAP, validates against specifications, and creates a ServiceNow task if any parameter is out of tolerance.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: quality-management
    port: 8080
    tools:
    - name: check-batch-quality
      description: Check batch quality results and flag out-of-spec conditions.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP production batch number.
      steps:
      - name: get-quality-data
        type: call
        call: sap.get-batch-quality
        with:
          batch_id: '{{batch_number}}'
      - name: create-task
        type: call
        call: servicenow.create-record
        with:
          table: u_quality_tasks
          short_description: 'Quality review: batch {{batch_number}} - {{get-quality-data.failed_params}} out of spec'
          description: 'Batch {{batch_number}}, Product: {{get-quality-data.product_name}}. Failed parameters: {{get-quality-data.failed_params}}. Test date: {{get-quality-data.test_date}}.'
          assigned_group: Quality_Control
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZQM_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /BatchQualitySet('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch-quality
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → manufacturing-batch-quality-check.yml

Analyzes trade promotion effectiveness by pulling promotion data from SAP TPM, sales lift from Snowflake, and generating a summary report in Power BI.

naftiko: '0.5'
info:
  label: Trade Promotion Effectiveness Analyzer
  description: Analyzes trade promotion effectiveness by pulling promotion data from SAP TPM, sales lift from Snowflake, and generating a summary report in Power BI.
  tags:
  - sales
  - promotion
  - sap
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: trade-promotion
    port: 8080
    tools:
    - name: analyze-promotion
      description: Analyze trade promotion ROI across data sources.
      inputParameters:
      - name: promotion_id
        in: body
        type: string
        description: The SAP trade promotion ID.
      steps:
      - name: get-promotion-details
        type: call
        call: sap-tpm.get-promotion
        with:
          promo_id: '{{promotion_id}}'
      - name: get-sales-lift
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT sales_lift_pct, incremental_revenue FROM trade_promo_analytics WHERE promo_id = '{{promotion_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: trade-promotion-analysis
  consumes:
  - type: http
    namespace: sap-tpm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZTPM_PROMO_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: promotions
      path: /PromotionSet('{{promo_id}}')
      inputParameters:
      - name: promo_id
        in: path
      operations:
      - name: get-promotion
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://henkel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: 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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → trade-promotion-effectiveness-analyzer.yml

Queries the Teradata data warehouse for historical manufacturing data by plant.

naftiko: '0.5'
info:
  label: Teradata Manufacturing Data Warehouse Query
  description: Queries the Teradata data warehouse for historical manufacturing data by plant.
  tags:
  - analytics
  - data-warehouse
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: mfg-dwh
    port: 8080
    tools:
    - name: query-manufacturing-data
      description: Query Teradata for historical manufacturing metrics.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: start_date
        in: body
        type: string
        description: Start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: End date (YYYY-MM-DD).
      call: teradata.query-mfg
      with:
        plant: '{{plant_code}}'
        start: '{{start_date}}'
        end: '{{end_date}}'
      outputParameters:
      - name: total_output
        type: integer
        mapping: $.results.total_output
      - name: avg_oee
        type: string
        mapping: $.results.avg_oee
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://henkel-td.teradata.com/api/query/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /execute
      operations:
      - name: query-mfg
        method: POST
Open in Framework → View in Fleet → teradata-manufacturing-data-warehouse-query.yml

Collects sustainability metrics from SAP plant energy data, Workday headcount for diversity stats, and carbon tracking from Sphera, compiling into a SharePoint report.

naftiko: '0.5'
info:
  label: Sustainability Report Data Collector
  description: Collects sustainability metrics from SAP plant energy data, Workday headcount for diversity stats, and carbon tracking from Sphera, compiling into a SharePoint report.
  tags:
  - sustainability
  - reporting
  - sap
  - workday
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: sustainability-data
    port: 8080
    tools:
    - name: collect-sustainability-data
      description: Collect sustainability report data from multiple sources.
      inputParameters:
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-Q format.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-energy-data
        type: call
        call: sap.get-energy-consumption
        with:
          plant: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: get-diversity-stats
        type: call
        call: workday.get-headcount-report
        with:
          report_name: diversity_metrics
          period: '{{reporting_period}}'
      - name: get-carbon-data
        type: call
        call: sphera.get-emissions
        with:
          facility: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-document
        with:
          site_id: sustainability_reports
          folder_path: Quarterly/{{reporting_period}}
          file_name: plant_{{plant_code}}_sustainability.json
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEN_ENERGY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: energy
      path: /EnergyConsumptionSet(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-energy-consumption
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report_name}}?period={{period}}
      inputParameters:
      - name: report_name
        in: path
      - name: period
        in: query
      operations:
      - name: get-headcount-report
        method: GET
  - type: http
    namespace: sphera
    baseUri: https://api.sphera.com/v1
    authentication:
      type: bearer
      token: $secrets.sphera_token
    resources:
    - name: emissions
      path: /facilities/{{facility}}/emissions?period={{period}}
      inputParameters:
      - name: facility
        in: path
      - name: period
        in: query
      operations:
      - name: get-emissions
        method: GET
  - 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}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-document
        method: PUT
Open in Framework → View in Fleet → sustainability-report-data-collector.yml

Retrieves a travel expense report from SAP Concur and creates a Jira approval task.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Processor
  description: Retrieves a travel expense report from SAP Concur and creates a Jira approval task.
  tags:
  - finance
  - travel
  - sap-concur
  - jira
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: process-expense-report
      description: Validate a Concur expense report and route for approval.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          summary: 'Expense review: {{get-report.employee_name}} - {{get-report.total_amount}} {{get-report.currency}}'
          issue_type: Task
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-processor.yml

Retrieves APM metrics from Dynatrace for a Henkel service.

naftiko: '0.5'
info:
  label: Dynatrace Application Performance Check
  description: Retrieves APM metrics from Dynatrace for a Henkel service.
  tags:
  - it-operations
  - apm
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: apm-monitoring
    port: 8080
    tools:
    - name: get-app-performance
      description: Get Dynatrace APM metrics.
      inputParameters:
      - name: service_id
        in: body
        type: string
        description: Dynatrace service entity ID.
      call: dynatrace.get-metrics
      with:
        entity_id: '{{service_id}}'
      outputParameters:
      - name: response_time_ms
        type: number
        mapping: $.result[0].data[0].values[0]
      - name: error_rate_pct
        type: number
        mapping: $.result[1].data[0].values[0]
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://henkel.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?metricSelector=builtin:service.response.time&entitySelector=entityId({{entity_id}})
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-performance-check.yml

Processes IT access requests by creating a ServiceNow ticket, checking manager approval in Workday, and provisioning access in Azure Active Directory.

naftiko: '0.5'
info:
  label: IT Access Request Approval Workflow
  description: Processes IT access requests by creating a ServiceNow ticket, checking manager approval in Workday, and provisioning access in Azure Active Directory.
  tags:
  - it
  - access-management
  - servicenow
  - workday
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: access-request
    port: 8080
    tools:
    - name: process-access-request
      description: Process an IT system access request through approval workflow.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee Workday ID.
      - name: system_name
        in: body
        type: string
        description: The target system name.
      - name: access_level
        in: body
        type: string
        description: Requested access level.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-request-ticket
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Access request: {{system_name}} for {{get-employee.full_name}}'
          category: access_management
          requested_for: '{{get-employee.work_email}}'
          access_level: '{{access_level}}'
      - name: provision-access
        type: call
        call: azure-ad.add-group-member
        with:
          group_id: '{{system_name}}_{{access_level}}'
          user_principal_name: '{{get-employee.work_email}}'
  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://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      path: /groups/{{group_id}}/members/$ref
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
Open in Framework → View in Fleet → it-access-request-approval-workflow.yml

Retrieves e-commerce conversion metrics from Adobe Analytics for a Henkel brand website, including visits, orders, and conversion rate.

naftiko: '0.5'
info:
  label: Adobe Analytics E-Commerce Conversion Report
  description: Retrieves e-commerce conversion metrics from Adobe Analytics for a Henkel brand website, including visits, orders, and conversion rate.
  tags:
  - analytics
  - e-commerce
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-analytics
    port: 8080
    tools:
    - name: get-conversion-report
      description: Fetch e-commerce conversion metrics for a brand site.
      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 in YYYY-MM-DD/YYYY-MM-DD format.
      call: adobe-analytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        dateRange: '{{date_range}}'
      outputParameters:
      - name: visits
        type: integer
        mapping: $.report.totals.visits
      - name: orders
        type: integer
        mapping: $.report.totals.orders
      - name: conversion_rate
        type: number
        mapping: $.report.totals.conversionRate
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/henkel
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-e-commerce-conversion-report.yml

When a new product formula is approved in SAP, creates a Jira project for packaging design, provisions a SharePoint folder for documentation, registers in Salesforce as a product record, and notifies the R&D team in Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Development Pipeline
  description: When a new product formula is approved in SAP, creates a Jira project for packaging design, provisions a SharePoint folder for documentation, registers in Salesforce as a product record, and notifies the R&D team in Microsoft Teams.
  tags:
  - r-and-d
  - product-development
  - sap
  - jira
  - sharepoint
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-development
    port: 8080
    tools:
    - name: initiate-product-development
      description: Orchestrate new product development across SAP, Jira, SharePoint, Salesforce, and Teams.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the new product.
      - name: project_name
        in: body
        type: string
        description: The product development project name.
      steps:
      - name: get-formula
        type: call
        call: sap.get-formula
        with:
          material_id: '{{material_number}}'
      - name: create-project
        type: call
        call: jira.create-issue
        with:
          project_key: NPD
          summary: '{{project_name}} - Packaging & Launch'
          issue_type: Epic
          description: 'Product: {{get-formula.ProductName}}. Formula: {{get-formula.FormulaCode}}. Category: {{get-formula.Category}}.'
      - name: provision-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: r_and_d_site
          folder_path: NPD/{{material_number}}_{{project_name}}
      - name: register-product
        type: call
        call: salesforce.create-product
        with:
          name: '{{get-formula.ProductName}}'
          product_code: '{{material_number}}'
          category: '{{get-formula.Category}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: r-and-d-projects
          text: 'New product development started: {{project_name}} ({{material_number}}). Jira: {{create-project.key}}. Docs: {{provision-docs.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_FORMULA_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: formulas
      path: /FormulaSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-formula
        method: GET
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: 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: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: products
      path: /sobjects/Product2
      operations:
      - name: create-product
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-development-pipeline.yml

Retrieves the material safety data sheet for a chemical product from SAP EHS by material number, returning hazard classifications and handling instructions.

naftiko: '0.5'
info:
  label: SAP Material Safety Data Sheet Lookup
  description: Retrieves the material safety data sheet for a chemical product from SAP EHS by material number, returning hazard classifications and handling instructions.
  tags:
  - safety
  - regulatory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: msds-lookup
    port: 8080
    tools:
    - name: get-msds
      description: Retrieve MSDS document details for a given material number.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap-ehs.get-msds
      with:
        material_id: '{{material_number}}'
      outputParameters:
      - name: hazard_class
        type: string
        mapping: $.d.HazardClassification
      - name: handling_instructions
        type: string
        mapping: $.d.HandlingInstructions
      - name: ghs_pictograms
        type: string
        mapping: $.d.GHSPictograms
  consumes:
  - type: http
    namespace: sap-ehs
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEH_MSDS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: msds
      path: /MSDSSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-msds
        method: GET
Open in Framework → View in Fleet → sap-material-safety-data-sheet-lookup.yml

Captures a B2B lead in HubSpot, enriches with Salesforce data, and notifies sales in Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Lead Capture for B2B
  description: Captures a B2B lead in HubSpot, enriches with Salesforce data, and notifies sales in Microsoft Teams.
  tags:
  - sales
  - lead-management
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: b2b-leads
    port: 8080
    tools:
    - name: capture-b2b-lead
      description: Capture and enrich a B2B lead.
      inputParameters:
      - name: lead_email
        in: body
        type: string
        description: Lead email address.
      - name: company_name
        in: body
        type: string
        description: Company name.
      steps:
      - name: create-contact
        type: call
        call: hubspot.create-contact
        with:
          email: '{{lead_email}}'
          company: '{{company_name}}'
      - name: search-sf
        type: call
        call: salesforce.search-account
        with:
          company_name: '{{company_name}}'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: b2b-sales
          text: 'New B2B lead: {{company_name}} ({{lead_email}}). HubSpot: {{create-contact.id}}. SF: {{search-sf.Name}}.'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /parameterizedSearch/?q={{company_name}}&sobject=Account
      inputParameters:
      - name: company_name
        in: query
      operations:
      - name: search-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hubspot-lead-capture-for-b2b.yml

Archives completed documents from SharePoint to Box.

naftiko: '0.5'
info:
  label: Box Document Archive
  description: Archives completed documents from SharePoint to Box.
  tags:
  - document-management
  - archival
  - sharepoint
  - box
capability:
  exposes:
  - type: mcp
    namespace: doc-archival
    port: 8080
    tools:
    - name: archive-to-box
      description: Archive a SharePoint document to Box.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: file_path
        in: body
        type: string
        description: File path.
      - name: box_folder_id
        in: body
        type: string
        description: Box folder ID.
      steps:
      - name: get-file
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          file_path: '{{file_path}}'
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: '{{box_folder_id}}'
          file_name: '{{file_path}}'
  consumes:
  - 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:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file-content
        method: GET
  - 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
Open in Framework → View in Fleet → box-document-archive.yml

Processes consumer coupon redemptions by validating the coupon in the promotions platform, recording the transaction in SAP, and sending a confirmation email via SendGrid.

naftiko: '0.5'
info:
  label: Consumer Promotion Coupon Fulfillment
  description: Processes consumer coupon redemptions by validating the coupon in the promotions platform, recording the transaction in SAP, and sending a confirmation email via SendGrid.
  tags:
  - marketing
  - promotion
  - sap
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: coupon-fulfillment
    port: 8080
    tools:
    - name: redeem-coupon
      description: Process a consumer coupon redemption.
      inputParameters:
      - name: coupon_code
        in: body
        type: string
        description: The coupon code.
      - name: consumer_email
        in: body
        type: string
        description: Consumer email address.
      - name: product_sku
        in: body
        type: string
        description: The purchased product SKU.
      steps:
      - name: validate-coupon
        type: call
        call: promo-platform.validate-coupon
        with:
          code: '{{coupon_code}}'
          sku: '{{product_sku}}'
      - name: record-redemption
        type: call
        call: sap.post-promo-redemption
        with:
          coupon_code: '{{coupon_code}}'
          sku: '{{product_sku}}'
          discount_amount: '{{validate-coupon.discount_value}}'
      - name: send-confirmation
        type: call
        call: sendgrid.send-email
        with:
          to: '{{consumer_email}}'
          template_id: coupon_redemption_confirmation
          dynamic_data:
            coupon_code: '{{coupon_code}}'
            discount: '{{validate-coupon.discount_value}}'
  consumes:
  - type: http
    namespace: promo-platform
    baseUri: https://promotions.henkel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.promo_platform_token
    resources:
    - name: coupons
      path: /coupons/validate
      operations:
      - name: validate-coupon
        method: POST
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZSD_PROMO_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: redemptions
      path: /RedemptionSet
      operations:
      - name: post-promo-redemption
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → consumer-promotion-coupon-fulfillment.yml

Downloads a product formulation document from Azure Blob Storage by document name, returning the signed URL and metadata.

naftiko: '0.5'
info:
  label: Azure Blob Formulation Document Retrieval
  description: Downloads a product formulation document from Azure Blob Storage by document name, returning the signed URL and metadata.
  tags:
  - product
  - rd
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: formulation-docs
    port: 8080
    tools:
    - name: get-formulation-doc
      description: Retrieve a formulation document from Azure Blob Storage.
      inputParameters:
      - name: document_name
        in: body
        type: string
        description: The formulation document file name.
      call: azure-blob.get-blob
      with:
        container: formulation-docs
        blob_name: '{{document_name}}'
      outputParameters:
      - name: download_url
        type: string
        mapping: $.url
      - name: last_modified
        type: string
        mapping: $.properties.lastModified
  consumes:
  - type: http
    namespace: azure-blob
    baseUri: https://henkelformulations.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: get-blob
        method: GET
Open in Framework → View in Fleet → azure-blob-formulation-document-retrieval.yml

Pulls sustainability metrics from SAP including CO2 emissions, water usage, and waste reduction, and publishes a report to Confluence.

naftiko: '0.5'
info:
  label: Sustainability Metrics Reporter
  description: Pulls sustainability metrics from SAP including CO2 emissions, water usage, and waste reduction, and publishes a report to Confluence.
  tags:
  - sustainability
  - reporting
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: sustainability-reporting
    port: 8080
    tools:
    - name: generate-sustainability-report
      description: Generate a sustainability report from SAP data and publish to Confluence.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: get-metrics
        type: call
        call: sap.get-sustainability-metrics
        with:
          plant: '{{plant_code}}'
          period: '{{period}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: ESG
          title: 'Sustainability Report: Plant {{plant_code}} - {{period}}'
          body: 'CO2 emissions: {{get-metrics.co2_tonnes}} tonnes. Water usage: {{get-metrics.water_m3}} m3. Waste reduction: {{get-metrics.waste_reduction_pct}}%. Renewable energy: {{get-metrics.renewable_pct}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEH_SUSTAINABILITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: metrics
      path: /SustainabilityMetricSet(Plant='{{plant}}',Period='{{period}}')
      inputParameters:
      - name: plant
        in: path
      - name: period
        in: path
      operations:
      - name: get-sustainability-metrics
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → sustainability-metrics-reporter.yml

Returns the current stock level for a material at a specific warehouse location in SAP Extended Warehouse Management.

naftiko: '0.5'
info:
  label: SAP Warehouse Stock Level
  description: Returns the current stock level for a material at a specific warehouse location in SAP Extended Warehouse Management.
  tags:
  - warehouse
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: warehouse-stock
    port: 8080
    tools:
    - name: get-stock-level
      description: Check stock level for a material at a given warehouse.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: warehouse_id
        in: body
        type: string
        description: The warehouse location ID.
      call: sap-ewm.get-stock
      with:
        material_id: '{{material_number}}'
        warehouse: '{{warehouse_id}}'
      outputParameters:
      - name: available_quantity
        type: number
        mapping: $.d.AvailableQuantity
      - name: unit_of_measure
        type: string
        mapping: $.d.UnitOfMeasure
  consumes:
  - type: http
    namespace: sap-ewm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEWM_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /StockSet(Material='{{material_id}}',Warehouse='{{warehouse}}')
      inputParameters:
      - name: material_id
        in: path
      - name: warehouse
        in: path
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-warehouse-stock-level.yml

Retrieves network device health from SolarWinds for Henkel plant networks.

naftiko: '0.5'
info:
  label: SolarWinds Network Monitor
  description: Retrieves network device health from SolarWinds for Henkel plant networks.
  tags:
  - it-operations
  - network
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-monitoring
    port: 8080
    tools:
    - name: get-network-health
      description: Get network device health from SolarWinds.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: The SolarWinds node ID.
      call: solarwinds.get-node
      with:
        node_id: '{{node_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.StatusDescription
      - name: cpu_load
        type: number
        mapping: $.CPULoad
      - name: memory_used_pct
        type: number
        mapping: $.PercentMemoryUsed
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://henkel-solarwinds.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+*+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}
      inputParameters:
      - name: node_id
        in: query
      operations:
      - name: get-node
        method: GET
Open in Framework → View in Fleet → solarwinds-network-monitor.yml

Triggers a Qlik Sense reload for manufacturing analytics and notifies the team.

naftiko: '0.5'
info:
  label: Qlik Sense Manufacturing Dashboard Refresh
  description: Triggers a Qlik Sense reload for manufacturing analytics and notifies the team.
  tags:
  - analytics
  - qlik-sense
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: refresh-qlik-dashboard
      description: Trigger a Qlik Sense reload.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app ID.
      steps:
      - name: trigger-reload
        type: call
        call: qlik.reload-app
        with:
          app_id: '{{app_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-analytics
          text: 'Qlik dashboard {{app_id}} reloaded. ID: {{trigger-reload.reloadId}}.'
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://henkel.us.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → qlik-sense-manufacturing-dashboard-refresh.yml

Retrieves a product master record from SAP by material number, returning product name, category, formulation type, and regulatory status.

naftiko: '0.5'
info:
  label: SAP Product Master Lookup
  description: Retrieves a product master record from SAP by material number, returning product name, category, formulation type, and regulatory status.
  tags:
  - product
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: product-master
    port: 8080
    tools:
    - name: get-product-master
      description: Look up a SAP product master by material number.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-material
      with:
        material_id: '{{material_number}}'
      outputParameters:
      - name: product_name
        type: string
        mapping: $.d.MaterialDescription
      - name: category
        type: string
        mapping: $.d.MaterialGroup
      - name: formulation_type
        type: string
        mapping: $.d.FormulationType
      - name: regulatory_status
        type: string
        mapping: $.d.RegulatoryStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /MaterialSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-product-master-lookup.yml

When a cycle count discrepancy is detected in SAP EWM, creates an investigation ticket in ServiceNow, adjusts inventory if approved, and notifies the warehouse manager via Slack.

naftiko: '0.5'
info:
  label: Warehouse Cycle Count Discrepancy Handler
  description: When a cycle count discrepancy is detected in SAP EWM, creates an investigation ticket in ServiceNow, adjusts inventory if approved, and notifies the warehouse manager via Slack.
  tags:
  - warehouse
  - inventory
  - sap
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cycle-count
    port: 8080
    tools:
    - name: handle-discrepancy
      description: Handle warehouse cycle count discrepancy.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material number.
      - name: warehouse_id
        in: body
        type: string
        description: The warehouse ID.
      - name: system_qty
        in: body
        type: number
        description: System quantity.
      - name: counted_qty
        in: body
        type: number
        description: Physically counted quantity.
      steps:
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cycle count discrepancy: {{material_number}} at {{warehouse_id}}'
          description: 'System qty: {{system_qty}}, Counted: {{counted_qty}}, Delta: {{counted_qty}} - {{system_qty}}'
          category: inventory_discrepancy
      - name: adjust-inventory
        type: call
        call: sap-ewm.post-adjustment
        with:
          material: '{{material_number}}'
          warehouse: '{{warehouse_id}}'
          adjustment_qty: '{{counted_qty}}'
          reference: '{{create-investigation.number}}'
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: wh-{{warehouse_id}}-ops
          text: 'Cycle count discrepancy for {{material_number}}: system={{system_qty}}, counted={{counted_qty}}. Investigation: {{create-investigation.number}}. Adjustment posted.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://henkel.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: sap-ewm
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZEWM_ADJUSTMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: adjustments
      path: /AdjustmentSet
      operations:
      - name: post-adjustment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → warehouse-cycle-count-discrepancy-handler.yml

Routes a product formulation change request through Jira for engineering approval, updates the SAP recipe, and archives the change in SharePoint.

naftiko: '0.5'
info:
  label: Formulation Change Approval Workflow
  description: Routes a product formulation change request through Jira for engineering approval, updates the SAP recipe, and archives the change in SharePoint.
  tags:
  - rd
  - formulation
  - jira
  - sap
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: formulation-change
    port: 8080
    tools:
    - name: submit-formulation-change
      description: Submit and route a formulation change request.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: change_description
        in: body
        type: string
        description: Description of the formulation change.
      - name: submitter_email
        in: body
        type: string
        description: Email of the submitter.
      steps:
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: FORM
          issue_type: Change Request
          summary: 'Formulation change: {{material_number}}'
          description: '{{change_description}}'
          reporter: '{{submitter_email}}'
      - name: update-sap-recipe
        type: call
        call: sap.update-recipe
        with:
          material_id: '{{material_number}}'
          change_ref: '{{create-jira-ticket.key}}'
          status: pending_approval
      - name: archive-change-doc
        type: call
        call: sharepoint.upload-document
        with:
          site_id: rd_formulations
          folder_path: ChangeRequests/{{material_number}}
          file_name: '{{create-jira-ticket.key}}_change.json'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recipes
      path: /RecipeSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: update-recipe
        method: PATCH
  - 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}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-document
        method: PUT
Open in Framework → View in Fleet → formulation-change-approval-workflow.yml

Automates raw material procurement by checking stock in SAP, generating a purchase requisition, and notifying the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Raw Material Procurement Orchestrator
  description: Automates raw material procurement by checking stock in SAP, generating a purchase requisition, and notifying the procurement team via Microsoft Teams.
  tags:
  - procurement
  - supply-chain
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: material-procurement
    port: 8080
    tools:
    - name: procure-material
      description: Automate raw material procurement workflow.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: quantity_needed
        in: body
        type: number
        description: Quantity needed.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: check-stock
        type: call
        call: sap.get-stock
        with:
          material_id: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: create-requisition
        type: call
        call: sap.create-purchase-req
        with:
          material_id: '{{material_number}}'
          quantity: '{{quantity_needed}}'
          plant: '{{plant_code}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-alerts
          text: 'Purchase requisition {{create-requisition.req_number}} created for material {{material_number}}, qty {{quantity_needed}} at plant {{plant_code}}. Current stock: {{check-stock.available_quantity}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZMM_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /StockSet(Material='{{material_id}}',Plant='{{plant}}')
      inputParameters:
      - name: material_id
        in: path
      - name: plant
        in: path
      operations:
      - name: get-stock
        method: GET
    - name: purchase-requisitions
      path: /PurchaseRequisitionSet
      operations:
      - name: create-purchase-req
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → raw-material-procurement-orchestrator.yml

Orchestrates global price changes by updating SAP condition records, syncing to the e-commerce platform, and notifying regional sales teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Global Product Pricing Update Orchestrator
  description: Orchestrates global price changes by updating SAP condition records, syncing to the e-commerce platform, and notifying regional sales teams via Microsoft Teams.
  tags:
  - pricing
  - sales
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-update
    port: 8080
    tools:
    - name: update-global-pricing
      description: Update product pricing across SAP and e-commerce, notifying sales.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: new_price
        in: body
        type: number
        description: The new list price.
      - name: effective_date
        in: body
        type: string
        description: Effective date in YYYY-MM-DD.
      - name: regions
        in: body
        type: string
        description: Comma-separated region codes.
      steps:
      - name: update-sap-price
        type: call
        call: sap.update-condition-record
        with:
          material: '{{material_number}}'
          price: '{{new_price}}'
          valid_from: '{{effective_date}}'
      - name: sync-ecommerce
        type: call
        call: sap-commerce.update-price
        with:
          sku: '{{material_number}}'
          price: '{{new_price}}'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-pricing-updates
          text: 'Price update: {{material_number}} new price {{new_price}} effective {{effective_date}} for regions: {{regions}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZSD_PRICING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: conditions
      path: /ConditionRecordSet
      operations:
      - name: update-condition-record
        method: POST
  - type: http
    namespace: sap-commerce
    baseUri: https://henkel-commerce.sap.com/occ/v2
    authentication:
      type: bearer
      token: $secrets.sap_commerce_token
    resources:
    - name: prices
      path: /products/{{sku}}/prices
      inputParameters:
      - name: sku
        in: path
      operations:
      - name: update-price
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → global-product-pricing-update-orchestrator.yml

Gathers market share data from Nielsen, competitor pricing from Circana, and consolidates findings into a Confluence market intelligence page.

naftiko: '0.5'
info:
  label: Market Intelligence Report Generator
  description: Gathers market share data from Nielsen, competitor pricing from Circana, and consolidates findings into a Confluence market intelligence page.
  tags:
  - marketing
  - market-research
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: market-intelligence
    port: 8080
    tools:
    - name: generate-market-report
      description: Generate a market intelligence report from multiple data sources.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The product category.
      - name: market
        in: body
        type: string
        description: The market region.
      steps:
      - name: get-market-share
        type: call
        call: nielsen.get-market-data
        with:
          category: '{{category}}'
          market: '{{market}}'
      - name: get-competitor-pricing
        type: call
        call: circana.get-pricing
        with:
          category: '{{category}}'
          region: '{{market}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space: MKTINTEL
          title: 'Market Intelligence: {{category}} - {{market}}'
          body: 'Market share: {{get-market-share.henkel_share}}%. Top competitor: {{get-competitor-pricing.leader}}. Avg price delta: {{get-competitor-pricing.price_delta}}.'
  consumes:
  - type: http
    namespace: nielsen
    baseUri: https://api.nielsen.com/v1
    authentication:
      type: bearer
      token: $secrets.nielsen_token
    resources:
    - name: market-data
      path: /marketshare?category={{category}}&market={{market}}
      inputParameters:
      - name: category
        in: query
      - name: market
        in: query
      operations:
      - name: get-market-data
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: pricing
      path: /pricing?category={{category}}&region={{region}}
      inputParameters:
      - name: category
        in: query
      - name: region
        in: query
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → market-intelligence-report-generator.yml

Verifies packaging compliance by checking material specs in SAP, validating regulatory data in Veeva Vault, and logging results in Confluence.

naftiko: '0.5'
info:
  label: Packaging Compliance Verification Pipeline
  description: Verifies packaging compliance by checking material specs in SAP, validating regulatory data in Veeva Vault, and logging results in Confluence.
  tags:
  - packaging
  - compliance
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: packaging-compliance
    port: 8080
    tools:
    - name: verify-packaging-compliance
      description: Verify packaging materials meet regulatory compliance.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the packaging item.
      - name: target_market
        in: body
        type: string
        description: The target market country code.
      steps:
      - name: get-packaging-spec
        type: call
        call: sap.get-material-spec
        with:
          material_id: '{{material_number}}'
      - name: check-regulatory
        type: call
        call: veeva.get-document
        with:
          doc_type: packaging_regulation
          market: '{{target_market}}'
          material_ref: '{{material_number}}'
      - name: log-result
        type: call
        call: confluence.create-page
        with:
          space: PKGCOMP
          title: 'Compliance Check: {{material_number}} - {{target_market}}'
          body: 'Material: {{get-packaging-spec.description}}. Regulatory status: {{check-regulatory.compliance_status}}. Last updated: {{check-regulatory.last_review_date}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /MaterialSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material-spec
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://henkel.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents?doc_type={{doc_type}}&market={{market}}&material_ref={{material_ref}}
      inputParameters:
      - name: doc_type
        in: query
      - name: market
        in: query
      - name: material_ref
        in: query
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → packaging-compliance-verification-pipeline.yml

Triggers an Informatica data quality job for product master data, checks results, and creates a ServiceNow task for data stewards if quality thresholds are not met.

naftiko: '0.5'
info:
  label: Informatica Data Quality Pipeline
  description: Triggers an Informatica data quality job for product master data, checks results, and creates a ServiceNow task for data stewards if quality thresholds are not met.
  tags:
  - data-quality
  - master-data
  - informatica
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Run an Informatica data quality job and flag issues.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The Informatica job name.
      steps:
      - name: run-job
        type: call
        call: informatica.run-job
        with:
          job_name: '{{job_name}}'
      - name: create-task
        type: call
        call: servicenow.create-record
        with:
          table: u_data_quality_tasks
          short_description: 'Data quality: {{job_name}} - {{run-job.failed_records}} failures'
          description: 'Job: {{job_name}}. Total records: {{run-job.total_records}}. Passed: {{run-job.passed_records}}. Failed: {{run-job.failed_records}}. Score: {{run-job.quality_score}}%.'
          assigned_group: Data_Stewards
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://henkel.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-pipeline.yml

Retrieves sprint status for an R&D Jira project.

naftiko: '0.5'
info:
  label: Jira R&D Project Tracker
  description: Retrieves sprint status for an R&D Jira project.
  tags:
  - r-and-d
  - jira
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: rd-tracking
    port: 8080
    tools:
    - name: get-rd-project-status
      description: Get R&D project status from Jira.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira.get-project
      with:
        project_key: '{{project_key}}'
      outputParameters:
      - name: total_issues
        type: integer
        mapping: $.total
      - name: open_issues
        type: integer
        mapping: $.open_count
  consumes:
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search?jql=project={{project_key}}
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-project
        method: GET
Open in Framework → View in Fleet → jira-r-d-project-tracker.yml

Runs a customer segmentation query in Snowflake, returning segment name, customer count, and average order value for a given brand.

naftiko: '0.5'
info:
  label: Snowflake Customer Segmentation Query
  description: Runs a customer segmentation query in Snowflake, returning segment name, customer count, and average order value for a given brand.
  tags:
  - analytics
  - customer
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-segments
    port: 8080
    tools:
    - name: query-segments
      description: Query customer segments by brand from Snowflake.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand name to segment.
      call: snowflake.execute-query
      with:
        statement: SELECT segment_name, customer_count, avg_order_value FROM customer_segments WHERE brand = '{{brand}}'
      outputParameters:
      - name: segments
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://henkel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-customer-segmentation-query.yml

Compares actual sales from SAP BW against forecast in Snowflake, calculates variance, and sends alerts to sales leadership via Microsoft Teams when thresholds are breached.

naftiko: '0.5'
info:
  label: Sales Forecast Variance Alerter
  description: Compares actual sales from SAP BW against forecast in Snowflake, calculates variance, and sends alerts to sales leadership via Microsoft Teams when thresholds are breached.
  tags:
  - sales
  - forecasting
  - sap-bw
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: forecast-variance
    port: 8080
    tools:
    - name: check-forecast-variance
      description: Check sales forecast variance and alert on threshold breach.
      inputParameters:
      - name: brand_code
        in: body
        type: string
        description: The brand code.
      - name: region
        in: body
        type: string
        description: The sales region.
      - name: period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: get-actual-sales
        type: call
        call: sap-bw.get-sales
        with:
          brand: '{{brand_code}}'
          region: '{{region}}'
          period: '{{period}}'
      - name: get-forecast
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT forecast_amount FROM sales_forecast WHERE brand='{{brand_code}}' AND region='{{region}}' AND period='{{period}}'
      - name: alert-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-leadership
          text: 'Forecast variance alert for {{brand_code}} in {{region}} ({{period}}): Actual={{get-actual-sales.total}}, Forecast={{get-forecast.data[0].forecast_amount}}.'
  consumes:
  - type: http
    namespace: sap-bw
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZBW_SALES_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales
      path: /SalesDataSet(Brand='{{brand}}',Region='{{region}}',Period='{{period}}')
      inputParameters:
      - name: brand
        in: path
      - name: region
        in: path
      - name: period
        in: path
      operations:
      - name: get-sales
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://henkel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sales-forecast-variance-alerter.yml

Monitors digital shelf presence by checking product content in Salsify, pulling e-retailer rankings from Profitero, and syncing results to Snowflake.

naftiko: '0.5'
info:
  label: Digital Shelf Analytics Pipeline
  description: Monitors digital shelf presence by checking product content in Salsify, pulling e-retailer rankings from Profitero, and syncing results to Snowflake.
  tags:
  - e-commerce
  - digital-shelf
  - salsify
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: digital-shelf
    port: 8080
    tools:
    - name: analyze-digital-shelf
      description: Analyze digital shelf performance for a product.
      inputParameters:
      - name: product_gtin
        in: body
        type: string
        description: The product GTIN.
      - name: retailer
        in: body
        type: string
        description: The e-retailer name.
      steps:
      - name: get-content-score
        type: call
        call: salsify.get-product
        with:
          gtin: '{{product_gtin}}'
      - name: get-search-rank
        type: call
        call: profitero.get-ranking
        with:
          gtin: '{{product_gtin}}'
          retailer: '{{retailer}}'
      - name: sync-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO digital_shelf_metrics (gtin, retailer, content_score, search_rank, captured_at) VALUES ('{{product_gtin}}', '{{retailer}}', {{get-content-score.completeness_score}}, {{get-search-rank.rank}}, CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: salsify
    baseUri: https://app.salsify.com/api/v1
    authentication:
      type: bearer
      token: $secrets.salsify_token
    resources:
    - name: products
      path: /products/{{gtin}}
      inputParameters:
      - name: gtin
        in: path
      operations:
      - name: get-product
        method: GET
  - type: http
    namespace: profitero
    baseUri: https://api.profitero.com/v2
    authentication:
      type: apiKey
      key: $secrets.profitero_api_key
    resources:
    - name: rankings
      path: /products/{{gtin}}/rankings?retailer={{retailer}}
      inputParameters:
      - name: gtin
        in: path
      - name: retailer
        in: query
      operations:
      - name: get-ranking
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://henkel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → digital-shelf-analytics-pipeline.yml

Pulls technical specifications from SAP for an adhesive product, generates a TDS document in SharePoint, and notifies the technical team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Adhesive Technical Data Sheet Generator
  description: Pulls technical specifications from SAP for an adhesive product, generates a TDS document in SharePoint, and notifies the technical team in Microsoft Teams.
  tags:
  - r-and-d
  - adhesives
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tds-generation
    port: 8080
    tools:
    - name: generate-tds
      description: Generate a technical data sheet for an adhesive product.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-specs
        type: call
        call: sap.get-technical-specs
        with:
          material_id: '{{material_number}}'
      - name: store-tds
        type: call
        call: sharepoint.create-file
        with:
          site_id: technical_docs_site
          file_path: TDS/{{material_number}}_TDS_v{{get-specs.version}}.pdf
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: technical-docs
          text: 'TDS generated for {{get-specs.product_name}} ({{material_number}}). Version: {{get-specs.version}}. Document: {{store-tds.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_TECHSPEC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: specs
      path: /TechnicalSpecSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-technical-specs
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adhesive-technical-data-sheet-generator.yml

Aggregates social media metrics from Instagram, Facebook, and LinkedIn for a Henkel brand, then logs the combined report in Google Sheets.

naftiko: '0.5'
info:
  label: Brand Social Media Performance Aggregator
  description: Aggregates social media metrics from Instagram, Facebook, and LinkedIn for a Henkel brand, then logs the combined report in Google Sheets.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - linkedin
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: social-performance
    port: 8080
    tools:
    - name: aggregate-social-metrics
      description: Aggregate social media performance for a brand across platforms.
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The Henkel brand name.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      steps:
      - name: get-instagram-metrics
        type: call
        call: instagram.get-insights
        with:
          account_name: '{{brand_name}}'
          period: '{{date_range}}'
      - name: get-facebook-metrics
        type: call
        call: facebook.get-page-insights
        with:
          page_name: '{{brand_name}}'
          period: '{{date_range}}'
      - name: get-linkedin-metrics
        type: call
        call: linkedin.get-page-stats
        with:
          organization: '{{brand_name}}'
          period: '{{date_range}}'
      - name: log-to-sheets
        type: call
        call: google-sheets.append-row
        with:
          spreadsheet_id: social_performance_tracker
          range: '{{brand_name}}!A:F'
          values:
          - '{{date_range}}'
          - '{{get-instagram-metrics.engagement_rate}}'
          - '{{get-facebook-metrics.reach}}'
          - '{{get-linkedin-metrics.impressions}}'
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: insights
      path: /{{account_name}}/insights
      inputParameters:
      - name: account_name
        in: path
      operations:
      - name: get-insights
        method: GET
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: page-insights
      path: /{{page_name}}/insights
      inputParameters:
      - name: page_name
        in: path
      operations:
      - name: get-page-insights
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: page-stats
      path: /organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity={{organization}}
      inputParameters:
      - name: organization
        in: path
      operations:
      - name: get-page-stats
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → brand-social-media-performance-aggregator.yml

Creates a Salesforce campaign for a product launch, schedules social posts in HubSpot, sends a press release via Microsoft Outlook, and notifies the marketing team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Marketing Campaign Launcher
  description: Creates a Salesforce campaign for a product launch, schedules social posts in HubSpot, sends a press release via Microsoft Outlook, and notifies the marketing team in Microsoft Teams.
  tags:
  - marketing
  - campaign
  - salesforce
  - hubspot
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-campaigns
    port: 8080
    tools:
    - name: launch-campaign
      description: Launch a marketing campaign across Salesforce, HubSpot, email, and Teams.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: product_name
        in: body
        type: string
        description: The product being promoted.
      - name: launch_date
        in: body
        type: string
        description: The launch date.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          start_date: '{{launch_date}}'
          type: Product Launch
      - name: schedule-social
        type: call
        call: hubspot.create-social-post
        with:
          content: 'Introducing {{product_name}} from Henkel! #Henkel #Innovation #{{product_name}}'
          campaign_id: '{{create-campaign.Id}}'
      - name: send-press-release
        type: call
        call: outlook.send-email
        with:
          to: press@henkel.com
          subject: 'Press Release: {{campaign_name}} - {{product_name}}'
          body: 'Henkel announces {{product_name}} launching {{launch_date}}. Campaign: {{create-campaign.Id}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-launches
          text: 'Campaign launched: {{campaign_name}} for {{product_name}}. SF Campaign: {{create-campaign.Id}}. Launch: {{launch_date}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://henkel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social-posts
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-social-post
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-email
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → marketing-campaign-launcher.yml

Searches the Workday employee directory by name or department, returning employee ID, title, location, and manager.

naftiko: '0.5'
info:
  label: Workday Employee Directory Search
  description: Searches the Workday employee directory by name or department, returning employee ID, title, location, and manager.
  tags:
  - hr
  - employee
  - workday
capability:
  exposes:
  - type: mcp
    namespace: employee-directory
    port: 8080
    tools:
    - name: search-employee
      description: Search for an employee by name or department in Workday.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Employee name or department to search.
      call: workday.search-workers
      with:
        query: '{{search_term}}'
      outputParameters:
      - name: employee_id
        type: string
        mapping: $.workers[0].id
      - name: full_name
        type: string
        mapping: $.workers[0].fullName
      - name: title
        type: string
        mapping: $.workers[0].jobTitle
      - name: location
        type: string
        mapping: $.workers[0].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: workers
      path: /workers?search={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-workers
        method: GET
Open in Framework → View in Fleet → workday-employee-directory-search.yml

Traces production batch genealogy by querying SAP batch records, retrieving raw material lot data, and publishing the full traceability tree to Confluence.

naftiko: '0.5'
info:
  label: Production Batch Genealogy Tracker
  description: Traces production batch genealogy by querying SAP batch records, retrieving raw material lot data, and publishing the full traceability tree to Confluence.
  tags:
  - manufacturing
  - traceability
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: batch-genealogy
    port: 8080
    tools:
    - name: trace-batch
      description: Trace complete batch genealogy across raw materials and production.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The finished goods batch number.
      steps:
      - name: get-batch-record
        type: call
        call: sap.get-batch
        with:
          batch_id: '{{batch_number}}'
      - name: get-raw-material-lots
        type: call
        call: sap.get-component-lots
        with:
          production_order: '{{get-batch-record.production_order}}'
      - name: publish-genealogy
        type: call
        call: confluence.create-page
        with:
          space: QUALITY
          title: 'Batch Genealogy: {{batch_number}}'
          body: 'Product: {{get-batch-record.product_name}}. Production date: {{get-batch-record.production_date}}. Components: {{get-raw-material-lots.lot_summary}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /BatchSet('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch
        method: GET
    - name: components
      path: /ProductionOrderSet('{{production_order}}')/ComponentLots
      inputParameters:
      - name: production_order
        in: path
      operations:
      - name: get-component-lots
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://henkel.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → production-batch-genealogy-tracker.yml

Pulls plant KPI data from SAP and writes to Google Sheets.

naftiko: '0.5'
info:
  label: Google Sheets Plant KPI Dashboard
  description: Pulls plant KPI data from SAP and writes to Google Sheets.
  tags:
  - reporting
  - google-sheets
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sheets-kpis
    port: 8080
    tools:
    - name: sync-plant-kpis
      description: Sync SAP plant KPIs to Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets ID.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-kpis
        type: call
        call: sap.get-plant-kpis
        with:
          plant: '{{plant_code}}'
      - name: update-sheet
        type: call
        call: gsheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: KPIs!A2:E2
          values:
          - - '{{plant_code}}'
            - '{{get-kpis.oee}}'
            - '{{get-kpis.yield}}'
            - '{{get-kpis.safety_rate}}'
            - '{{get-kpis.on_time_delivery}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPP_KPI_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: kpis
      path: /PlantKPISet('{{plant}}')
      inputParameters:
      - name: plant
        in: path
      operations:
      - name: get-plant-kpis
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → google-sheets-plant-kpi-dashboard.yml

Pulls inventory levels from SAP for raw materials and finished goods, pushes to Power BI for supply chain visibility, and alerts the planning team in Microsoft Teams if below safety stock.

naftiko: '0.5'
info:
  label: Supply Chain Inventory Monitor
  description: Pulls inventory levels from SAP for raw materials and finished goods, pushes to Power BI for supply chain visibility, and alerts the planning team in Microsoft Teams if below safety stock.
  tags:
  - supply-chain
  - inventory
  - sap
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-inventory
    port: 8080
    tools:
    - name: monitor-inventory
      description: Monitor inventory levels and alert on low stock.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: material_group
        in: body
        type: string
        description: The material group to monitor.
      steps:
      - name: get-inventory
        type: call
        call: sap.get-plant-inventory
        with:
          plant: '{{plant_code}}'
          material_group: '{{material_group}}'
      - name: push-to-bi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: inventory_ds
          table_name: Inventory
          rows:
          - plant: '{{plant_code}}'
            material_group: '{{material_group}}'
            on_hand: '{{get-inventory.total_on_hand}}'
            safety_stock: '{{get-inventory.safety_stock}}'
            below_safety: '{{get-inventory.below_safety_count}}'
      - name: alert-planning
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-planning
          text: 'Inventory alert for plant {{plant_code}}: {{get-inventory.below_safety_count}} materials below safety stock in group {{material_group}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZMM_INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /PlantInventorySet(Plant='{{plant}}',MaterialGroup='{{material_group}}')
      inputParameters:
      - name: plant
        in: path
      - name: material_group
        in: path
      operations:
      - name: get-plant-inventory
        method: GET
  - 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}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-inventory-monitor.yml

Assesses supplier risk by pulling vendor data from SAP Ariba, checking financial health via Dun and Bradstreet, and logging findings in ServiceNow.

naftiko: '0.5'
info:
  label: Supplier Risk Assessment Pipeline
  description: Assesses supplier risk by pulling vendor data from SAP Ariba, checking financial health via Dun and Bradstreet, and logging findings in ServiceNow.
  tags:
  - procurement
  - risk
  - sap-ariba
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: supplier-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: Run supplier risk assessment across procurement and financial systems.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP Ariba vendor ID.
      steps:
      - name: get-vendor-profile
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{vendor_id}}'
      - name: check-financial-health
        type: call
        call: dnb.get-company-risk
        with:
          duns_number: '{{get-vendor-profile.duns_number}}'
      - name: log-assessment
        type: call
        call: servicenow.create-record
        with:
          table: u_supplier_risk
          vendor_name: '{{get-vendor-profile.vendor_name}}'
          risk_score: '{{check-financial-health.risk_score}}'
          financial_rating: '{{check-financial-health.rating}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/sourcing/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: dnb
    baseUri: https://plus.dnb.com/v1
    authentication:
      type: bearer
      token: $secrets.dnb_token
    resources:
    - name: risk
      path: /data/duns/{{duns_number}}?productId=cmprsk
      inputParameters:
      - name: duns_number
        in: path
      operations:
      - name: get-company-risk
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://henkel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → supplier-risk-assessment-pipeline.yml

Coordinates product registration for new markets by retrieving formulation data from SAP, submitting regulatory documents to Veeva Vault, and tracking progress in Jira.

naftiko: '0.5'
info:
  label: New Market Product Registration Coordinator
  description: Coordinates product registration for new markets by retrieving formulation data from SAP, submitting regulatory documents to Veeva Vault, and tracking progress in Jira.
  tags:
  - regulatory
  - product-registration
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: product-registration
    port: 8080
    tools:
    - name: register-product
      description: Coordinate product registration for a new market.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: target_country
        in: body
        type: string
        description: Target country ISO code.
      steps:
      - name: get-formulation
        type: call
        call: sap.get-recipe
        with:
          material_id: '{{material_number}}'
      - name: submit-regulatory-docs
        type: call
        call: veeva.create-submission
        with:
          product_name: '{{get-formulation.product_name}}'
          country: '{{target_country}}'
          formulation_ref: '{{material_number}}'
      - name: create-tracking-ticket
        type: call
        call: jira.create-issue
        with:
          project: REGAFF
          issue_type: Task
          summary: 'Product registration: {{get-formulation.product_name}} in {{target_country}}'
          description: 'Veeva submission: {{submit-regulatory-docs.submission_id}}. Material: {{material_number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://henkel-s4.sap.com/sap/opu/odata/sap/ZPR_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recipes
      path: /RecipeSet('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-recipe
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://henkel.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: submissions
      path: /objects/submissions
      operations:
      - name: create-submission
        method: POST
  - type: http
    namespace: jira
    baseUri: https://henkel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → new-market-product-registration-coordinator.yml

Queries SAP HANA for production analytics by plant and product line, returning OEE, yield, and downtime metrics.

naftiko: '0.5'
info:
  label: SAP HANA Production Analytics
  description: Queries SAP HANA for production analytics by plant and product line, returning OEE, yield, and downtime metrics.
  tags:
  - analytics
  - manufacturing
  - sap-hana
capability:
  exposes:
  - type: mcp
    namespace: production-analytics
    port: 8080
    tools:
    - name: query-production-analytics
      description: Query SAP HANA for production performance metrics.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: product_line
        in: body
        type: string
        description: The product line.
      call: saphana.query-production
      with:
        plant: '{{plant_code}}'
        product_line: '{{product_line}}'
      outputParameters:
      - name: oee
        type: string
        mapping: $.d.OEE
      - name: yield_pct
        type: string
        mapping: $.d.YieldPercentage
      - name: downtime_hours
        type: number
        mapping: $.d.DowntimeHours
  consumes:
  - type: http
    namespace: saphana
    baseUri: https://henkel-hana.sap.com/sap/opu/odata/sap/ZPP_ANALYTICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: production
      path: /ProductionAnalyticsSet(Plant='{{plant}}',ProductLine='{{product_line}}')
      inputParameters:
      - name: plant
        in: path
      - name: product_line
        in: path
      operations:
      - name: query-production
        method: GET
Open in Framework → View in Fleet → sap-hana-production-analytics.yml

Monitors warehouse capacity levels in SAP, creates planning alerts in ServiceNow, and notifies logistics when thresholds are breached for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Warehouse Capacity Planning Alert
  description: Monitors warehouse capacity levels in SAP, creates planning alerts in ServiceNow, and notifies logistics when thresholds are breached for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - warehouse
  - capacity-planning
capability:
  exposes:
  - type: mcp
    namespace: logistics-planning
    port: 8080
    tools:
    - name: alert-warehouse-capacity
      description: Given a warehouse and capacity threshold, check current utilization and alert if exceeded.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: The SAP warehouse number.
      - name: threshold_percent
        in: body
        type: integer
        description: Capacity utilization threshold percentage.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      steps:
      - name: check-capacity
        type: call
        call: sap.get-warehouse-utilization
        with:
          warehouse: '{{warehouse_id}}'
          plant: '{{plant}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Warehouse Capacity Alert: {{warehouse_id}} at {{check-capacity.utilization}}%'
          category: logistics
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.logistics_channel
          text: 'Warehouse Capacity: {{warehouse_id}} at Plant {{plant}} is at {{check-capacity.utilization}}% (threshold: {{threshold_percent}}%). SNOW: {{create-alert.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-warehouse-capacity-planning-alert.yml

Retrieves material master data from SAP S/4HANA by material number for Johnson & Johnson manufacturing and supply chain operations.

naftiko: '0.5'
info:
  label: SAP Material Master Lookup
  description: Retrieves material master data from SAP S/4HANA by material number for Johnson & Johnson manufacturing and supply chain operations.
  tags:
  - manufacturing
  - sap
  - supply-chain
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: get-material
      description: Given a SAP material number, return the material description, base unit of measure, and material group.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number (e.g., MAT-001234).
      call: sap.get-material
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.MaterialDescription
      - name: base_uom
        type: string
        mapping: $.d.BaseUnit
      - name: material_group
        type: string
        mapping: $.d.MaterialGroup
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-material-master-lookup.yml

Checks travel expense reports for policy violations, creates audit findings in ServiceNow, and notifies finance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Concur Travel Policy Compliance Checker
  description: Checks travel expense reports for policy violations, creates audit findings in ServiceNow, and notifies finance for Johnson & Johnson.
  tags:
  - finance
  - sap-concur
  - compliance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: finance-compliance
    port: 8080
    tools:
    - name: check-travel-compliance
      description: Given an expense report ID, check for policy violations, create audit findings, and notify the compliance team.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The employee ID who submitted the report.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: log-findings
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Travel Compliance Review: Report {{report_id}}'
          category: finance_audit
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_compliance_channel
          text: 'Travel Compliance: Report {{report_id}} by Employee {{employee_id}}. Total: {{get-report.total}}. Violations: {{get-report.violations_count}}. SNOW: {{log-findings.number}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.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: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-policy-compliance-checker.yml

Retrieves the latest document versions and approval states from Veeva Vault for a given product dossier, and flags any documents in Draft state past their review deadline.

naftiko: '0.5'
info:
  label: Veeva Vault Document Version Control Check
  description: Retrieves the latest document versions and approval states from Veeva Vault for a given product dossier, and flags any documents in Draft state past their review deadline.
  tags:
  - regulatory
  - quality
  - veeva
  - compliance
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: vault-ops
    port: 8080
    tools:
    - name: check-dossier-document-states
      description: Given a Veeva Vault product dossier ID, retrieve all contained documents and their lifecycle states. Flag any that are in Draft state and past the expected review deadline.
      inputParameters:
      - name: dossier_id
        in: body
        type: string
        description: The Veeva Vault dossier or binder ID to check.
      - name: review_deadline
        in: body
        type: string
        description: The review deadline date in YYYY-MM-DD format.
      call: veeva.list-binder-documents
      with:
        dossier_id: '{{dossier_id}}'
      outputParameters:
      - name: document_count
        type: number
        mapping: $.responseStatus
      - name: documents
        type: array
        mapping: $.data
        items:
        - name: document_id
          type: string
          mapping: $.id
        - name: state
          type: string
          mapping: $.lifecycle_state__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: binder-documents
      path: /objects/binders/{{dossier_id}}/documents
      inputParameters:
      - name: dossier_id
        in: path
      operations:
      - name: list-binder-documents
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-version-control-check.yml

Retrieves batch genealogy and traceability data from SAP for a given batch number in Johnson & Johnson manufacturing.

naftiko: '0.5'
info:
  label: SAP Batch Genealogy Lookup
  description: Retrieves batch genealogy and traceability data from SAP for a given batch number in Johnson & Johnson manufacturing.
  tags:
  - manufacturing
  - sap
  - batch-tracking
  - quality
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: get-batch-genealogy
      description: Given a batch number and plant code, return the batch creation date, material, and expiry date.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-batch
      with:
        batch_number: '{{batch_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: material
        type: string
        mapping: $.d.Material
      - name: manufacture_date
        type: string
        mapping: $.d.ManufactureDate
      - name: shelf_life_expiry
        type: string
        mapping: $.d.ShelfLifeExpirationDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Material='',Batch='{{batch_number}}',Plant='{{plant}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → sap-batch-genealogy-lookup.yml

Creates monitoring visit schedules in Veeva Vault, assigns tasks in Jira, and notifies the CRA team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Site Monitoring Visit Scheduler
  description: Creates monitoring visit schedules in Veeva Vault, assigns tasks in Jira, and notifies the CRA team for Johnson & Johnson.
  tags:
  - clinical-trials
  - veeva-vault
  - jira
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: clinical-monitoring
    port: 8080
    tools:
    - name: schedule-monitoring-visit
      description: Given site and visit details, create a Veeva Vault record, a Jira task, and a Teams notification.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier.
      - name: visit_type
        in: body
        type: string
        description: Type of monitoring visit (routine, for-cause, closeout).
      - name: visit_date
        in: body
        type: string
        description: Scheduled date for the visit.
      - name: cra_name
        in: body
        type: string
        description: Name of the assigned CRA.
      steps:
      - name: create-vault-record
        type: call
        call: veeva.create-object-record
        with:
          object_type: monitoring_visit__c
          site_id__c: '{{site_id}}'
          visit_type__c: '{{visit_type}}'
          visit_date__c: '{{visit_date}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: CLIN
          summary: 'Monitoring Visit: {{visit_type}} at Site {{site_id}} on {{visit_date}}'
          issuetype: Task
      - name: notify-cra-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cra_channel
          text: 'New {{visit_type}} monitoring visit at Site {{site_id}} on {{visit_date}}. CRA: {{cra_name}}. Jira: {{create-jira-task.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-site-monitoring-visit-scheduler.yml

Validates invoices by performing three-way matching in SAP, logs exceptions in ServiceNow, and notifies accounts payable for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Invoice Three-Way Match Validator
  description: Validates invoices by performing three-way matching in SAP, logs exceptions in ServiceNow, and notifies accounts payable for Johnson & Johnson.
  tags:
  - finance
  - sap
  - accounts-payable
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: validate-invoice-match
      description: Given an invoice number, perform three-way match validation, log exceptions, and notify AP.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      steps:
      - name: check-match
        type: call
        call: sap.validate-three-way-match
        with:
          invoice_number: '{{invoice_number}}'
          company_code: '{{company_code}}'
      - name: log-exception
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Invoice Match Exception: {{invoice_number}}'
          category: accounts_payable
      - name: notify-ap
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.ap_channel
          text: 'Invoice Match: {{invoice_number}} in Company {{company_code}}. Status: {{check-match.status}}. Variance: {{check-match.variance}}. SNOW: {{log-exception.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-three-way-match-validator.yml

Retrieves cost element master data from SAP for Johnson & Johnson finance and controlling operations.

naftiko: '0.5'
info:
  label: SAP Cost Element Lookup
  description: Retrieves cost element master data from SAP for Johnson & Johnson finance and controlling operations.
  tags:
  - finance
  - sap
  - controlling
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: finance-controlling
    port: 8080
    tools:
    - name: get-cost-element
      description: Given a cost element code, return the description, category, and controlling area.
      inputParameters:
      - name: cost_element
        in: body
        type: string
        description: The SAP cost element code.
      call: sap.get-cost-element
      with:
        cost_element: '{{cost_element}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.CostElementDescription
      - name: category
        type: string
        mapping: $.d.CostElementCategory
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTELEMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-cost-element-lookup.yml

When a new lead is created in Salesforce for an Innovative Medicine product, enriches the lead with additional contact and company data, then updates the Salesforce record.

naftiko: '0.5'
info:
  label: Salesforce CRM Lead Enrichment
  description: When a new lead is created in Salesforce for an Innovative Medicine product, enriches the lead with additional contact and company data, then updates the Salesforce record.
  tags:
  - sales
  - crm
  - salesforce
  - enrichment
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-pharma-lead
      description: Given a Salesforce lead ID for an Innovative Medicine product, retrieve the lead details and update the record with enriched medical specialty and institution data.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: salesforce-read.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: update-lead
        type: call
        call: salesforce-write.update-lead
        with:
          lead_id: '{{lead_id}}'
          lead_source: Enriched
          status: Working
  consumes:
  - type: http
    namespace: salesforce-read
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: salesforce-write
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-crm-lead-enrichment.yml

Tracks IRB approval status for clinical sites by querying Veeva Vault, updating Jira, and notifying the regulatory team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical IRB Approval Tracking Orchestrator
  description: Tracks IRB approval status for clinical sites by querying Veeva Vault, updating Jira, and notifying the regulatory team for Johnson & Johnson.
  tags:
  - clinical-trials
  - regulatory
  - veeva-vault
  - jira
capability:
  exposes:
  - type: mcp
    namespace: clinical-regulatory
    port: 8080
    tools:
    - name: track-irb-approvals
      description: Given a study ID, check IRB approval status across sites, update tracking, and notify the team.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: region
        in: body
        type: string
        description: The geographic region to check.
      steps:
      - name: query-irb-status
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT site_id__c, irb_status__c FROM irb_submission__c WHERE study_id__c = '{{study_id}}' AND region__c = '{{region}}'
      - name: update-tracker
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'IRB Status Update: Study {{study_id}} — {{region}}'
          issuetype: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.regulatory_channel
          text: 'IRB Approval Status for Study {{study_id}} ({{region}}): {{query-irb-status.totalCount}} sites tracked. Jira: {{update-tracker.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-submissions
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-irb-approval-tracking-orchestrator.yml

Orchestrates vendor qualification reviews by pulling vendor data from SAP, creating a ServiceNow assessment task, and notifying procurement for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Vendor Qualification Review Orchestrator
  description: Orchestrates vendor qualification reviews by pulling vendor data from SAP, creating a ServiceNow assessment task, and notifying procurement for Johnson & Johnson.
  tags:
  - procurement
  - sap
  - servicenow
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: initiate-vendor-review
      description: Given a vendor number, retrieve vendor details from SAP, create an assessment task, and notify procurement.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      - name: review_type
        in: body
        type: string
        description: Type of qualification review (initial, periodic, for-cause).
      steps:
      - name: get-vendor-data
        type: call
        call: sap.get-vendor
        with:
          vendor_number: '{{vendor_number}}'
      - name: create-assessment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor Qualification: {{get-vendor-data.SupplierName}} — {{review_type}}'
          category: vendor_management
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.procurement_channel
          text: 'Vendor Review initiated for {{get-vendor-data.SupplierName}} ({{vendor_number}}). Type: {{review_type}}. Task: {{create-assessment.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-qualification-review-orchestrator.yml

Returns current headcount by department and cost center from Workday, segmented by business unit for workforce planning across MedTech and Innovative Medicine.

naftiko: '0.5'
info:
  label: Payroll Headcount Snapshot
  description: Returns current headcount by department and cost center from Workday, segmented by business unit for workforce planning across MedTech and Innovative Medicine.
  tags:
  - hr
  - payroll
  - headcount
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-by-department
      description: Returns a list of active employees grouped by department and cost center from Workday. Use for headcount planning, budget forecasting, and organizational design.
      call: workday.headcount-report
      outputParameters:
      - name: employees
        type: array
        mapping: $.Report_Entry
        items:
        - name: employee_id
          type: string
          mapping: $.Employee_ID
        - name: full_name
          type: string
          mapping: $.Worker
        - name: department
          type: string
          mapping: $.Cost_Center
        - name: employment_type
          type: string
          mapping: $.Worker_Type
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/service/customreport2
    authentication:
      type: basic
      username: $secrets.workday_report_user
      password: $secrets.workday_report_password
    resources:
    - name: headcount
      path: /jnj/headcount_by_department
      operations:
      - name: headcount-report
        method: GET
        outputRawFormat: json
Open in Framework → View in Fleet → payroll-headcount-snapshot.yml

Identifies overdue compliance training assignments in Workday and sends reminder notifications for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Workday Learning Compliance Reminder
  description: Identifies overdue compliance training assignments in Workday and sends reminder notifications for Johnson & Johnson.
  tags:
  - hr
  - workday
  - compliance
  - training
capability:
  exposes:
  - type: mcp
    namespace: hr-compliance
    port: 8080
    tools:
    - name: send-compliance-reminders
      description: Given a compliance training program ID, find overdue assignments and send reminders.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: The Workday learning program ID.
      - name: days_overdue
        in: body
        type: integer
        description: Minimum days overdue to trigger reminder.
      steps:
      - name: get-overdue
        type: call
        call: workday.get-overdue-training
        with:
          program_id: '{{program_id}}'
          days_overdue: '{{days_overdue}}'
      - name: send-reminder
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.hr_compliance_channel
          text: 'Compliance Training Alert: {{get-overdue.count}} employees overdue for program {{program_id}} (>{{days_overdue}} days).'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments?overdue=true&program={{program_id}}
      inputParameters:
      - name: program_id
        in: query
      operations:
      - name: get-overdue-training
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-learning-compliance-reminder.yml

Coordinates HCP speaker program events by creating events in Salesforce, logging compliance checks, and notifying medical affairs for Johnson & Johnson.

naftiko: '0.5'
info:
  label: HCP Speaker Program Event Coordinator
  description: Coordinates HCP speaker program events by creating events in Salesforce, logging compliance checks, and notifying medical affairs for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - compliance
  - events
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs-events
    port: 8080
    tools:
    - name: coordinate-speaker-event
      description: Given speaker event details, create the event in Salesforce, verify FMV compliance, and notify the team.
      inputParameters:
      - name: speaker_name
        in: body
        type: string
        description: Name of the HCP speaker.
      - name: event_title
        in: body
        type: string
        description: Title of the speaker program event.
      - name: event_date
        in: body
        type: string
        description: Date of the event.
      - name: honorarium_amount
        in: body
        type: string
        description: Speaker honorarium amount.
      steps:
      - name: create-event
        type: call
        call: salesforce.create-record
        with:
          object_type: Speaker_Event__c
          Speaker_Name__c: '{{speaker_name}}'
          Event_Title__c: '{{event_title}}'
      - name: check-fmv
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'FMV Compliance Check: {{speaker_name}} — {{honorarium_amount}}'
          category: compliance
      - name: notify-med-affairs
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_events_channel
          text: 'Speaker Event: {{event_title}} on {{event_date}}. Speaker: {{speaker_name}}. Honorarium: {{honorarium_amount}}. SFDC: {{create-event.id}}. FMV: {{check-fmv.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/Speaker_Event__c
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hcp-speaker-program-event-coordinator.yml

Queries SAP Ariba for supplier contracts expiring within the next 60 days, creates a ServiceNow procurement renewal task for each, and posts a contract expiry digest to the procurement Teams channel.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Expiry Monitor
  description: Queries SAP Ariba for supplier contracts expiring within the next 60 days, creates a ServiceNow procurement renewal task for each, and posts a contract expiry digest to the procurement Teams channel.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - microsoft-teams
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: contract-ops
    port: 8080
    tools:
    - name: monitor-expiring-contracts
      description: Retrieve all SAP Ariba contracts expiring in the next 60 days, open a ServiceNow renewal task for each, and post a summary digest to the procurement Teams channel.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: integer
        description: Number of days ahead to look for expiring contracts (default 60).
      steps:
      - name: get-expiring-contracts
        type: call
        call: ariba.list-expiring-contracts
        with:
          days: '{{days_until_expiry}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contract renewal required: {{days_until_expiry}} day expiry window'
          category: procurement
          assigned_group: Strategic_Sourcing
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_procurement_channel_id
          text: 'Contract Expiry Digest: {{get-expiring-contracts.contract_count}} contracts expiring within {{days_until_expiry}} days | Renewal task: {{create-renewal-task.number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts
      operations:
      - name: list-expiring-contracts
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-expiry-monitor.yml

Processes Suspected Unexpected Serious Adverse Reactions by logging in Veeva Vault, creating urgent ServiceNow cases, and alerting the DSMB for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Safety Reporting SUSAR Handler
  description: Processes Suspected Unexpected Serious Adverse Reactions by logging in Veeva Vault, creating urgent ServiceNow cases, and alerting the DSMB for Johnson & Johnson.
  tags:
  - drug-safety
  - clinical-trials
  - veeva-vault
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-safety
    port: 8080
    tools:
    - name: process-susar
      description: Given SUSAR details, log in Veeva Vault, create an urgent ServiceNow case, and alert the DSMB.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: event_term
        in: body
        type: string
        description: The adverse event MedDRA preferred term.
      - name: seriousness_criteria
        in: body
        type: string
        description: Seriousness criteria met.
      steps:
      - name: log-in-vault
        type: call
        call: veeva.create-object-record
        with:
          object_type: safety_case__c
          study_id__c: '{{study_id}}'
          patient_id__c: '{{patient_id}}'
          event_term__c: '{{event_term}}'
      - name: create-urgent-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SUSAR: {{event_term}} — Study {{study_id}}'
          priority: '1'
      - name: alert-dsmb
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.dsmb_channel
          text: 'URGENT SUSAR: {{event_term}} in Study {{study_id}} (Patient {{patient_id}}). Seriousness: {{seriousness_criteria}}. Vault: {{log-in-vault.id}}. SNOW: {{create-urgent-case.number}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-safety-reporting-susar-handler.yml

Checks a GitHub repository for branch protection rules and required status checks for Johnson & Johnson DevSecOps compliance.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Check
  description: Checks a GitHub repository for branch protection rules and required status checks for Johnson & Johnson DevSecOps compliance.
  tags:
  - devops
  - github
  - compliance
  - security
capability:
  exposes:
  - type: mcp
    namespace: devsecops
    port: 8080
    tools:
    - name: check-repo-compliance
      description: Given a repository name, return branch protection status, required reviews count, and CODEOWNERS presence.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name (org/repo format).
      call: github.get-branch-protection
      with:
        repo_name: '{{repo_name}}'
      outputParameters:
      - name: protection_enabled
        type: boolean
        mapping: $.enabled
      - name: required_reviews
        type: integer
        mapping: $.required_pull_request_reviews.required_approving_review_count
      - name: enforce_admins
        type: boolean
        mapping: $.enforce_admins.enabled
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{{repo_name}}/branches/main/protection
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-branch-protection
        method: GET
Open in Framework → View in Fleet → github-repository-compliance-check.yml

Processes patient assistance program enrollments by creating cases in Salesforce, verifying eligibility, and notifying patient services for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Patient Assistance Program Enrollment Processor
  description: Processes patient assistance program enrollments by creating cases in Salesforce, verifying eligibility, and notifying patient services for Johnson & Johnson.
  tags:
  - commercial
  - salesforce
  - patient-services
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: patient-services
    port: 8080
    tools:
    - name: process-pap-enrollment
      description: Given patient enrollment details, create a Salesforce case, verify eligibility, and notify the patient services team.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient identifier.
      - name: product_name
        in: body
        type: string
        description: The product for which assistance is requested.
      - name: insurance_status
        in: body
        type: string
        description: Patient insurance status.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'PAP Enrollment: {{product_name}} — Patient {{patient_id}}'
          type: Patient_Assistance
      - name: verify-eligibility
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT eligible FROM pap_eligibility_rules WHERE product = '{{product_name}}'
          warehouse: COMMERCIAL_WH
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.patient_services_channel
          text: 'PAP Enrollment: Patient {{patient_id}} for {{product_name}}. Eligibility: {{verify-eligibility.data}}. Case: {{create-case.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-assistance-program-enrollment-processor.yml

Retrieves current inventory stock levels from SAP for a material at a given plant for Johnson & Johnson supply chain operations.

naftiko: '0.5'
info:
  label: SAP Inventory Stock Lookup
  description: Retrieves current inventory stock levels from SAP for a material at a given plant for Johnson & Johnson supply chain operations.
  tags:
  - supply-chain
  - sap
  - inventory
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: get-stock-level
      description: Given a material number and plant code, return the unrestricted stock, quality inspection stock, and blocked stock quantities.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-stock
      with:
        material_number: '{{material_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: unrestricted
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
      - name: quality_inspection
        type: string
        mapping: $.d.QualityInspectionStockQty
      - name: blocked
        type: string
        mapping: $.d.BlockedStockQty
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-inventory-stock-lookup.yml

Tracks clinical study budgets by pulling actuals from SAP, comparing to plan in Snowflake, and notifying finance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Study Budget Tracker
  description: Tracks clinical study budgets by pulling actuals from SAP, comparing to plan in Snowflake, and notifying finance for Johnson & Johnson.
  tags:
  - clinical-trials
  - finance
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical-finance
    port: 8080
    tools:
    - name: track-study-budget
      description: Given a study ID and fiscal period, pull actuals from SAP, compare to budget, and alert on variances.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to analyze.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-report
        with:
          study_id: '{{study_id}}'
          period: '{{fiscal_period}}'
      - name: get-budget
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT budget_amount, study_id FROM clinical_budgets WHERE study_id = '{{study_id}}' AND period = '{{fiscal_period}}'
          warehouse: FINANCE_WH
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.clinical_finance_channel
          text: 'Study Budget Alert: {{study_id}} for {{fiscal_period}}. Actuals: {{get-actuals.total}}. Budget: {{get-budget.data}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-study-budget-tracker.yml

Retrieves the status and details of a Jira issue by key for Johnson & Johnson clinical operations project tracking.

naftiko: '0.5'
info:
  label: Jira Clinical Issue Status Lookup
  description: Retrieves the status and details of a Jira issue by key for Johnson & Johnson clinical operations project tracking.
  tags:
  - clinical-trials
  - jira
  - project-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: clinical-pm
    port: 8080
    tools:
    - name: get-issue-status
      description: Given a Jira issue key, return the issue summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., CLIN-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-clinical-issue-status-lookup.yml

Sources MSL candidates from LinkedIn, creates profiles in Workday recruiting, and notifies the talent acquisition team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline for Medical Science Liaisons
  description: Sources MSL candidates from LinkedIn, creates profiles in Workday recruiting, and notifies the talent acquisition team for Johnson & Johnson.
  tags:
  - hr
  - linkedin
  - workday
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: hr-talent-sourcing
    port: 8080
    tools:
    - name: source-msl-candidates
      description: Given search criteria for MSL roles, source candidates from LinkedIn, create prospects in Workday, and notify TA.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The target therapeutic area.
      - name: location
        in: body
        type: string
        description: The target geographic location.
      - name: experience_years
        in: body
        type: integer
        description: Minimum years of experience.
      steps:
      - name: search-linkedin
        type: call
        call: linkedin.search-candidates
        with:
          keywords: Medical Science Liaison {{therapeutic_area}}
          location: '{{location}}'
      - name: create-prospects
        type: call
        call: workday.create-prospect
        with:
          source: LinkedIn
          requisition_area: '{{therapeutic_area}}'
      - name: notify-ta
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.talent_channel
          text: 'MSL Talent Pipeline: {{search-linkedin.count}} candidates found for {{therapeutic_area}} in {{location}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: people-search
      path: /people?keywords={{keywords}}
      inputParameters:
      - name: keywords
        in: query
      operations:
      - name: search-candidates
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Recruiting/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: prospects
      path: /prospects
      operations:
      - name: create-prospect
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-for-medical-science-liaisons.yml

Processes manufacturing deviations by creating a ServiceNow incident, logging in SAP QM, and notifying quality assurance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Manufacturing Deviation Handler
  description: Processes manufacturing deviations by creating a ServiceNow incident, logging in SAP QM, and notifying quality assurance for Johnson & Johnson.
  tags:
  - manufacturing
  - quality
  - servicenow
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-qa
    port: 8080
    tools:
    - name: handle-deviation
      description: Given deviation details, create a ServiceNow incident, log in SAP quality management, and notify the QA team.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: deviation_type
        in: body
        type: string
        description: Type of deviation (process, equipment, material).
      - name: description
        in: body
        type: string
        description: Detailed description of the deviation.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'MFG Deviation: {{deviation_type}} — Batch {{batch_number}}'
          category: manufacturing_quality
          description: 'Plant: {{plant}} | Batch: {{batch_number}} | Type: {{deviation_type}} | Details: {{description}}'
      - name: log-sap-notification
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          material: '{{batch_number}}'
          plant: '{{plant}}'
          description: '{{deviation_type}}: {{description}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.qa_channel
          text: 'MFG Deviation Alert: {{deviation_type}} at Plant {{plant}}, Batch {{batch_number}}. SNOW: {{create-snow-incident.number}}. SAP QN: {{log-sap-notification.notification_number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.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: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-deviation-handler.yml

Processes goods receipt in SAP, triggers quality inspection, and notifies the warehouse team upon completion for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Goods Receipt and Quality Release
  description: Processes goods receipt in SAP, triggers quality inspection, and notifies the warehouse team upon completion for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - quality
  - warehouse
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: process-goods-receipt
      description: Given a purchase order and delivery details, post goods receipt, trigger quality inspection, and notify warehouse.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: delivery_number
        in: body
        type: string
        description: The inbound delivery number.
      - name: plant
        in: body
        type: string
        description: The receiving plant code.
      steps:
      - name: post-goods-receipt
        type: call
        call: sap.post-goods-receipt
        with:
          po_number: '{{po_number}}'
          delivery: '{{delivery_number}}'
          plant: '{{plant}}'
      - name: trigger-qi
        type: call
        call: sap.create-inspection-lot
        with:
          material_document: '{{post-goods-receipt.material_document}}'
          plant: '{{plant}}'
      - name: notify-warehouse
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.warehouse_channel
          text: 'Goods Receipt for PO {{po_number}}, Delivery {{delivery_number}} at Plant {{plant}}. Material Doc: {{post-goods-receipt.material_document}}. QI Lot: {{trigger-qi.inspection_lot}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-and-quality-release.yml

Retrieves the latest build status from Azure DevOps for a given pipeline in Johnson & Johnson CI/CD operations.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Lookup
  description: Retrieves the latest build status from Azure DevOps for a given pipeline in Johnson & Johnson CI/CD operations.
  tags:
  - devops
  - azure-devops
  - ci-cd
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: get-build-status
      description: Given a pipeline ID, return the latest build result, status, and build number.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      call: azdo.get-latest-build
      with:
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.value[0].buildNumber
      - name: result
        type: string
        mapping: $.value[0].result
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/jnj
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: builds
      path: /_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-lookup.yml

Handles MRP run exceptions from SAP by creating supply chain alerts, logging in ServiceNow, and notifying the planning team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP MRP Run Exception Handler
  description: Handles MRP run exceptions from SAP by creating supply chain alerts, logging in ServiceNow, and notifying the planning team for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - planning
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-planning
    port: 8080
    tools:
    - name: handle-mrp-exception
      description: Given MRP exception details, create a ServiceNow alert and notify the supply planning team.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material with the MRP exception.
      - name: exception_type
        in: body
        type: string
        description: Type of MRP exception (shortage, excess, rescheduling).
      - name: plant
        in: body
        type: string
        description: The plant code.
      - name: quantity
        in: body
        type: string
        description: The exception quantity.
      steps:
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'MRP Exception: {{exception_type}} — Material {{material_number}}'
          category: supply_planning
      - name: notify-planning
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.planning_channel
          text: 'MRP Exception: {{exception_type}} for Material {{material_number}} at Plant {{plant}}. Qty: {{quantity}}. SNOW: {{create-alert.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-mrp-run-exception-handler.yml

Orchestrates RWE data ingestion from external sources into Snowflake, validates data quality, and notifies the HEOR team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Real-World Evidence Data Ingestion Pipeline
  description: Orchestrates RWE data ingestion from external sources into Snowflake, validates data quality, and notifies the HEOR team for Johnson & Johnson.
  tags:
  - r-and-d
  - real-world-evidence
  - snowflake
  - data-engineering
capability:
  exposes:
  - type: mcp
    namespace: rwe-analytics
    port: 8080
    tools:
    - name: ingest-rwe-data
      description: Given a data source and dataset identifier, ingest into Snowflake, run quality checks, and notify HEOR.
      inputParameters:
      - name: data_source
        in: body
        type: string
        description: The RWE data source name (claims, EMR, registry).
      - name: dataset_id
        in: body
        type: string
        description: The dataset identifier.
      - name: study_id
        in: body
        type: string
        description: The associated study ID.
      steps:
      - name: ingest-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL rwe_ingest_pipeline('{{data_source}}', '{{dataset_id}}', '{{study_id}}')
          warehouse: RWE_WH
      - name: validate-quality
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL rwe_data_quality_check('{{dataset_id}}')
          warehouse: RWE_WH
      - name: notify-heor
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.heor_channel
          text: 'RWE Data Ingestion Complete: {{data_source}} ({{dataset_id}}) for Study {{study_id}}. Records: {{ingest-data.row_count}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → real-world-evidence-data-ingestion-pipeline.yml

Pulls open position headcount from Workday and compares against the SAP cost center budget, posting a variance digest to the Finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Workday Position Budget Variance Report
  description: Pulls open position headcount from Workday and compares against the SAP cost center budget, posting a variance digest to the Finance Microsoft Teams channel.
  tags:
  - hr
  - finance
  - workday
  - sap
  - reporting
  - budgeting
capability:
  exposes:
  - type: mcp
    namespace: hr-finance-reporting
    port: 8080
    tools:
    - name: report-position-budget-variance
      description: Pull open position data from Workday and compare against the SAP cost center budget. Post a variance summary to the Finance Teams channel for headcount cost management.
      inputParameters:
      - name: cost_center_id
        in: body
        type: string
        description: The SAP cost center ID to analyze for budget variance.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to compare, e.g., 2026-Q2.
      steps:
      - name: get-positions
        type: call
        call: workday.get-open-positions
        with:
          cost_center_id: '{{cost_center_id}}'
      - name: post-variance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Headcount Budget Report: Cost Center {{cost_center_id}} | Open positions: {{get-positions.open_count}} | Period: {{fiscal_period}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: positions
      path: /positions
      operations:
      - name: get-open-positions
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → workday-position-budget-variance-report.yml

Processes environmental monitoring excursions in manufacturing by logging in SAP QM, creating a ServiceNow incident, and alerting quality for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Environmental Monitoring Alert Handler
  description: Processes environmental monitoring excursions in manufacturing by logging in SAP QM, creating a ServiceNow incident, and alerting quality for Johnson & Johnson.
  tags:
  - manufacturing
  - quality
  - sap
  - environmental-monitoring
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-em
    port: 8080
    tools:
    - name: handle-em-excursion
      description: Given environmental excursion details, log a quality notification in SAP, create a ServiceNow incident, and alert quality.
      inputParameters:
      - name: area_name
        in: body
        type: string
        description: The monitored area name.
      - name: parameter
        in: body
        type: string
        description: The environmental parameter.
      - name: reading
        in: body
        type: string
        description: The actual reading value.
      - name: limit
        in: body
        type: string
        description: The acceptable limit value.
      - name: plant
        in: body
        type: string
        description: The plant code.
      steps:
      - name: log-sap-qn
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          description: 'EM Excursion: {{area_name}} — {{parameter}} reading {{reading}} exceeds limit {{limit}}'
          plant: '{{plant}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'EM Excursion: {{area_name}} — {{parameter}}'
          category: environmental_monitoring
      - name: alert-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.em_quality_channel
          text: 'EM ALERT: {{parameter}} excursion in {{area_name}} at Plant {{plant}}. Reading: {{reading}} (limit: {{limit}}). SAP QN: {{log-sap-qn.notification_number}}. SNOW: {{create-snow-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → environmental-monitoring-alert-handler.yml

Manages contract renewal workflows by checking expiring contracts in SAP Ariba, creating ServiceNow tasks, and notifying procurement for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Renewal Workflow
  description: Manages contract renewal workflows by checking expiring contracts in SAP Ariba, creating ServiceNow tasks, and notifying procurement for Johnson & Johnson.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: procurement-contracts
    port: 8080
    tools:
    - name: process-contract-renewal
      description: Given a contract ID, check renewal terms, create a ServiceNow task, and notify procurement.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The SAP Ariba contract ID.
      - name: contract_owner
        in: body
        type: string
        description: The contract owner name.
      steps:
      - name: get-contract
        type: call
        call: ariba.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Contract Renewal: {{get-contract.title}} — Expires {{get-contract.end_date}}'
          category: procurement
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.procurement_channel
          text: 'Contract Renewal: {{get-contract.title}} ({{contract_id}}) expires {{get-contract.end_date}}. Task: {{create-renewal-task.number}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v2/jnj
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-renewal-workflow.yml

Processes new position requisitions by validating budget in SAP, creating the requisition in Workday, and notifying HR for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Workday Position Requisition Approval Workflow
  description: Processes new position requisitions by validating budget in SAP, creating the requisition in Workday, and notifying HR for Johnson & Johnson.
  tags:
  - hr
  - workday
  - sap
  - hiring
capability:
  exposes:
  - type: mcp
    namespace: hr-talent
    port: 8080
    tools:
    - name: process-position-requisition
      description: Given requisition details, validate budget, create the position in Workday, and notify HR.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department requesting the position.
      - name: job_title
        in: body
        type: string
        description: The job title.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center.
      - name: hiring_manager
        in: body
        type: string
        description: Name of the hiring manager.
      steps:
      - name: validate-budget
        type: call
        call: sap.check-budget
        with:
          cost_center: '{{cost_center}}'
          amount_type: headcount
      - name: create-requisition
        type: call
        call: workday.create-requisition
        with:
          department: '{{department}}'
          job_title: '{{job_title}}'
          hiring_manager: '{{hiring_manager}}'
      - name: notify-hr
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.hr_recruiting_channel
          text: 'New Position Requisition: {{job_title}} in {{department}}. Manager: {{hiring_manager}}. Budget: {{validate-budget.status}}. Workday Req: {{create-requisition.requisition_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BUDGET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Recruiting/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-position-requisition-approval-workflow.yml

Tracks outbound shipments in SAP TM, updates delivery status in Salesforce, and notifies the distribution team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Transport Management Shipment Tracker
  description: Tracks outbound shipments in SAP TM, updates delivery status in Salesforce, and notifies the distribution team for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - salesforce
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: distribution-ops
    port: 8080
    tools:
    - name: track-shipment
      description: Given a shipment ID, retrieve tracking data from SAP TM, update Salesforce, and notify distribution.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The SAP Transportation Management shipment ID.
      - name: salesforce_order_id
        in: body
        type: string
        description: The related Salesforce order ID.
      steps:
      - name: get-tracking
        type: call
        call: sap.get-shipment-status
        with:
          shipment_id: '{{shipment_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-record
        with:
          object_type: Order
          id: '{{salesforce_order_id}}'
          Shipping_Status__c: '{{get-tracking.status}}'
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.distribution_channel
          text: 'Shipment Update: {{shipment_id}} — Status: {{get-tracking.status}}. ETA: {{get-tracking.eta}}. Salesforce updated.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_FREIGHT_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-transport-management-shipment-tracker.yml

Handles Azure Data Factory pipeline failures by creating a ServiceNow incident and notifying the data engineering team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Failure Handler
  description: Handles Azure Data Factory pipeline failures by creating a ServiceNow incident and notifying the data engineering team for Johnson & Johnson.
  tags:
  - data-engineering
  - azure-data-factory
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-engineering
    port: 8080
    tools:
    - name: handle-adf-failure
      description: Given a pipeline run ID and failure details, create a ServiceNow incident and notify the team.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The ADF pipeline name.
      - name: run_id
        in: body
        type: string
        description: The pipeline run ID.
      - name: error_message
        in: body
        type: string
        description: The error message from the failed run.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ADF Pipeline Failure: {{pipeline_name}}'
          description: 'Pipeline: {{pipeline_name}} | Run: {{run_id}} | Error: {{error_message}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.data_eng_channel
          text: 'ADF Pipeline FAILURE: {{pipeline_name}} (Run: {{run_id}}). Error: {{error_message}}. SNOW: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-failure-handler.yml

On a protected-branch pipeline failure in GitHub Actions, creates a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Actions Pipeline Failure Alert
  description: On a protected-branch pipeline failure in GitHub Actions, creates a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github-actions
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event, open a ServiceNow incident and alert the engineering Teams channel with the repository, branch, and workflow context.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository name in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: branch
        in: body
        type: string
        description: The branch on which the pipeline failed.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID for the failed run.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}'
          category: software
          urgency: '2'
      - name: post-alert
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_engineering_channel_id
          text: 'Pipeline Failure: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Run: {{run_id}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-pipeline-failure-alert.yml

Reconciles clinical data between Veeva Vault and Snowflake, logs discrepancies in Jira, and alerts the data management team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Data Reconciliation Checker
  description: Reconciles clinical data between Veeva Vault and Snowflake, logs discrepancies in Jira, and alerts the data management team for Johnson & Johnson.
  tags:
  - clinical-trials
  - data-management
  - veeva-vault
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-quality
    port: 8080
    tools:
    - name: reconcile-clinical-data
      description: Given a study ID, compare record counts between Veeva Vault and Snowflake and report discrepancies.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: data_domain
        in: body
        type: string
        description: Data domain to reconcile (demographics, adverse-events, labs).
      steps:
      - name: query-vault
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT COUNT(*) FROM {{data_domain}}__c WHERE study_id__c = '{{study_id}}'
      - name: query-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as cnt FROM {{data_domain}} WHERE study_id = '{{study_id}}'
          warehouse: CLINICAL_WH
      - name: log-discrepancy
        type: call
        call: jira.create-issue
        with:
          project: CDM
          summary: 'Data Reconciliation: {{study_id}} — {{data_domain}}'
          issuetype: Bug
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cdm_channel
          text: 'Data Reconciliation for Study {{study_id}} ({{data_domain}}): Vault={{query-vault.totalCount}}, Snowflake={{query-snowflake.data}}. Jira: {{log-discrepancy.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-reconciliation-checker.yml

Orchestrates ML model deployment by promoting a model in Databricks, updating the model registry, and notifying the data science team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Databricks ML Model Deployment Pipeline
  description: Orchestrates ML model deployment by promoting a model in Databricks, updating the model registry, and notifying the data science team for Johnson & Johnson.
  tags:
  - r-and-d
  - databricks
  - machine-learning
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: rd-ml-ops
    port: 8080
    tools:
    - name: deploy-ml-model
      description: Given a model name and version, promote in Databricks MLflow, register in the model registry, and notify the team.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The MLflow model name.
      - name: model_version
        in: body
        type: string
        description: The model version to promote.
      - name: target_stage
        in: body
        type: string
        description: Target stage (Staging, Production).
      steps:
      - name: promote-model
        type: call
        call: databricks.transition-model-stage
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
          stage: '{{target_stage}}'
      - name: log-deployment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ML Model Deployment: {{model_name}} v{{model_version}} to {{target_stage}}'
          category: ml_ops
      - name: notify-ds-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.data_science_channel
          text: 'ML Model Deployed: {{model_name}} v{{model_version}} promoted to {{target_stage}}. SNOW: {{log-deployment.number}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://jnj.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-versions
      path: /mlflow/model-versions/transition-stage
      operations:
      - name: transition-model-stage
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-deployment-pipeline.yml

Orchestrates the clinical database lock process by verifying data completeness in Snowflake, updating status in Veeva Vault, and notifying stakeholders for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Data Lock Orchestrator
  description: Orchestrates the clinical database lock process by verifying data completeness in Snowflake, updating status in Veeva Vault, and notifying stakeholders for Johnson & Johnson.
  tags:
  - clinical-trials
  - data-management
  - snowflake
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-mgmt
    port: 8080
    tools:
    - name: execute-data-lock
      description: Given a study ID and database identifier, verify completeness, update lock status, and notify the team.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: database_id
        in: body
        type: string
        description: The clinical database identifier.
      - name: lock_type
        in: body
        type: string
        description: Lock type (soft-lock, hard-lock).
      steps:
      - name: verify-completeness
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as open_queries FROM data_queries WHERE study_id = '{{study_id}}' AND status = 'Open'
          warehouse: CLINICAL_WH
      - name: update-vault-status
        type: call
        call: veeva.update-object-record
        with:
          object_type: study_database__c
          id: '{{database_id}}'
          lock_status__c: '{{lock_type}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cdm_channel
          text: 'Database Lock: Study {{study_id}} — {{lock_type}} initiated. Open queries: {{verify-completeness.data}}. Vault updated.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-lock-orchestrator.yml

Receives an adverse event report, creates a pharmacovigilance case in ServiceNow, and notifies the drug safety team via Teams for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Drug Safety Adverse Event Report Processor
  description: Receives an adverse event report, creates a pharmacovigilance case in ServiceNow, and notifies the drug safety team via Teams for Johnson & Johnson.
  tags:
  - drug-safety
  - pharmacovigilance
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: process-adverse-event
      description: Given adverse event details, create a PV case in ServiceNow and send an urgent notification to the drug safety officer.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: Severity classification (mild, moderate, severe, life-threatening).
      steps:
      - name: create-pv-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AE Report: {{product_name}} — {{severity}}'
          category: pharmacovigilance
          description: 'Patient: {{patient_id}} | Product: {{product_name}} | Event: {{event_description}} | Severity: {{severity}}'
      - name: notify-safety-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.drug_safety_channel
          text: 'URGENT: New {{severity}} AE for {{product_name}}. Case: {{create-pv-case.number}}. Patient: {{patient_id}}. Review required within 24 hours.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-safety-adverse-event-report-processor.yml

Creates breakdown maintenance notifications in SAP when equipment failures are reported and notifies the maintenance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Equipment Breakdown Incident Creator
  description: Creates breakdown maintenance notifications in SAP when equipment failures are reported and notifies the maintenance team for Johnson & Johnson.
  tags:
  - manufacturing
  - sap
  - maintenance
  - incident
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-breakdown
    port: 8080
    tools:
    - name: create-breakdown-incident
      description: Given equipment failure details, create a SAP breakdown notification and a ServiceNow incident.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: failure_description
        in: body
        type: string
        description: Description of the equipment failure.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      - name: priority
        in: body
        type: string
        description: Incident priority (P1-P4).
      steps:
      - name: create-sap-notification
        type: call
        call: sap.create-maintenance-notification
        with:
          equipment: '{{equipment_id}}'
          notification_type: M2
          description: '{{failure_description}}'
          plant: '{{plant}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Equipment Breakdown: {{equipment_id}} at Plant {{plant}}'
          priority: '{{priority}}'
          description: 'Equipment: {{equipment_id}} | Failure: {{failure_description}} | Plant: {{plant}} | SAP: {{create-sap-notification.notification_number}}'
      - name: notify-maintenance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.maintenance_channel
          text: 'EQUIPMENT BREAKDOWN: {{equipment_id}} at Plant {{plant}}. Priority: {{priority}}. SAP: {{create-sap-notification.notification_number}}. SNOW: {{create-snow-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-equipment-breakdown-incident-creator.yml

Reconciles intercompany billing documents in SAP across company codes and creates exception reports for Johnson & Johnson finance operations.

naftiko: '0.5'
info:
  label: SAP Intercompany Billing Reconciliation
  description: Reconciles intercompany billing documents in SAP across company codes and creates exception reports for Johnson & Johnson finance operations.
  tags:
  - finance
  - sap
  - billing
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: finance-intercompany
    port: 8080
    tools:
    - name: reconcile-intercompany-billing
      description: Given company codes and a billing period, reconcile intercompany transactions and report exceptions.
      inputParameters:
      - name: sender_company
        in: body
        type: string
        description: The sending company code.
      - name: receiver_company
        in: body
        type: string
        description: The receiving company code.
      - name: billing_period
        in: body
        type: string
        description: The billing period to reconcile.
      steps:
      - name: get-sender-docs
        type: call
        call: sap.get-billing-documents
        with:
          company_code: '{{sender_company}}'
          period: '{{billing_period}}'
      - name: get-receiver-docs
        type: call
        call: sap.get-billing-documents
        with:
          company_code: '{{receiver_company}}'
          period: '{{billing_period}}'
      - name: create-exception-report
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IC Billing Reconciliation: {{sender_company}} to {{receiver_company}} — {{billing_period}}'
          category: finance_reconciliation
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_ic_channel
          text: 'IC Billing Reconciliation: {{sender_company}} to {{receiver_company}} for {{billing_period}}. Sender docs: {{get-sender-docs.count}}. Receiver docs: {{get-receiver-docs.count}}. SNOW: {{create-exception-report.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-billing-reconciliation.yml

When a candidate applies via LinkedIn Recruiter, creates a candidate record in Workday Recruiting, assigns the requisition, and notifies the hiring manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Recruiting Pipeline Sync
  description: When a candidate applies via LinkedIn Recruiter, creates a candidate record in Workday Recruiting, assigns the requisition, and notifies the hiring manager via Microsoft Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-linkedin-candidate
      description: Given a LinkedIn Recruiter candidate ID and a Workday job requisition ID, create the candidate record in Workday and notify the hiring manager via Microsoft Teams.
      inputParameters:
      - name: linkedin_candidate_id
        in: body
        type: string
        description: The LinkedIn Recruiter candidate profile ID.
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID the candidate is applying to.
      steps:
      - name: get-candidate
        type: call
        call: linkedin.get-candidate-profile
        with:
          candidate_id: '{{linkedin_candidate_id}}'
      - name: create-candidate
        type: call
        call: workday.create-candidate
        with:
          first_name: '{{get-candidate.first_name}}'
          last_name: '{{get-candidate.last_name}}'
          email: '{{get-candidate.email}}'
          requisition_id: '{{requisition_id}}'
      - name: notify-hiring-manager
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_talent_channel_id
          text: 'New candidate synced: {{get-candidate.first_name}} {{get-candidate.last_name}} for requisition {{requisition_id}} | Workday candidate ID: {{create-candidate.candidate_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: candidate-profiles
      path: /recruiterProfiles/{{candidate_id}}
      inputParameters:
      - name: candidate_id
        in: path
      operations:
      - name: get-candidate-profile
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /candidates
      operations:
      - name: create-candidate
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-recruiting-pipeline-sync.yml

Searches Johnson & Johnson Confluence knowledge base for regulatory guidance documents by keyword.

naftiko: '0.5'
info:
  label: Confluence Regulatory Knowledge Search
  description: Searches Johnson & Johnson Confluence knowledge base for regulatory guidance documents by keyword.
  tags:
  - regulatory
  - confluence
  - knowledge-management
  - search
capability:
  exposes:
  - type: mcp
    namespace: regulatory-kb
    port: 8080
    tools:
    - name: search-regulatory-docs
      description: Given a search query, return matching Confluence pages with titles, space keys, and URLs.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search query for regulatory guidance documents.
      call: confluence.search-content
      with:
        search_query: '{{search_query}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_size
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://jnj.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /content/search?cql=text~'{{search_query}}'
      inputParameters:
      - name: search_query
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-regulatory-knowledge-search.yml

Handles cold chain temperature excursions by logging in SAP, creating a quality incident, and alerting logistics and quality teams for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Excursion Handler
  description: Handles cold chain temperature excursions by logging in SAP, creating a quality incident, and alerting logistics and quality teams for Johnson & Johnson.
  tags:
  - supply-chain
  - cold-chain
  - quality
  - sap
capability:
  exposes:
  - type: mcp
    namespace: cold-chain-ops
    port: 8080
    tools:
    - name: handle-temp-excursion
      description: Given temperature excursion details, log in SAP, create a ServiceNow quality incident, and alert teams.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The shipment identifier.
      - name: product_name
        in: body
        type: string
        description: The product being shipped.
      - name: temperature_reading
        in: body
        type: string
        description: The temperature reading.
      - name: acceptable_range
        in: body
        type: string
        description: The acceptable temperature range.
      - name: duration_minutes
        in: body
        type: integer
        description: Duration of excursion in minutes.
      steps:
      - name: log-sap-excursion
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          description: 'Cold Chain Excursion: Shipment {{shipment_id}}, Product {{product_name}}, Temp {{temperature_reading}}'
      - name: create-quality-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold Chain Excursion: {{product_name}} — Shipment {{shipment_id}}'
          priority: '2'
      - name: alert-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cold_chain_channel
          text: 'COLD CHAIN ALERT: Temp excursion for {{product_name}} (Shipment {{shipment_id}}). Reading: {{temperature_reading}} (range: {{acceptable_range}}). SAP: {{log-sap-excursion.notification_number}}. SNOW: {{create-quality-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-excursion-handler.yml

Tracks laboratory instrument calibration schedules by querying SAP PM, creating ServiceNow work orders, and notifying lab managers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Laboratory Instrument Calibration Tracker
  description: Tracks laboratory instrument calibration schedules by querying SAP PM, creating ServiceNow work orders, and notifying lab managers for Johnson & Johnson.
  tags:
  - r-and-d
  - quality
  - sap
  - laboratory
capability:
  exposes:
  - type: mcp
    namespace: lab-ops
    port: 8080
    tools:
    - name: track-calibration
      description: Given a lab identifier, find instruments due for calibration, create work orders, and notify lab management.
      inputParameters:
      - name: lab_id
        in: body
        type: string
        description: The laboratory identifier.
      - name: days_ahead
        in: body
        type: integer
        description: Days ahead to check for calibration due dates.
      steps:
      - name: query-instruments
        type: call
        call: sap.get-equipment-list
        with:
          lab_id: '{{lab_id}}'
          next_calibration_within: '{{days_ahead}}'
      - name: create-work-orders
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Lab Calibration Due: {{query-instruments.count}} instruments in Lab {{lab_id}}'
          category: lab_operations
      - name: notify-lab-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.lab_ops_channel
          text: 'Calibration Alert: {{query-instruments.count}} instruments in Lab {{lab_id}} due within {{days_ahead}} days. SNOW: {{create-work-orders.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → laboratory-instrument-calibration-tracker.yml

Assembles and validates a regulatory submission document package from Veeva Vault for an FDA or EMA submission, cross-checks against the SAP submission tracking record, and notifies the regulatory affairs team.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Package
  description: Assembles and validates a regulatory submission document package from Veeva Vault for an FDA or EMA submission, cross-checks against the SAP submission tracking record, and notifies the regulatory affairs team.
  tags:
  - regulatory
  - veeva
  - sap
  - microsoft-teams
  - pharma
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: prepare-submission-package
      description: Given a regulatory submission ID, retrieve all required documents from Veeva Vault, validate completeness against the SAP submission checklist, and notify the regulatory affairs team in Teams.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The regulatory submission ID (e.g., NDA-2026-001).
      - name: submission_type
        in: body
        type: string
        description: 'The submission type: NDA, BLA, 510k, CE-mark, or PMA.'
      steps:
      - name: get-documents
        type: call
        call: veeva.list-submission-documents
        with:
          submission_id: '{{submission_id}}'
      - name: notify-reg-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_regulatory_channel_id
          text: 'Submission package assembled: {{submission_id}} ({{submission_type}}) | Documents retrieved: {{get-documents.document_count}} | Ready for final review.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: submission-documents
      path: /objects/documents
      operations:
      - name: list-submission-documents
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-document-package.yml

Queries Snowflake for the latest real-world evidence cohort data for a specified therapeutic area, returns cohort size and key demographic breakdowns for medical affairs reporting.

naftiko: '0.5'
info:
  label: Snowflake Real-World Evidence Data Snapshot
  description: Queries Snowflake for the latest real-world evidence cohort data for a specified therapeutic area, returns cohort size and key demographic breakdowns for medical affairs reporting.
  tags:
  - data
  - analytics
  - snowflake
  - reporting
  - pharma
  - real-world-evidence
capability:
  exposes:
  - type: mcp
    namespace: rwe-analytics
    port: 8080
    tools:
    - name: get-rwe-cohort-snapshot
      description: Given a therapeutic area code and data cutoff date, query Snowflake for the RWE patient cohort size, age distribution, and key comorbidities for medical affairs reporting.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area code (e.g., ONCOLOGY, IMMUNOLOGY, NEUROSCIENCE).
      - name: data_cutoff_date
        in: body
        type: string
        description: The data cutoff date in YYYY-MM-DD format.
      call: snowflake.execute-statement
      with:
        statement: SELECT therapeutic_area, COUNT(*) as cohort_size, AVG(age) as mean_age FROM PROD_RWE.PATIENTS WHERE therapeutic_area = '{{therapeutic_area}}' AND data_date <= '{{data_cutoff_date}}' GROUP BY 1
      outputParameters:
      - name: cohort_size
        type: number
        mapping: $.data[0].COHORT_SIZE
      - name: mean_age
        type: number
        mapping: $.data[0].MEAN_AGE
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-real-world-evidence-data-snapshot.yml

Manages GxP-validated system change requests by creating a ServiceNow change, logging in Veeva Vault audit trail, and notifying approvers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: GxP System Change Approval Workflow
  description: Manages GxP-validated system change requests by creating a ServiceNow change, logging in Veeva Vault audit trail, and notifying approvers for Johnson & Johnson.
  tags:
  - compliance
  - gxp
  - servicenow
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: gxp-compliance
    port: 8080
    tools:
    - name: initiate-gxp-change
      description: Given change request details, create a ServiceNow change request, log in Veeva Vault, and notify the CAB.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: Name of the GxP-validated system.
      - name: change_description
        in: body
        type: string
        description: Description of the proposed change.
      - name: risk_level
        in: body
        type: string
        description: Risk classification (low, medium, high, critical).
      steps:
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'GxP Change: {{system_name}} — {{risk_level}} risk'
          category: gxp_change_control
          description: 'System: {{system_name}} | Change: {{change_description}} | Risk: {{risk_level}}'
      - name: log-vault-audit
        type: call
        call: veeva.create-object-record
        with:
          object_type: change_control__c
          system_name__c: '{{system_name}}'
          description__c: '{{change_description}}'
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cab_channel
          text: 'GxP Change Request: {{system_name}} ({{risk_level}} risk). SNOW: {{create-change-request.number}}. Vault: {{log-vault-audit.id}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.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: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gxp-system-change-approval-workflow.yml

Validates training records in SharePoint against Workday assignments and creates compliance tickets for gaps for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SharePoint Training Record Validator
  description: Validates training records in SharePoint against Workday assignments and creates compliance tickets for gaps for Johnson & Johnson.
  tags:
  - quality
  - sharepoint
  - workday
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: quality-training
    port: 8080
    tools:
    - name: validate-training-records
      description: Given a department and training program, cross-reference SharePoint records with Workday and report gaps.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to validate.
      - name: training_program
        in: body
        type: string
        description: The training program name.
      steps:
      - name: get-sharepoint-records
        type: call
        call: sharepoint.get-training-records
        with:
          department: '{{department}}'
          program: '{{training_program}}'
      - name: get-workday-assignments
        type: call
        call: workday.get-training-assignments
        with:
          department: '{{department}}'
          program: '{{training_program}}'
      - name: create-gap-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Training Compliance Gap: {{department}} — {{training_program}}'
          category: quality_compliance
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.quality_training_channel
          text: 'Training Gap Alert: {{department}} for {{training_program}}. SharePoint: {{get-sharepoint-records.count}}. Workday: {{get-workday-assignments.count}}. SNOW: {{create-gap-ticket.number}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: lists
      path: /lists
      operations:
      - name: get-training-records
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments
      operations:
      - name: get-training-assignments
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sharepoint-training-record-validator.yml

Generates FDA inspection readiness checklists by pulling SOPs from SharePoint, checking training compliance in Workday, and creating Jira tracking for Johnson & Johnson.

naftiko: '0.5'
info:
  label: FDA Inspection Readiness Checklist Generator
  description: Generates FDA inspection readiness checklists by pulling SOPs from SharePoint, checking training compliance in Workday, and creating Jira tracking for Johnson & Johnson.
  tags:
  - regulatory
  - compliance
  - sharepoint
  - workday
capability:
  exposes:
  - type: mcp
    namespace: regulatory-compliance
    port: 8080
    tools:
    - name: generate-inspection-checklist
      description: Given a facility and inspection type, compile SOP readiness, training status, and create tracking tasks.
      inputParameters:
      - name: facility_name
        in: body
        type: string
        description: The facility being inspected.
      - name: inspection_type
        in: body
        type: string
        description: Type of FDA inspection (pre-approval, routine, for-cause).
      steps:
      - name: check-sops
        type: call
        call: sharepoint.get-document-list
        with:
          library: SOPs
          filter: facility eq '{{facility_name}}'
      - name: check-training
        type: call
        call: workday.get-training-compliance
        with:
          facility: '{{facility_name}}'
          program: GMP_Training
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'FDA Inspection Readiness: {{facility_name}} — {{inspection_type}}'
          issuetype: Epic
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.quality_compliance_channel
          text: 'FDA Inspection Readiness for {{facility_name}} ({{inspection_type}}): {{check-sops.count}} SOPs, {{check-training.compliance_rate}}% training compliant. Jira: {{create-epic.key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: lists
      path: /lists
      operations:
      - name: get-document-list
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments
      operations:
      - name: get-training-compliance
        method: GET
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fda-inspection-readiness-checklist-generator.yml

Processes clinical protocol amendments by updating Veeva Vault, creating Jira tracking tasks, and notifying the clinical team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Protocol Amendment Processor
  description: Processes clinical protocol amendments by updating Veeva Vault, creating Jira tracking tasks, and notifying the clinical team for Johnson & Johnson.
  tags:
  - clinical-trials
  - veeva-vault
  - jira
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-regulatory
    port: 8080
    tools:
    - name: process-protocol-amendment
      description: Given protocol amendment details, update the document in Veeva Vault, create a Jira task, and notify affected teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: amendment_number
        in: body
        type: string
        description: The amendment version number.
      - name: amendment_summary
        in: body
        type: string
        description: Summary of protocol changes.
      - name: impacted_sites
        in: body
        type: string
        description: Comma-separated list of impacted site IDs.
      steps:
      - name: update-vault
        type: call
        call: veeva.create-object-record
        with:
          object_type: protocol_amendment__c
          study_id__c: '{{study_id}}'
          amendment_number__c: '{{amendment_number}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: CLIN
          summary: Protocol Amendment {{amendment_number}} for Study {{study_id}}
          issuetype: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.clinical_ops_channel
          text: 'Protocol Amendment {{amendment_number}} for Study {{study_id}} processed. Impacted sites: {{impacted_sites}}. Jira: {{create-jira-task.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-protocol-amendment-processor.yml

Queries Veeva Vault for upcoming regulatory submission deadlines, creates Jira tracking tickets, and alerts the regulatory affairs team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Regulatory Submission Deadline Tracker
  description: Queries Veeva Vault for upcoming regulatory submission deadlines, creates Jira tracking tickets, and alerts the regulatory affairs team for Johnson & Johnson.
  tags:
  - regulatory
  - veeva-vault
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-submission-deadlines
      description: Given a time horizon in days, find upcoming submission deadlines, create Jira tickets, and post a summary.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to check for deadlines.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel for regulatory affairs notifications.
      steps:
      - name: query-deadlines
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT id, name__v, submission_date__c FROM submission__c WHERE submission_date__c <= DATEADD(day,{{days_ahead}},GETDATE())
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'Upcoming Submissions: {{query-deadlines.totalCount}} items within {{days_ahead}} days'
          issuetype: Task
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Regulatory Alert: {{query-deadlines.totalCount}} submissions due within {{days_ahead}} days. Jira: {{create-tracker.key}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-deadline-tracker.yml

Retrieves compensation plan details for an employee from Workday for Johnson & Johnson HR total rewards operations.

naftiko: '0.5'
info:
  label: Workday Compensation Lookup
  description: Retrieves compensation plan details for an employee from Workday for Johnson & Johnson HR total rewards operations.
  tags:
  - hr
  - workday
  - compensation
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-rewards
    port: 8080
    tools:
    - name: get-compensation
      description: Given an employee ID, return the base pay, bonus target percentage, and compensation grade.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-compensation
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: base_pay
        type: string
        mapping: $.Compensation.Base_Pay
      - name: bonus_target
        type: string
        mapping: $.Compensation.Bonus_Target_Percent
      - name: grade
        type: string
        mapping: $.Compensation.Compensation_Grade
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Compensation/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{employee_id}}/compensationPlans
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-lookup.yml

Accepts a Veeva Vault regulatory document ID, retrieves the document text, sends it to Anthropic Claude for summarization, and posts the AI-generated summary to the regulatory affairs Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Anthropic-Powered Regulatory Document Summarizer
  description: Accepts a Veeva Vault regulatory document ID, retrieves the document text, sends it to Anthropic Claude for summarization, and posts the AI-generated summary to the regulatory affairs Microsoft Teams channel.
  tags:
  - ai
  - regulatory
  - veeva
  - anthropic
  - microsoft-teams
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: ai-regulatory
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a Veeva Vault document ID, retrieve the document content and generate an executive summary using Anthropic Claude. Post the summary to the regulatory affairs Teams channel.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID to summarize.
      - name: document_type
        in: body
        type: string
        description: The document type context (e.g., IND, NDA, Clinical Study Report) to guide the summary.
      steps:
      - name: get-document
        type: call
        call: veeva.get-document-content
        with:
          document_id: '{{document_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a regulatory affairs expert at a pharmaceutical company. Summarize this {{document_type}} document in 3-5 bullet points highlighting key findings, safety signals, and regulatory actions required: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_regulatory_channel_id
          text: 'AI Summary of {{document_type}} (Vault ID: {{document_id}}): {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: document-content
      path: /objects/documents/{{document_id}}/file
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → anthropic-powered-regulatory-document-summarizer.yml

Triggers GxP validation pipelines in GitHub Actions, logs validation events in ServiceNow, and notifies the QA team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: GitHub Actions GxP Validation Pipeline Trigger
  description: Triggers GxP validation pipelines in GitHub Actions, logs validation events in ServiceNow, and notifies the QA team for Johnson & Johnson.
  tags:
  - devops
  - github-actions
  - gxp
  - validation
capability:
  exposes:
  - type: mcp
    namespace: gxp-devops
    port: 8080
    tools:
    - name: trigger-gxp-validation
      description: Given a system name and validation type, trigger the pipeline, log in ServiceNow, and notify QA.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: validation_type
        in: body
        type: string
        description: Type of validation (IQ, OQ, PQ).
      - name: system_name
        in: body
        type: string
        description: The GxP system being validated.
      steps:
      - name: trigger-pipeline
        type: call
        call: github.trigger-workflow
        with:
          repo: '{{repo_name}}'
          workflow: gxp-validation.yml
      - name: log-validation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GxP Validation: {{validation_type}} — {{system_name}}'
          category: gxp_validation
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.gxp_qa_channel
          text: 'GxP Validation triggered: {{validation_type}} for {{system_name}}. Repo: {{repo_name}}. SNOW: {{log-validation.number}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-gxp-validation-pipeline-trigger.yml

Processes medical information requests by logging in Salesforce, searching the knowledge base, and notifying the medical affairs team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Medical Information Request Handler
  description: Processes medical information requests by logging in Salesforce, searching the knowledge base, and notifying the medical affairs team for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - knowledge-management
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs
    port: 8080
    tools:
    - name: handle-med-info-request
      description: Given a medical information request, log in Salesforce, search the knowledge base, and notify medical affairs.
      inputParameters:
      - name: requestor_name
        in: body
        type: string
        description: Name of the healthcare professional.
      - name: product_name
        in: body
        type: string
        description: The product being inquired about.
      - name: question
        in: body
        type: string
        description: The medical information question.
      - name: channel
        in: body
        type: string
        description: Request channel (phone, email, web).
      steps:
      - name: log-in-salesforce
        type: call
        call: salesforce.create-case
        with:
          subject: 'MedInfo Request: {{product_name}}'
          description: 'Requestor: {{requestor_name}} | Product: {{product_name}} | Question: {{question}}'
          type: Medical_Information
      - name: search-knowledge
        type: call
        call: confluence.search-content
        with:
          search_query: '{{product_name}} {{question}}'
      - name: notify-med-affairs
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_channel
          text: 'New MedInfo Request from {{requestor_name}} about {{product_name}}. Case: {{log-in-salesforce.id}}. KB matches: {{search-knowledge.totalSize}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://jnj.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-information-request-handler.yml

Retrieves standard operating procedure document metadata from SharePoint by document name for Johnson & Johnson quality operations.

naftiko: '0.5'
info:
  label: SharePoint SOP Document Retrieval
  description: Retrieves standard operating procedure document metadata from SharePoint by document name for Johnson & Johnson quality operations.
  tags:
  - quality
  - sharepoint
  - document-management
  - sop
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: get-sop-document
      description: Given an SOP document name or ID, return the document title, version, approval status, and URL.
      inputParameters:
      - name: document_name
        in: body
        type: string
        description: The SOP document name or ID.
      call: sharepoint.get-document
      with:
        document_name: '{{document_name}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.d.Title
      - name: version
        type: string
        mapping: $.d.UIVersionLabel
      - name: modified
        type: string
        mapping: $.d.Modified
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /GetFileByServerRelativeUrl('/sites/SOPs/{{document_name}}')
      inputParameters:
      - name: document_name
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-sop-document-retrieval.yml

When a new clinical trial site is approved in the study management system, creates the site record in Veeva Vault, assigns the study team, and sends an activation notification via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Site Activation in Veeva Vault
  description: When a new clinical trial site is approved in the study management system, creates the site record in Veeva Vault, assigns the study team, and sends an activation notification via Microsoft Teams.
  tags:
  - clinical-operations
  - veeva
  - microsoft-teams
  - pharma
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: activate-clinical-site
      description: Given a clinical trial study ID and site details, create the site activation record in Veeva Vault and notify the clinical operations team in Microsoft Teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier (e.g., CR-2026-001).
      - name: site_id
        in: body
        type: string
        description: The investigator site identifier.
      - name: site_name
        in: body
        type: string
        description: The name of the clinical investigation site.
      - name: principal_investigator
        in: body
        type: string
        description: Name of the principal investigator at the site.
      steps:
      - name: create-site-record
        type: call
        call: veeva.create-site-document
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
          site_name: '{{site_name}}'
          pi_name: '{{principal_investigator}}'
      - name: notify-clinical-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_clinical_ops_channel_id
          text: 'Site activated: {{site_name}} ({{site_id}}) for study {{study_id}} | PI: {{principal_investigator}} | Vault doc: {{create-site-record.document_id}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-site-document
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-activation-in-veeva-vault.yml

When a MedTech sales opportunity in Salesforce reaches a Verbal Commit stage, creates a corresponding SAP sales order and notifies the regional sales manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Medical Device Sales Opportunity Sync
  description: When a MedTech sales opportunity in Salesforce reaches a Verbal Commit stage, creates a corresponding SAP sales order and notifies the regional sales manager via Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - medtech
  - erp
capability:
  exposes:
  - type: mcp
    namespace: medtech-sales
    port: 8080
    tools:
    - name: sync-opportunity-to-sap
      description: Given a Salesforce opportunity ID at Verbal Commit stage, create a SAP sales order and write the SAP document number back to Salesforce. Use when a medtech deal is confirmed.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID to sync into SAP.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-read.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-order
        type: call
        call: sap-sd.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_external_id}}'
          amount: '{{get-opportunity.amount}}'
          currency: '{{get-opportunity.currency_code}}'
      - name: update-opportunity
        type: call
        call: salesforce-write.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          sap_order_number: '{{create-sap-order.document_number}}'
  consumes:
  - type: http
    namespace: salesforce-read
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap-sd
    baseUri: https://jnj-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
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: salesforce-write
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-medical-device-sales-opportunity-sync.yml

Executes a predefined SQL query against the Johnson & Johnson clinical data warehouse in Snowflake and returns summary results.

naftiko: '0.5'
info:
  label: Snowflake Clinical Query Runner
  description: Executes a predefined SQL query against the Johnson & Johnson clinical data warehouse in Snowflake and returns summary results.
  tags:
  - clinical-trials
  - snowflake
  - data-warehouse
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: run-clinical-query
      description: Given a query identifier and optional study ID filter, execute the corresponding Snowflake query and return results.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: Predefined query identifier (e.g., enrollment-summary, ae-counts).
      - name: study_id
        in: body
        type: string
        description: Optional clinical study ID filter.
      call: snowflake.execute-query
      with:
        query_id: '{{query_id}}'
        study_id: '{{study_id}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.resultSetMetaData.numRows
      - name: data
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-query-runner.yml

When AWS or Azure spend exceeds a budget threshold, creates a ServiceNow FinOps task and notifies the cloud infrastructure team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Responder
  description: When AWS or Azure spend exceeds a budget threshold, creates a ServiceNow FinOps task and notifies the cloud infrastructure team via Microsoft Teams.
  tags:
  - cloud
  - finops
  - aws
  - azure
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: respond-to-cost-anomaly
      description: Given a cloud cost anomaly event (provider, account, service, overage amount), create a ServiceNow FinOps task and alert the cloud team channel in Teams.
      inputParameters:
      - name: cloud_provider
        in: body
        type: string
        description: 'Cloud provider identifier: aws or azure.'
      - name: account_id
        in: body
        type: string
        description: The cloud account or subscription ID with the anomaly.
      - name: anomaly_amount
        in: body
        type: number
        description: The overage amount in USD triggering the alert.
      - name: service_name
        in: body
        type: string
        description: The cloud service name responsible for the anomaly.
      steps:
      - name: create-finops-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Cloud cost anomaly: {{cloud_provider}} {{service_name}} — ${{anomaly_amount}} overage'
          category: finops
          assigned_group: Cloud_FinOps
      - name: notify-cloud-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_cloud_channel_id
          text: 'Cost Anomaly: {{cloud_provider}} account {{account_id}} | Service: {{service_name}} | Overage: ${{anomaly_amount}} | Task: {{create-finops-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-responder.yml

When a P1 incident is opened in ServiceNow, pages the on-call engineer via Microsoft Teams and posts a war-room bridge link to the IT operations channel.

naftiko: '0.5'
info:
  label: ServiceNow ITSM Incident P1 Escalation
  description: When a P1 incident is opened in ServiceNow, pages the on-call engineer via Microsoft Teams and posts a war-room bridge link to the IT operations channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow P1 incident number, retrieve the incident details and page the on-call engineer and IT leadership via Microsoft Teams with a war-room bridge link.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: bridge_url
        in: body
        type: string
        description: The Teams meeting or bridge URL for the incident war room.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: page-oncall
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_oncall_channel_id
          text: 'P1 INCIDENT: {{incident_number}} | {{get-incident.short_description}} | Affected: {{get-incident.cmdb_ci}} | Bridge: {{bridge_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-itsm-incident-p1-escalation.yml

Coordinates product recall activities by creating cases in Salesforce, notifying logistics via SAP, and alerting leadership for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Product Recall Coordination Workflow
  description: Coordinates product recall activities by creating cases in Salesforce, notifying logistics via SAP, and alerting leadership for Johnson & Johnson.
  tags:
  - quality
  - product-recall
  - salesforce
  - sap
capability:
  exposes:
  - type: mcp
    namespace: quality-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Given product recall details, create a Salesforce case, update SAP batch status, and send urgent notifications.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name being recalled.
      - name: batch_numbers
        in: body
        type: string
        description: Comma-separated affected batch numbers.
      - name: recall_reason
        in: body
        type: string
        description: Reason for the recall.
      - name: recall_class
        in: body
        type: string
        description: Recall classification (Class I, II, III).
      steps:
      - name: create-recall-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Product Recall: {{product_name}} — {{recall_class}}'
          type: Product_Recall
      - name: update-batch-status
        type: call
        call: sap.update-batch-status
        with:
          batch_numbers: '{{batch_numbers}}'
          status: blocked
      - name: alert-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.executive_channel
          text: 'URGENT — Product Recall: {{product_name}} ({{recall_class}}). Batches: {{batch_numbers}}. Case: {{create-recall-case.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-recall-coordination-workflow.yml

At month-end close, queries SAP for all open AP invoices past their due date in a given cost center, creates a ServiceNow finance task, and posts the reconciliation list to the Finance Teams channel.

naftiko: '0.5'
info:
  label: SAP Invoice Period Close Reconciliation
  description: At month-end close, queries SAP for all open AP invoices past their due date in a given cost center, creates a ServiceNow finance task, and posts the reconciliation list to the Finance Teams channel.
  tags:
  - finance
  - erp
  - sap
  - servicenow
  - microsoft-teams
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-ap-period-close
      description: Given a SAP company code and fiscal period, retrieve all open and overdue AP invoices, open a ServiceNow finance reconciliation task, and post the summary to the Finance Teams channel.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the legal entity being closed.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to close in YYYYMM format.
      steps:
      - name: get-open-invoices
        type: call
        call: sap.list-open-invoices
        with:
          company_code: '{{company_code}}'
          fiscal_period: '{{fiscal_period}}'
      - name: create-close-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'AP period close reconciliation: {{company_code}} period {{fiscal_period}}'
          category: finance
          assigned_group: Finance_AP
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'AP Close: {{company_code}} / {{fiscal_period}} | Open invoices: {{get-open-invoices.invoice_count}} | Task: {{create-close-task.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: supplier-invoices
      path: /A_SupplierInvoice
      operations:
      - name: list-open-invoices
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-period-close-reconciliation.yml

Retrieves production order status and details from SAP for Johnson & Johnson manufacturing operations.

naftiko: '0.5'
info:
  label: SAP Production Order Status Lookup
  description: Retrieves production order status and details from SAP for Johnson & Johnson manufacturing operations.
  tags:
  - manufacturing
  - sap
  - production
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-mgmt
    port: 8080
    tools:
    - name: get-production-order
      description: Given a SAP production order number, return the order type, status, planned quantity, and material.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-prod-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: order_type
        type: string
        mapping: $.d.ManufacturingOrderType
      - name: status
        type: string
        mapping: $.d.MfgOrderPlannedTotalQty
      - name: material
        type: string
        mapping: $.d.Material
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder_2('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-prod-order
        method: GET
Open in Framework → View in Fleet → sap-production-order-status-lookup.yml

Orchestrates commercial territory realignment by updating Salesforce territories, adjusting Workday reporting, and notifying the commercial team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Salesforce Commercial Territory Realignment Orchestrator
  description: Orchestrates commercial territory realignment by updating Salesforce territories, adjusting Workday reporting, and notifying the commercial team for Johnson & Johnson.
  tags:
  - commercial
  - salesforce
  - workday
  - territory-management
capability:
  exposes:
  - type: mcp
    namespace: commercial-ops-mgmt
    port: 8080
    tools:
    - name: realign-territories
      description: Given territory changes, update Salesforce assignments, adjust Workday structures, and notify the team.
      inputParameters:
      - name: territory_id
        in: body
        type: string
        description: The territory identifier.
      - name: new_rep_id
        in: body
        type: string
        description: The new sales representative employee ID.
      - name: effective_date
        in: body
        type: string
        description: Effective date of the realignment.
      steps:
      - name: update-salesforce
        type: call
        call: salesforce.update-record
        with:
          object_type: Territory2
          id: '{{territory_id}}'
          Assigned_Rep__c: '{{new_rep_id}}'
      - name: update-workday
        type: call
        call: workday.update-assignment
        with:
          employee_id: '{{new_rep_id}}'
          territory: '{{territory_id}}'
      - name: notify-commercial
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.commercial_ops_channel
          text: 'Territory Realignment: Territory {{territory_id}} assigned to Rep {{new_rep_id}} effective {{effective_date}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: territories
      path: /sobjects/Territory2/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Staffing/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: assignments
      path: /workers/{{employee_id}}/assignments
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: update-assignment
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-commercial-territory-realignment-orchestrator.yml

Retrieves the current lifecycle status of a document in Veeva Vault by document ID for Johnson & Johnson regulatory operations.

naftiko: '0.5'
info:
  label: Veeva Vault Document Status Lookup
  description: Retrieves the current lifecycle status of a document in Veeva Vault by document ID for Johnson & Johnson regulatory operations.
  tags:
  - regulatory
  - veeva-vault
  - document-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: get-document-status
      description: Given a Veeva Vault document ID, return the lifecycle state, owner, and last modified date.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID.
      call: veeva.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: lifecycle_state
        type: string
        mapping: $.responseDetails.lifecycle__v
      - name: owner
        type: string
        mapping: $.responseDetails.owner__v
      - name: last_modified
        type: string
        mapping: $.responseDetails.last_modified_date__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-status-lookup.yml

Queries Snowflake for current enrollment figures by study, generates a summary, and posts to the clinical operations Teams channel for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Trial Enrollment Status Reporter
  description: Queries Snowflake for current enrollment figures by study, generates a summary, and posts to the clinical operations Teams channel for Johnson & Johnson.
  tags:
  - clinical-trials
  - snowflake
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: report-enrollment-status
      description: Given a study ID, query enrollment data, format a summary, and post to the designated Teams channel.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for clinical operations.
      steps:
      - name: query-enrollment
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT site_id, enrolled_count, target FROM enrollment_tracker WHERE study_id = '{{study_id}}'
          warehouse: CLINICAL_WH
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Enrollment Status for Study {{study_id}}: {{query-enrollment.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-enrollment-status-reporter.yml

When a medical device complaint is logged in Salesforce Service Cloud, enriches it with product master data from SAP, creates a quality event in Veeva Vault, and routes to the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Medical Device Complaint Case Triage
  description: When a medical device complaint is logged in Salesforce Service Cloud, enriches it with product master data from SAP, creates a quality event in Veeva Vault, and routes to the quality team via Microsoft Teams.
  tags:
  - customer-support
  - quality
  - salesforce
  - sap
  - veeva
  - microsoft-teams
  - medtech
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: triage-device-complaint
      description: Given a Salesforce case ID for a medical device complaint, retrieve SAP product details, create a Veeva quality event, and notify the quality team in Microsoft Teams.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID for the device complaint.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_number: '{{get-case.product_code}}'
      - name: create-quality-event
        type: call
        call: veeva.create-quality-event
        with:
          case_id: '{{case_id}}'
          product_name: '{{get-product.material_description}}'
          complaint_summary: '{{get-case.description}}'
      - name: notify-quality-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_quality_channel_id
          text: 'Device complaint triaged: Case {{case_id}} | Product: {{get-product.material_description}} | Veeva event: {{create-quality-event.event_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: sap
    baseUri: https://jnj-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: quality-events
      path: /objects/quality_events__v
      operations:
      - name: create-quality-event
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → medical-device-complaint-case-triage.yml

Tracks KOL engagement activities by pulling data from Salesforce, summarizing in Snowflake, and reporting to medical affairs for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Salesforce Key Opinion Leader Engagement Tracker
  description: Tracks KOL engagement activities by pulling data from Salesforce, summarizing in Snowflake, and reporting to medical affairs for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs-analytics
    port: 8080
    tools:
    - name: track-kol-engagement
      description: Given a therapeutic area, pull KOL engagement data, aggregate in Snowflake, and post a summary.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area (e.g., oncology, immunology).
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., Q1-2026).
      steps:
      - name: pull-kol-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Name, Total_Engagements__c FROM Contact WHERE Therapeutic_Area__c = '{{therapeutic_area}}' AND KOL_Flag__c = true
      - name: aggregate-data
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kol_engagement_summary SELECT * FROM staged_kol_data WHERE period = '{{period}}'
          warehouse: ANALYTICS_WH
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_channel
          text: 'KOL Engagement Summary for {{therapeutic_area}} ({{period}}): {{pull-kol-data.totalSize}} KOLs tracked.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-key-opinion-leader-engagement-tracker.yml

Triggers a Power BI dataset refresh for the pharmaceutical sales performance dashboard and posts refresh status to the commercial excellence Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Power BI Pharma Sales Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the pharmaceutical sales performance dashboard and posts refresh status to the commercial excellence Microsoft Teams channel.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-sales-dashboard
      description: Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the pharmaceutical sales dashboard and notify the commercial excellence Teams channel.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the pharma sales dataset.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: post-status
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_commercial_channel_id
          text: 'Power BI refresh triggered: dataset {{dataset_id}} in workspace {{workspace_id}}. Results available shortly.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        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: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-pharma-sales-dashboard-refresh.yml

Before an Azure DevOps production release deployment, checks ServiceNow for an approved change request, validates the deployment window, and gates the release accordingly.

naftiko: '0.5'
info:
  label: Azure DevOps Release Deployment Gate
  description: Before an Azure DevOps production release deployment, checks ServiceNow for an approved change request, validates the deployment window, and gates the release accordingly.
  tags:
  - devops
  - change-management
  - azure-devops
  - servicenow
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: gate-production-release
      description: Given an Azure DevOps release ID and a ServiceNow change request number, verify the change is approved and within the deployment window before allowing the release to proceed.
      inputParameters:
      - name: release_id
        in: body
        type: string
        description: The Azure DevOps release definition and run ID.
      - name: change_request_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0045678).
      - name: deployment_environment
        in: body
        type: string
        description: 'Target deployment environment: staging or production.'
      steps:
      - name: get-change-request
        type: call
        call: servicenow.get-change-request
        with:
          change_number: '{{change_request_number}}'
      - name: notify-release-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_release_channel_id
          text: 'Release gate check: Release {{release_id}} | Change {{change_request_number}} state: {{get-change-request.state}} | Environment: {{deployment_environment}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: get-change-request
        method: GET
  - 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-channel-message
        method: POST
Open in Framework → View in Fleet → azure-devops-release-deployment-gate.yml

When a new digital health project is created in ServiceNow, provisions a GitHub repository with standard branch protection, assigns the project team, and notifies the engineering lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Repository Provisioning for New Project
  description: When a new digital health project is created in ServiceNow, provisions a GitHub repository with standard branch protection, assigns the project team, and notifies the engineering lead via Microsoft Teams.
  tags:
  - devops
  - github
  - servicenow
  - microsoft-teams
  - developer-experience
capability:
  exposes:
  - type: mcp
    namespace: dev-provisioning
    port: 8080
    tools:
    - name: provision-project-repository
      description: Given a project name and GitHub organization, create a new GitHub repository with standard branch protection rules and notify the engineering lead via Microsoft Teams.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The project name used as the repository name.
      - name: github_org
        in: body
        type: string
        description: The GitHub organization to create the repository in.
      - name: team_lead_upn
        in: body
        type: string
        description: Microsoft Teams UPN of the engineering team lead.
      steps:
      - name: create-repo
        type: call
        call: github.create-repository
        with:
          org: '{{github_org}}'
          name: '{{project_name}}'
          private: 'true'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{team_lead_upn}}'
          text: 'Repository provisioned: {{github_org}}/{{project_name}} | URL: {{create-repo.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repositories
      path: /orgs/{{org}}/repos
      inputParameters:
      - name: org
        in: path
      operations:
      - name: create-repository
        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
Open in Framework → View in Fleet → github-repository-provisioning-for-new-project.yml

Reports cost center budget variances from SAP, creates finance review tasks, and notifies the finance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Cost Center Budget Variance Reporter
  description: Reports cost center budget variances from SAP, creates finance review tasks, and notifies the finance team for Johnson & Johnson.
  tags:
  - finance
  - sap
  - budgeting
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: report-budget-variance
      description: Given a cost center and period, calculate budget variance, create a review task, and notify finance.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g., 2026-03).
      steps:
      - name: get-variance
        type: call
        call: sap.get-budget-variance
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: create-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Budget Variance: CC {{cost_center}} — {{fiscal_period}}'
          category: finance
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_channel
          text: 'Budget Variance: CC {{cost_center}} for {{fiscal_period}}. Variance: {{get-variance.variance}}. Review: {{create-review.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-cost-center-budget-variance-reporter.yml

When an employee termination is confirmed in Workday, deactivates the user in Salesforce and Microsoft 365, closes open ServiceNow tickets, and notifies the manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding Access Revocation
  description: When an employee termination is confirmed in Workday, deactivates the user in Salesforce and Microsoft 365, closes open ServiceNow tickets, and notifies the manager via Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - salesforce
  - microsoft-teams
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and termination date, deactivate system access in Salesforce and Microsoft 365, close open ServiceNow tickets, and notify the manager via Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The employee's last working day in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: deactivate-sf-user
        type: call
        call: salesforce.deactivate-user
        with:
          user_email: '{{get-employee.work_email}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.manager_email}}'
          text: 'Offboarding complete for {{get-employee.full_name}} (termination: {{termination_date}}). All system access has been revoked.'
  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: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: PATCH
  - 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
Open in Framework → View in Fleet → employee-offboarding-access-revocation.yml

Initiates periodic SOP review cycles by identifying documents due for review in Veeva Vault, creating Jira tasks, and notifying owners for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Document Control SOP Review Cycle Initiator
  description: Initiates periodic SOP review cycles by identifying documents due for review in Veeva Vault, creating Jira tasks, and notifying owners for Johnson & Johnson.
  tags:
  - quality
  - document-control
  - veeva-vault
  - jira
capability:
  exposes:
  - type: mcp
    namespace: doc-control
    port: 8080
    tools:
    - name: initiate-sop-review-cycle
      description: Given a document category and review period, find SOPs due for review, create tracking tasks, and notify owners.
      inputParameters:
      - name: document_category
        in: body
        type: string
        description: The SOP document category (manufacturing, QC, clinical).
      - name: review_due_days
        in: body
        type: integer
        description: Days until review due date to include.
      steps:
      - name: find-docs-due
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT id, name__v FROM documents WHERE category__c = '{{document_category}}'
      - name: create-jira-tasks
        type: call
        call: jira.create-issue
        with:
          project: QMS
          summary: 'SOP Review Cycle: {{document_category}} — {{find-docs-due.totalCount}} documents'
          issuetype: Task
      - name: notify-owners
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.doc_control_channel
          text: 'SOP Review Cycle: {{find-docs-due.totalCount}} {{document_category}} documents due within {{review_due_days}} days. Jira: {{create-jira-tasks.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → document-control-sop-review-cycle-initiator.yml

Retrieves configuration item details from ServiceNow CMDB by asset tag for Johnson & Johnson IT asset management.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Asset Lookup
  description: Retrieves configuration item details from ServiceNow CMDB by asset tag for Johnson & Johnson IT asset management.
  tags:
  - it-operations
  - servicenow
  - cmdb
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: get-cmdb-asset
      description: Given an asset tag, return the CI name, class, operational status, and assigned support group.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: The ServiceNow asset tag identifier.
      call: servicenow.get-ci
      with:
        asset_tag: '{{asset_tag}}'
      outputParameters:
      - name: ci_name
        type: string
        mapping: $.result.name
      - name: ci_class
        type: string
        mapping: $.result.sys_class_name
      - name: operational_status
        type: string
        mapping: $.result.operational_status
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}
      inputParameters:
      - name: asset_tag
        in: query
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-asset-lookup.yml

Refreshes the R&D pipeline dashboard by pulling compound status from Snowflake, updating Power BI, and notifying R&D leadership for Johnson & Johnson.

naftiko: '0.5'
info:
  label: R&D Compound Pipeline Dashboard Refresh
  description: Refreshes the R&D pipeline dashboard by pulling compound status from Snowflake, updating Power BI, and notifying R&D leadership for Johnson & Johnson.
  tags:
  - r-and-d
  - snowflake
  - power-bi
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: rd-analytics
    port: 8080
    tools:
    - name: refresh-pipeline-dashboard
      description: Trigger a pipeline data extract from Snowflake, refresh the Power BI dataset, and notify leadership.
      inputParameters:
      - name: dashboard_id
        in: body
        type: string
        description: The Power BI dashboard dataset ID.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel for R&D leadership.
      steps:
      - name: extract-pipeline-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL refresh_rd_pipeline_snapshot()
          warehouse: RD_WH
      - name: refresh-powerbi
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dashboard_id}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: R&D Pipeline Dashboard refreshed. Data as of {{extract-pipeline-data.timestamp}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → r-d-compound-pipeline-dashboard-refresh.yml

Queries Workday for mandatory compliance training completion rates by department and flags departments below the required threshold via a ServiceNow task and Microsoft Teams alert.

naftiko: '0.5'
info:
  label: Workday Learning Compliance Tracker
  description: Queries Workday for mandatory compliance training completion rates by department and flags departments below the required threshold via a ServiceNow task and Microsoft Teams alert.
  tags:
  - hr
  - compliance
  - workday
  - servicenow
  - microsoft-teams
  - learning-development
capability:
  exposes:
  - type: mcp
    namespace: compliance-learning
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a compliance course ID and required completion percentage threshold, check Workday training completion rates by department and alert HR leaders of non-compliant departments via Teams.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID for the mandatory compliance training.
      - name: completion_threshold_pct
        in: body
        type: number
        description: The required completion percentage (e.g., 95 for 95%).
      steps:
      - name: get-completion-rates
        type: call
        call: workday.get-course-completion-rates
        with:
          course_id: '{{course_id}}'
      - name: create-compliance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance training gap: course {{course_id}} below {{completion_threshold_pct}}% threshold'
          category: hr_compliance
          assigned_group: HR_Compliance
      - name: alert-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Compliance Alert: Course {{course_id}} — departments below {{completion_threshold_pct}}% threshold | ServiceNow task: {{create-compliance-task.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: course-completions
      path: /learningCourseCompletions
      operations:
      - name: get-course-completion-rates
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-learning-compliance-tracker.yml

Creates planned maintenance orders in SAP for manufacturing equipment, schedules in ServiceNow, and notifies the maintenance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Planned Maintenance Order Creator
  description: Creates planned maintenance orders in SAP for manufacturing equipment, schedules in ServiceNow, and notifies the maintenance team for Johnson & Johnson.
  tags:
  - manufacturing
  - sap
  - maintenance
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-maintenance
    port: 8080
    tools:
    - name: create-maintenance-order
      description: Given equipment details, create a SAP maintenance order, a ServiceNow work order, and notify maintenance.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: maintenance_type
        in: body
        type: string
        description: Type of maintenance (preventive, calibration, qualification).
      - name: plant
        in: body
        type: string
        description: The plant code.
      - name: scheduled_date
        in: body
        type: string
        description: Scheduled maintenance date.
      steps:
      - name: create-sap-order
        type: call
        call: sap.create-maintenance-order
        with:
          equipment: '{{equipment_id}}'
          order_type: '{{maintenance_type}}'
          plant: '{{plant}}'
      - name: create-snow-work-order
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Maintenance: {{maintenance_type}} — Equipment {{equipment_id}}'
          category: manufacturing_maintenance
      - name: notify-maintenance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.maintenance_channel
          text: 'Maintenance Scheduled: {{maintenance_type}} for Equipment {{equipment_id}} at Plant {{plant}} on {{scheduled_date}}. SAP: {{create-sap-order.order_number}}. SNOW: {{create-snow-work-order.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-planned-maintenance-order-creator.yml

Looks up a SAP S/4HANA purchase order by number and returns the header status, supplier name, total value, and delivery schedule for procurement visibility.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status Lookup
  description: Looks up a SAP S/4HANA purchase order by number and returns the header status, supplier name, total value, and delivery schedule for procurement visibility.
  tags:
  - finance
  - procurement
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a SAP purchase order by PO number. Returns status, supplier, total value, and delivery schedule. Use for procurement status checks and accounts payable reconciliation.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number to look up.
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-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
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-purchase-order-status-lookup.yml

Manages infrastructure provisioning by creating ServiceNow change requests, triggering Terraform plans, and notifying the cloud team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning with Approval
  description: Manages infrastructure provisioning by creating ServiceNow change requests, triggering Terraform plans, and notifying the cloud team for Johnson & Johnson.
  tags:
  - devops
  - terraform
  - servicenow
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Given infrastructure requirements, create a change request, generate a Terraform plan, and notify cloud engineering.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: Target environment (dev, staging, production).
      - name: resource_type
        in: body
        type: string
        description: Type of resource to provision.
      - name: requestor
        in: body
        type: string
        description: Name of the requestor.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Infra Provisioning: {{resource_type}} in {{environment}}'
          category: cloud_infrastructure
      - name: trigger-plan
        type: call
        call: github.trigger-workflow
        with:
          repo: infrastructure
          workflow: terraform-plan.yml
      - name: notify-cloud-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cloud_eng_channel
          text: 'Infra Request: {{resource_type}} in {{environment}} by {{requestor}}. Change: {{create-change.number}}. Terraform plan triggered.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.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: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning-with-approval.yml

Tracks vulnerability remediation by pulling scan results, creating ServiceNow tickets, and reporting to the CISO dashboard for Johnson & Johnson.

naftiko: '0.5'
info:
  label: IT Security Vulnerability Remediation Tracker
  description: Tracks vulnerability remediation by pulling scan results, creating ServiceNow tickets, and reporting to the CISO dashboard for Johnson & Johnson.
  tags:
  - security
  - servicenow
  - compliance
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: track-vulnerability-remediation
      description: Given a scan ID and severity threshold, pull results, create remediation tickets, and update the dashboard.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The vulnerability scan identifier.
      - name: severity_threshold
        in: body
        type: string
        description: Minimum severity to track (critical, high, medium).
      steps:
      - name: get-findings
        type: call
        call: servicenow.get-vulnerabilities
        with:
          scan_id: '{{scan_id}}'
          severity: '{{severity_threshold}}'
      - name: create-tickets
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vulnerability Remediation: Scan {{scan_id}}'
          category: security
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.security_ops_channel
          text: 'Vulnerability Scan {{scan_id}}: {{get-findings.count}} findings at {{severity_threshold}}+ severity. Ticket: {{create-tickets.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-security-vulnerability-remediation-tracker.yml

Launches periodic access certification campaigns by pulling user data from Okta, creating review tasks, and notifying managers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Okta Access Certification Campaign Launcher
  description: Launches periodic access certification campaigns by pulling user data from Okta, creating review tasks, and notifying managers for Johnson & Johnson.
  tags:
  - security
  - okta
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: launch-access-certification
      description: Given a certification scope, pull active users from Okta, create review tasks, and notify owners.
      inputParameters:
      - name: application_name
        in: body
        type: string
        description: The Okta application name to certify.
      - name: campaign_name
        in: body
        type: string
        description: The certification campaign name.
      steps:
      - name: get-users
        type: call
        call: okta.get-app-users
        with:
          application_name: '{{application_name}}'
      - name: create-campaign
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Access Certification: {{campaign_name}} — {{application_name}}'
          category: identity_governance
      - name: notify-owners
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.iam_channel
          text: 'Access Certification: {{campaign_name}} for {{application_name}}. {{get-users.count}} users to review. SNOW: {{create-campaign.number}}.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://jnj.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: app-users
      path: /apps/{{application_name}}/users
      inputParameters:
      - name: application_name
        in: path
      operations:
      - name: get-app-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-access-certification-campaign-launcher.yml

Checks the last extract refresh status for a Tableau workbook for Johnson & Johnson analytics operations.

naftiko: '0.5'
info:
  label: Tableau Workbook Refresh Status
  description: Checks the last extract refresh status for a Tableau workbook for Johnson & Johnson analytics operations.
  tags:
  - analytics
  - tableau
  - reporting
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: analytics-tableau
    port: 8080
    tools:
    - name: get-workbook-refresh
      description: Given a Tableau workbook ID, return the last refresh status and extract time.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      call: tableau.get-extract-refresh
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.extractRefreshes[0].status
      - name: completed_at
        type: string
        mapping: $.extractRefreshes[0].completedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://jnj.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refreshes
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-extract-refresh
        method: GET
Open in Framework → View in Fleet → tableau-workbook-refresh-status.yml

Runs pharmacovigilance signal detection queries in Snowflake, generates summary reports, and alerts the safety review board for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Pharmacovigilance Signal Detection Reporter
  description: Runs pharmacovigilance signal detection queries in Snowflake, generates summary reports, and alerts the safety review board for Johnson & Johnson.
  tags:
  - drug-safety
  - pharmacovigilance
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: pv-analytics
    port: 8080
    tools:
    - name: run-signal-detection
      description: Given a product and time period, run signal detection queries, create a Jira tracking issue, and alert the safety board.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: period_start
        in: body
        type: string
        description: Analysis period start date.
      - name: period_end
        in: body
        type: string
        description: Analysis period end date.
      steps:
      - name: run-detection
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL pv_signal_detection('{{product_name}}', '{{period_start}}', '{{period_end}}')
          warehouse: PV_WH
      - name: create-review-ticket
        type: call
        call: jira.create-issue
        with:
          project: PV
          summary: 'Signal Detection: {{product_name}} ({{period_start}} to {{period_end}})'
          issuetype: Task
      - name: alert-safety-board
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.safety_board_channel
          text: 'PV Signal Detection: {{product_name}} ({{period_start}} to {{period_end}}). Signals: {{run-detection.signal_count}}. Jira: {{create-review-ticket.key}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-signal-detection-reporter.yml

Retrieves employee absence and leave balance from Workday for Johnson & Johnson HR operations.

naftiko: '0.5'
info:
  label: Workday Absence Balance Lookup
  description: Retrieves employee absence and leave balance from Workday for Johnson & Johnson HR operations.
  tags:
  - hr
  - workday
  - absence
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-absence
    port: 8080
    tools:
    - name: get-absence-balance
      description: Given an employee ID, return the PTO balance, sick leave balance, and next scheduled absence.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-absence-balance
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: pto_balance
        type: string
        mapping: $.TimeOff.PTO_Balance
      - name: sick_balance
        type: string
        mapping: $.TimeOff.Sick_Balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Absence_Management/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absences
      path: /workers/{{employee_id}}/absenceBalances
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-absence-balance
        method: GET
Open in Framework → View in Fleet → workday-absence-balance-lookup.yml

Retrieves healthcare provider account details from Salesforce CRM by account ID for Johnson & Johnson commercial operations.

naftiko: '0.5'
info:
  label: Salesforce HCP Account Lookup
  description: Retrieves healthcare provider account details from Salesforce CRM by account ID for Johnson & Johnson commercial operations.
  tags:
  - commercial
  - salesforce
  - hcp
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: commercial-ops
    port: 8080
    tools:
    - name: get-hcp-account
      description: Given a Salesforce account ID, return the HCP name, specialty, prescribing tier, and territory.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the healthcare provider.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: hcp_name
        type: string
        mapping: $.Name
      - name: specialty
        type: string
        mapping: $.Specialty__c
      - name: tier
        type: string
        mapping: $.Prescribing_Tier__c
      - name: territory
        type: string
        mapping: $.Territory__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-hcp-account-lookup.yml

Retrieves the current status and profile of an Okta user by login email for Johnson & Johnson identity management.

naftiko: '0.5'
info:
  label: Okta User Status Lookup
  description: Retrieves the current status and profile of an Okta user by login email for Johnson & Johnson identity management.
  tags:
  - security
  - okta
  - identity
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: get-user-status
      description: Given a user email, return the Okta user status, last login, and MFA enrollment status.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user login email address.
      call: okta.get-user
      with:
        user_email: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
      - name: mfa_enrolled
        type: boolean
        mapping: $.credentials.provider.type
  consumes:
  - type: http
    namespace: okta
    baseUri: https://jnj.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{{user_email}}
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-lookup.yml

Searches Confluence for SOPs and knowledge base articles by keyword.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search
  description: Searches Confluence for SOPs and knowledge base articles by keyword.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-knowledge-base
      description: Search Confluence for SOPs and knowledge base articles.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: confluence.search
      with:
        cql: type=page AND text~'{{keyword}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.results
      - name: total_size
        type: string
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kellanova.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-search.yml

Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack.

naftiko: '0.5'
info:
  label: Training Compliance Pipeline
  description: Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack.
  tags:
  - training
  - pluralsight
  - workday
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: training-compliance-pipeline
    port: 8080
    tools:
    - name: execute
      description: Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: pluralsight.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: workday.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: workday
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → training-compliance-pipeline.yml

Retrieves new retail lead details from HubSpot CRM for the sales development team.

naftiko: '0.5'
info:
  label: HubSpot Retail Lead Tracking
  description: Retrieves new retail lead details from HubSpot CRM for the sales development team.
  tags:
  - sales
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: sales-leads
    port: 8080
    tools:
    - name: get-retail-lead
      description: Look up a retail lead in HubSpot by company name.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The retail company name.
      call: hubspot.search-contacts
      with:
        query: '{{company_name}}'
      outputParameters:
      - name: contact_name
        type: string
        mapping: $.results[0].properties.firstname
      - name: email
        type: string
        mapping: $.results[0].properties.email
      - name: lifecycle_stage
        type: string
        mapping: $.results[0].properties.lifecyclestage
  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/search
      operations:
      - name: search-contacts
        method: POST
Open in Framework → View in Fleet → hubspot-retail-lead-tracking.yml

Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box.

naftiko: '0.5'
info:
  label: Allergen Compliance Pipeline
  description: Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box.
  tags:
  - compliance
  - sap
  - google-sheets
  - box
capability:
  exposes:
  - type: mcp
    namespace: allergen-compliance-pipeline
    port: 8080
    tools:
    - name: execute
      description: Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: google-sheets.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: box.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → allergen-compliance-pipeline.yml

Retrieves nearby retail locations carrying Kellanova products using Google Maps.

naftiko: '0.5'
info:
  label: Google Maps Store Locator
  description: Retrieves nearby retail locations carrying Kellanova products using Google Maps.
  tags:
  - retail
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: store-locator
    port: 8080
    tools:
    - name: find-nearby-stores
      description: Find retail stores carrying Kellanova products near a location.
      inputParameters:
      - name: address
        in: body
        type: string
        description: The consumer address or zip code.
      - name: brand
        in: body
        type: string
        description: The brand to search for.
      call: google-maps.search-places
      with:
        query: '{{brand}} near {{address}}'
      outputParameters:
      - name: stores
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: google-maps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apikey
      key: $secrets.google_maps_key
    resources:
    - name: places
      path: /place/textsearch/json?query={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-places
        method: GET
Open in Framework → View in Fleet → google-maps-store-locator.yml

When a consumer complaint arrives in Zendesk, identifies the affected product batch in SAP, creates a quality investigation in ServiceNow, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Complaint Resolution Pipeline
  description: When a consumer complaint arrives in Zendesk, identifies the affected product batch in SAP, creates a quality investigation in ServiceNow, and notifies the quality team via Microsoft Teams.
  tags:
  - quality-control
  - customer-service
  - zendesk
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-resolution
    port: 8080
    tools:
    - name: investigate-complaint
      description: Given a Zendesk ticket ID and product details, trace the batch, create an investigation, and notify QA.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: product_upc
        in: body
        type: string
        description: The product UPC code.
      - name: batch_code
        in: body
        type: string
        description: The batch code from the package.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: trace-batch
        type: call
        call: sap.get-batch-details
        with:
          batch_code: '{{batch_code}}'
          upc: '{{product_upc}}'
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Consumer complaint investigation: {{get-ticket.subject}}'
          category: quality
          description: 'Zendesk ticket: {{ticket_id}}. Product UPC: {{product_upc}}. Batch: {{batch_code}}. Plant: {{trace-batch.plant}}. Production date: {{trace-batch.production_date}}.'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-assurance
          text: 'Consumer complaint investigation: {{get-ticket.subject}}. Batch: {{batch_code}} from {{trace-batch.plant}}. ServiceNow: {{create-investigation.number}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://kellanova.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /Batches(BatchCode='{{batch_code}}',UPC='{{upc}}')
      inputParameters:
      - name: batch_code
        in: path
      - name: upc
        in: path
      operations:
      - name: get-batch-details
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kellanova.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-complaint-resolution-pipeline.yml

When launching a new product, creates the product master in SAP, sets up a Salesforce campaign, configures Google Tag Manager tracking, and announces to the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Launch Pipeline
  description: When launching a new product, creates the product master in SAP, sets up a Salesforce campaign, configures Google Tag Manager tracking, and announces to the sales team via Microsoft Teams.
  tags:
  - product-management
  - sap
  - salesforce
  - google-tag-manager
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: launch-product
      description: Given product details, create master data, set up marketing tracking, and notify the sales team.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The new product name.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: brand
        in: body
        type: string
        description: The brand name.
      - name: launch_date
        in: body
        type: string
        description: The launch date in YYYY-MM-DD format.
      steps:
      - name: create-master
        type: call
        call: sap.create-material
        with:
          material_number: '{{material_number}}'
          description: '{{product_name}}'
          brand: '{{brand}}'
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Launch: {{product_name}}'
          brand: '{{brand}}'
          start_date: '{{launch_date}}'
      - name: setup-tracking
        type: call
        call: gtm.create-tag
        with:
          tag_name: '{{product_name}}_launch'
          product_id: '{{material_number}}'
      - name: announce-launch
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-team
          text: 'New product launch: {{product_name}} ({{brand}}) on {{launch_date}}. SAP material: {{material_number}}. Salesforce campaign: {{create-campaign.campaign_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.gtm_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags
      operations:
      - name: create-tag
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-launch-pipeline.yml

Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack.

naftiko: '0.5'
info:
  label: Retail Promotion Execution Pipeline
  description: Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack.
  tags:
  - promotions
  - sap
  - salesforce
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: retail-promotion-execution-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → retail-promotion-execution-pipeline.yml

When a field rep completes a store visit, logs the visit in Salesforce, uploads photos to SharePoint, captures competitive data in Google Sheets, and notifies the regional manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Execution Pipeline
  description: When a field rep completes a store visit, logs the visit in Salesforce, uploads photos to SharePoint, captures competitive data in Google Sheets, and notifies the regional manager via Microsoft Teams.
  tags:
  - retail
  - field-sales
  - salesforce
  - sharepoint
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail-execution
    port: 8080
    tools:
    - name: log-store-visit
      description: Given visit details, log the store visit, upload photos, capture data, and notify management.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: rep_name
        in: body
        type: string
        description: The field rep name.
      - name: visit_notes
        in: body
        type: string
        description: Notes from the store visit.
      - name: manager_email
        in: body
        type: string
        description: The regional manager email.
      steps:
      - name: log-visit
        type: call
        call: salesforce.create-visit
        with:
          store_id: '{{store_id}}'
          rep: '{{rep_name}}'
          notes: '{{visit_notes}}'
      - name: upload-photos
        type: call
        call: sharepoint.upload-file
        with:
          site_id: retail-execution
          folder_path: StoreVisits/{{store_id}}
          file_name: visit_{{log-visit.visit_id}}.zip
      - name: update-tracker
        type: call
        call: google-sheets.append-row
        with:
          spreadsheet_id: retail-visits-tracker
          values: '{{store_id}},{{rep_name}},{{log-visit.visit_date}},{{visit_notes}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Store visit logged: {{store_id}} by {{rep_name}}. Notes: {{visit_notes}}. Photos: {{upload-photos.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: visits
      path: /sobjects/StoreVisit__c
      operations:
      - name: create-visit
        method: POST
  - 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:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        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
Open in Framework → View in Fleet → retail-execution-pipeline.yml

Retrieves a Figma packaging design file by key.

naftiko: '0.5'
info:
  label: Figma Packaging Design Lookup
  description: Retrieves a Figma packaging design file by key.
  tags:
  - design
  - figma
capability:
  exposes:
  - type: mcp
    namespace: figma-packaging
    port: 8080
    tools:
    - name: get-data
      description: Retrieves a Figma packaging design file by key.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: figma-packaging.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: figma-packaging
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → figma-packaging-design-lookup.yml

Retrieves engagement metrics for Kellanova brand Instagram posts.

naftiko: '0.5'
info:
  label: Instagram Brand Metrics Lookup
  description: Retrieves engagement metrics for Kellanova brand Instagram posts.
  tags:
  - social-media
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: instagram-brand
    port: 8080
    tools:
    - name: get-data
      description: Retrieves engagement metrics for Kellanova brand Instagram posts.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: instagram-brand.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: instagram-brand
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → instagram-brand-metrics-lookup.yml

Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics.

naftiko: '0.5'
info:
  label: Influencer Partnership Pipeline
  description: Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics.
  tags:
  - marketing
  - hubspot
  - docusign
  - asana
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: influencer-partnership-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: hubspot.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: docusign.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: asana.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: instagram.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubspot.com/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://api.docusign.com/v1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: asana
    baseUri: https://api.asana.com/v1
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://api.instagram.com/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → influencer-partnership-pipeline.yml

Retrieves team training progress from Pluralsight for a given course.

naftiko: '0.5'
info:
  label: Pluralsight Training Progress Lookup
  description: Retrieves team training progress from Pluralsight for a given course.
  tags:
  - training
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: learning
    port: 8080
    tools:
    - name: get-training-progress
      description: Look up team training progress in Pluralsight.
      inputParameters:
      - name: team_name
        in: body
        type: string
        description: The team name.
      - name: course_name
        in: body
        type: string
        description: The course name.
      call: pluralsight.get-team-progress
      with:
        team: '{{team_name}}'
        course: '{{course_name}}'
      outputParameters:
      - name: completion_rate
        type: string
        mapping: $.completionRate
      - name: enrolled_count
        type: string
        mapping: $.enrolledCount
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: team-progress
      path: /teams/{{team}}/courses/{{course}}/progress
      inputParameters:
      - name: team
        in: path
      - name: course
        in: path
      operations:
      - name: get-team-progress
        method: GET
Open in Framework → View in Fleet → pluralsight-training-progress-lookup.yml

When a production batch completes in SAP, runs quality checks, updates batch status, creates a release certificate in SharePoint, and notifies the QA team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Quality Control Batch Release Pipeline
  description: When a production batch completes in SAP, runs quality checks, updates batch status, creates a release certificate in SharePoint, and notifies the QA team via Microsoft Teams.
  tags:
  - manufacturing
  - quality-control
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-control
    port: 8080
    tools:
    - name: process-batch-release
      description: Given a batch ID, run quality checks, generate release certificate, and notify QA.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The SAP production batch identifier.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_id: '{{batch_id}}'
      - name: run-qa-checks
        type: call
        call: sap.run-quality-inspection
        with:
          batch_id: '{{batch_id}}'
          plant: '{{plant_code}}'
      - name: create-certificate
        type: call
        call: sharepoint.create-document
        with:
          site_id: qa-documents
          folder_path: BatchRelease/{{plant_code}}/{{batch_id}}
          content: 'Batch {{batch_id}} - Plant {{plant_code}} - QA Result: {{run-qa-checks.result}} - Release Date: {{run-qa-checks.inspection_date}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-assurance
          text: 'Batch {{batch_id}} from {{plant_code}}: QA {{run-qa-checks.result}}. Certificate: {{create-certificate.url}}. Product: {{get-batch.product_name}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /Batches('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch
        method: GET
    - name: inspections
      path: /QualityInspections
      operations:
      - name: run-quality-inspection
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-control-batch-release-pipeline.yml

Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Customer Feedback Analysis Pipeline
  description: Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.
  tags:
  - feedback
  - zendesk
  - azure-machine-learning
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: customer-feedback-analysis-pipeline
    port: 8080
    tools:
    - name: execute
      description: Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: zendesk.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: azure-machine-learning.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: snowflake.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: confluence.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://api.zendesk.com/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-machine-learning
    baseUri: https://api.azuremachinelearning.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_machine_learning_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://api.confluence.com/v1
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → customer-feedback-analysis-pipeline.yml

When a food safety issue is detected, identifies affected batches in SAP, creates a recall case in ServiceNow, alerts retail partners via Salesforce, and notifies the crisis team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Food Safety Recall Pipeline
  description: When a food safety issue is detected, identifies affected batches in SAP, creates a recall case in ServiceNow, alerts retail partners via Salesforce, and notifies the crisis team via Microsoft Teams.
  tags:
  - food-safety
  - recall
  - sap
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: food-safety
    port: 8080
    tools:
    - name: initiate-recall
      description: Given a product and issue description, identify affected batches, create a recall case, and alert stakeholders.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number of the affected product.
      - name: issue_description
        in: body
        type: string
        description: Description of the food safety issue.
      - name: severity
        in: body
        type: string
        description: Severity level (class-I, class-II, class-III).
      steps:
      - name: find-batches
        type: call
        call: sap.find-affected-batches
        with:
          material_number: '{{material_number}}'
      - name: create-recall-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Food safety recall: {{material_number}} - {{severity}}'
          category: food_safety
          priority: critical
          description: '{{issue_description}}. Affected batches: {{find-batches.batch_count}}.'
      - name: alert-retailers
        type: call
        call: salesforce.create-recall-alert
        with:
          material_number: '{{material_number}}'
          batches: '{{find-batches.batch_ids}}'
          severity: '{{severity}}'
      - name: notify-crisis-team
        type: call
        call: msteams.send-message
        with:
          channel_id: crisis-management
          text: 'FOOD SAFETY RECALL initiated. Product: {{material_number}}. Severity: {{severity}}. Affected batches: {{find-batches.batch_count}}. Case: {{create-recall-case.number}}. Retail alerts sent.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batch-trace
      path: /BatchTrace?$filter=Material eq '{{material_number}}'
      inputParameters:
      - name: material_number
        in: query
      operations:
      - name: find-affected-batches
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kellanova.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: recall-alerts
      path: /sobjects/RecallAlert__c
      operations:
      - name: create-recall-alert
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → food-safety-recall-pipeline.yml

Retrieves a travel expense report from SAP Concur by report ID.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Lookup
  description: Retrieves a travel expense report from SAP Concur by report ID.
  tags:
  - finance
  - travel
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up a SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: total_amount
        type: string
        mapping: $.Total
      - name: approval_status
        type: string
        mapping: $.ApprovalStatusName
      - name: submit_date
        type: string
        mapping: $.SubmitDate
  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-report
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-expense-lookup.yml

Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets.

naftiko: '0.5'
info:
  label: Digital Marketing Campaign Pipeline
  description: Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets.
  tags:
  - marketing
  - hubspot
  - facebook
  - google-analytics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: digital-marketing-campaign-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: hubspot.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: facebook.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-analytics.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubspot.com/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://api.facebook.com/v1
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → digital-marketing-campaign-pipeline.yml

Retrieves search performance data from Google Search Console for Kellanova properties.

naftiko: '0.5'
info:
  label: Google Search Console SEO Lookup
  description: Retrieves search performance data from Google Search Console for Kellanova properties.
  tags:
  - seo
  - google-search-console
capability:
  exposes:
  - type: mcp
    namespace: gsc-seo
    port: 8080
    tools:
    - name: get-data
      description: Retrieves search performance data from Google Search Console for Kellanova properties.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: gsc-seo.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: gsc-seo
    baseUri: https://www.googleapis.com/webmasters/v3
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → google-search-console-seo-lookup.yml

Retrieves the current status of a manufacturing production line from SAP, including throughput rate, downtime, and batch in progress.

naftiko: '0.5'
info:
  label: Production Line Status Lookup
  description: Retrieves the current status of a manufacturing production line from SAP, including throughput rate, downtime, and batch in progress.
  tags:
  - manufacturing
  - production
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: get-production-line-status
      description: Look up a production line status in SAP by line ID.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The SAP production line identifier.
      call: sap.get-production-line
      with:
        line_id: '{{line_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.LineStatus
      - name: throughput_rate
        type: string
        mapping: $.d.ThroughputRate
      - name: current_batch
        type: string
        mapping: $.d.CurrentBatchId
      - name: downtime_minutes
        type: string
        mapping: $.d.DowntimeMinutes
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-lines
      path: /ProductionLines('{{line_id}}')
      inputParameters:
      - name: line_id
        in: path
      operations:
      - name: get-production-line
        method: GET
Open in Framework → View in Fleet → production-line-status-lookup.yml

Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Customer Loyalty Pipeline
  description: Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake.
  tags:
  - loyalty
  - salesforce
  - stripe
  - mailchimp
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-loyalty-pipeline
    port: 8080
    tools:
    - name: execute
      description: Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: stripe.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: mailchimp.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → customer-loyalty-pipeline.yml

Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable.

naftiko: '0.5'
info:
  label: Product Photography Pipeline
  description: Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable.
  tags:
  - creative
  - asana
  - google-drive
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: product-photography-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: asana.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: google-drive.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: airtable.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: airtable.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: asana
    baseUri: https://api.asana.com/v1
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-drive
    baseUri: https://api.googledrive.com/v1
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v1
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → product-photography-pipeline.yml

When a BigCommerce order is placed, creates a delivery in SAP, updates the order status in BigCommerce, and sends a shipping confirmation via MailChimp.

naftiko: '0.5'
info:
  label: E-Commerce Order Fulfillment Pipeline
  description: When a BigCommerce order is placed, creates a delivery in SAP, updates the order status in BigCommerce, and sends a shipping confirmation via MailChimp.
  tags:
  - e-commerce
  - fulfillment
  - bigcommerce
  - sap
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: fulfill-order
      description: Given an order ID, create a delivery, update status, and send shipping confirmation.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-delivery
        type: call
        call: sap.create-delivery
        with:
          order_id: '{{order_id}}'
          items: '{{get-order.products}}'
          shipping_address: '{{get-order.shipping_addresses}}'
      - name: update-status
        type: call
        call: bigcommerce.update-order-status
        with:
          order_id: '{{order_id}}'
          status: shipped
          tracking_number: '{{create-delivery.tracking_number}}'
      - name: send-confirmation
        type: call
        call: mailchimp.send-transactional
        with:
          template: shipping-confirmation
          recipient_email: '{{customer_email}}'
          tracking_number: '{{create-delivery.tracking_number}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
      - name: update-order-status
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /Deliveries
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: transactional
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → e-commerce-order-fulfillment-pipeline.yml

Queries aggregated sales data from Snowflake by product line and region.

naftiko: '0.5'
info:
  label: Snowflake Sales Analytics Query
  description: Queries aggregated sales data from Snowflake by product line and region.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-sales
    port: 8080
    tools:
    - name: get-data
      description: Queries aggregated sales data from Snowflake by product line and region.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: snowflake-sales.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-sales
    baseUri: https://kellanova.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → snowflake-sales-analytics-query.yml

Retrieves production batch details from SAP by batch ID.

naftiko: '0.5'
info:
  label: SAP Production Batch Lookup
  description: Retrieves production batch details from SAP by batch ID.
  tags:
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap-batches
    port: 8080
    tools:
    - name: get-data
      description: Retrieves production batch details from SAP by batch ID.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sap-batches.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sap-batches
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/ZBATCH_SRV
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → sap-production-batch-lookup.yml

Monitors brand mentions across Instagram and Facebook via Meta APIs, analyzes sentiment in Azure Databricks, and alerts the brand team via Microsoft Teams if negative sentiment spikes.

naftiko: '0.5'
info:
  label: Social Media Brand Monitoring Pipeline
  description: Monitors brand mentions across Instagram and Facebook via Meta APIs, analyzes sentiment in Azure Databricks, and alerts the brand team via Microsoft Teams if negative sentiment spikes.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - azure-databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-monitoring
    port: 8080
    tools:
    - name: monitor-brand-sentiment
      description: Given a brand name and date range, check social mentions, analyze sentiment, and alert if negative.
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The brand name to monitor.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-instagram-mentions
        type: call
        call: instagram.get-mentions
        with:
          brand: '{{brand_name}}'
          since: '{{start_date}}'
          until: '{{end_date}}'
      - name: get-facebook-mentions
        type: call
        call: facebook.get-mentions
        with:
          brand: '{{brand_name}}'
          since: '{{start_date}}'
          until: '{{end_date}}'
      - name: analyze-sentiment
        type: call
        call: databricks.run-query
        with:
          query: SELECT sentiment_score, negative_pct FROM brand_sentiment WHERE brand = '{{brand_name}}' AND date BETWEEN '{{start_date}}' AND '{{end_date}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-management
          text: 'Brand sentiment report for {{brand_name}} ({{start_date}} to {{end_date}}): Sentiment score: {{analyze-sentiment.sentiment_score}}. Negative: {{analyze-sentiment.negative_pct}}%. Instagram mentions: {{get-instagram-mentions.count}}. Facebook mentions: {{get-facebook-mentions.count}}.'
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: mentions
      path: /{{ig_user_id}}/tags
      operations:
      - name: get-mentions
        method: GET
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: mentions
      path: /{{page_id}}/tagged
      operations:
      - name: get-mentions
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kellanova-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → social-media-brand-monitoring-pipeline.yml

Retrieves a payroll summary from ADP for a given employee and pay period.

naftiko: '0.5'
info:
  label: ADP Payroll Summary Lookup
  description: Retrieves a payroll summary from ADP for a given employee and pay period.
  tags:
  - hr
  - payroll
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Look up payroll summary from ADP.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The ADP employee ID.
      - name: pay_period
        in: body
        type: string
        description: The pay period identifier.
      call: adp.get-payroll
      with:
        employee_id: '{{employee_id}}'
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payStatement.grossPayAmount
      - name: net_pay
        type: string
        mapping: $.payStatement.netPayAmount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: pay-statements
      path: /workers/{{employee_id}}/pay-statements?payPeriod={{pay_period}}
      inputParameters:
      - name: employee_id
        in: path
      - name: pay_period
        in: query
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-summary-lookup.yml

Triggers a refresh of the sales performance Power BI dataset to ensure dashboards reflect the latest retail data.

naftiko: '0.5'
info:
  label: Power BI Sales Dashboard Refresh
  description: Triggers a refresh of the sales performance Power BI dataset to ensure dashboards reflect the latest retail data.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: refresh-sales-dashboard
      description: Trigger a Power BI dataset refresh for the sales performance dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset identifier.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-sales-dashboard-refresh.yml

Queries consumer purchase insights from Teradata data warehouse.

naftiko: '0.5'
info:
  label: Teradata Consumer Insights Query
  description: Queries consumer purchase insights from Teradata data warehouse.
  tags:
  - analytics
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: teradata-insights
    port: 8080
    tools:
    - name: get-data
      description: Queries consumer purchase insights from Teradata data warehouse.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: teradata-insights.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: teradata-insights
    baseUri: https://kellanova.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → teradata-consumer-insights-query.yml

Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack.

naftiko: '0.5'
info:
  label: Data Privacy Compliance Pipeline
  description: Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack.
  tags:
  - compliance
  - snowflake
  - google-sheets
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-privacy-compliance-pipeline
    port: 8080
    tools:
    - name: execute
      description: Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: google-sheets.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: sharepoint.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://api.sharepoint.com/v1
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → data-privacy-compliance-pipeline.yml

Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets.

naftiko: '0.5'
info:
  label: Vendor Invoice Reconciliation Pipeline
  description: Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets.
  tags:
  - finance
  - sap
  - salesforce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: vendor-invoice-reconciliation-pipeline
    port: 8080
    tools:
    - name: execute
      description: Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → vendor-invoice-reconciliation-pipeline.yml

Retrieves current inventory levels at a distribution center from SAP by material number and plant code.

naftiko: '0.5'
info:
  label: Distribution Center Inventory Lookup
  description: Retrieves current inventory levels at a distribution center from SAP by material number and plant code.
  tags:
  - distribution
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-dc-inventory
      description: Look up inventory levels at a distribution center in SAP.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The distribution center plant code.
      call: sap.get-inventory
      with:
        material: '{{material_number}}'
        plant: '{{plant_code}}'
      outputParameters:
      - name: available_quantity
        type: string
        mapping: $.d.AvailableStock
      - name: reserved_quantity
        type: string
        mapping: $.d.ReservedStock
      - name: unit_of_measure
        type: string
        mapping: $.d.BaseUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /MaterialStock(Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → distribution-center-inventory-lookup.yml

When raw material inventory falls below threshold, generates a purchase requisition in SAP, gets supplier quotes, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Raw Material Procurement Pipeline
  description: When raw material inventory falls below threshold, generates a purchase requisition in SAP, gets supplier quotes, and notifies the procurement team via Microsoft Teams.
  tags:
  - supply-chain
  - procurement
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: raw-materials
    port: 8080
    tools:
    - name: trigger-reorder
      description: Given a material and plant, check inventory and trigger reorder if below threshold.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      - name: reorder_quantity
        in: body
        type: string
        description: The quantity to reorder.
      steps:
      - name: check-stock
        type: call
        call: sap.get-inventory
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: create-requisition
        type: call
        call: sap.create-requisition
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{reorder_quantity}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement
          text: 'Reorder triggered for {{material_number}} at {{plant_code}}. Current stock: {{check-stock.AvailableStock}}. Requisition: {{create-requisition.req_number}} for {{reorder_quantity}} units.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /MaterialStock(Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-inventory
        method: GET
    - name: requisitions
      path: /A_PurchaseRequisition
      operations:
      - name: create-requisition
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → raw-material-procurement-pipeline.yml

Extracts planogram compliance data from Circana, creates follow-up actions in Salesforce for field reps, and notifies the category management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retailer Planogram Compliance Pipeline
  description: Extracts planogram compliance data from Circana, creates follow-up actions in Salesforce for field reps, and notifies the category management team via Microsoft Teams.
  tags:
  - retail
  - planogram
  - circana
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: planogram-compliance
    port: 8080
    tools:
    - name: check-planogram-compliance
      description: Given a retailer and category, check planogram compliance and create follow-up actions.
      inputParameters:
      - name: retailer
        in: body
        type: string
        description: The retailer name.
      - name: category
        in: body
        type: string
        description: The product category.
      steps:
      - name: get-compliance
        type: call
        call: circana.get-planogram-data
        with:
          retailer: '{{retailer}}'
          category: '{{category}}'
      - name: create-actions
        type: call
        call: salesforce.create-task
        with:
          subject: 'Planogram compliance follow-up: {{retailer}} - {{category}}'
          description: 'Compliance rate: {{get-compliance.compliance_rate}}%. Non-compliant stores: {{get-compliance.nc_store_count}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: category-management
          text: 'Planogram compliance for {{category}} at {{retailer}}: {{get-compliance.compliance_rate}}%. {{get-compliance.nc_store_count}} stores need attention. Task: {{create-actions.task_id}}.'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: planogram
      path: /planogram/compliance?retailer={{retailer}}&category={{category}}
      inputParameters:
      - name: retailer
        in: query
      - name: category
        in: query
      operations:
      - name: get-planogram-data
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retailer-planogram-compliance-pipeline.yml

Creates and sends a consumer newsletter campaign in MailChimp targeting a specific brand audience segment.

naftiko: '0.5'
info:
  label: MailChimp Consumer Newsletter Campaign
  description: Creates and sends a consumer newsletter campaign in MailChimp targeting a specific brand audience segment.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: send-newsletter
      description: Create and send a MailChimp newsletter campaign.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: list_id
        in: body
        type: string
        description: The MailChimp audience list ID.
      - name: template_id
        in: body
        type: string
        description: The email template ID.
      - name: subject
        in: body
        type: string
        description: The email subject line.
      call: mailchimp.create-campaign
      with:
        name: '{{campaign_name}}'
        list_id: '{{list_id}}'
        template_id: '{{template_id}}'
        subject: '{{subject}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-consumer-newsletter-campaign.yml

Archives a regulatory compliance document to Box in the appropriate folder.

naftiko: '0.5'
info:
  label: Box Regulatory Document Archive
  description: Archives a regulatory compliance document to Box in the appropriate folder.
  tags:
  - compliance
  - box
capability:
  exposes:
  - type: mcp
    namespace: regulatory-docs
    port: 8080
    tools:
    - name: archive-document
      description: Upload a regulatory document to the Box compliance archive.
      inputParameters:
      - name: file_name
        in: body
        type: string
        description: The document file name.
      - name: folder_id
        in: body
        type: string
        description: The Box target folder ID.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
  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
Open in Framework → View in Fleet → box-regulatory-document-archive.yml

Retrieves a Salesforce broker account by ID for retail distribution.

naftiko: '0.5'
info:
  label: Salesforce Broker Account Lookup
  description: Retrieves a Salesforce broker account by ID for retail distribution.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sf-brokers
    port: 8080
    tools:
    - name: get-data
      description: Retrieves a Salesforce broker account by ID for retail distribution.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sf-brokers.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sf-brokers
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → salesforce-broker-account-lookup.yml

Pulls demand forecasts from Azure Databricks, creates production orders in SAP, and notifies plant managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Production Scheduling Pipeline
  description: Pulls demand forecasts from Azure Databricks, creates production orders in SAP, and notifies plant managers via Microsoft Teams.
  tags:
  - manufacturing
  - scheduling
  - azure-databricks
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: production-scheduling
    port: 8080
    tools:
    - name: schedule-production
      description: Given a plant and period, generate production schedule from demand forecasts.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      - name: period
        in: body
        type: string
        description: The scheduling period.
      steps:
      - name: get-forecast
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM demand_forecast WHERE plant = '{{plant_code}}' AND period = '{{period}}'
      - name: create-orders
        type: call
        call: sap.create-production-orders
        with:
          plant: '{{plant_code}}'
          forecast: '{{get-forecast.results}}'
      - name: notify-plant
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-ops-{{plant_code}}
          text: 'Production schedule for {{plant_code}} ({{period}}): {{create-orders.order_count}} orders created.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kellanova-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /ProductionOrders
      operations:
      - name: create-production-orders
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-scheduling-pipeline.yml

Pulls promotion execution data from SAP, enriches with Circana retail data, analyzes ROI in Azure Databricks, and shares results with the trade team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Promotion Effectiveness Pipeline
  description: Pulls promotion execution data from SAP, enriches with Circana retail data, analyzes ROI in Azure Databricks, and shares results with the trade team via Microsoft Teams.
  tags:
  - marketing
  - trade-promotion
  - sap
  - circana
  - azure-databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-promotion
    port: 8080
    tools:
    - name: analyze-promotion-roi
      description: Given a promotion ID, pull execution and retail data, analyze ROI, and share results.
      inputParameters:
      - name: promotion_id
        in: body
        type: string
        description: The trade promotion identifier.
      - name: retailer
        in: body
        type: string
        description: The retailer name.
      steps:
      - name: get-promo-data
        type: call
        call: sap.get-promotion
        with:
          promotion_id: '{{promotion_id}}'
      - name: get-retail-data
        type: call
        call: circana.get-promo-performance
        with:
          promotion_id: '{{promotion_id}}'
          retailer: '{{retailer}}'
      - name: calculate-roi
        type: call
        call: databricks.run-query
        with:
          query: SELECT promotion_roi('{{promotion_id}}', '{{retailer}}') as roi
      - name: share-results
        type: call
        call: msteams.send-message
        with:
          channel_id: trade-marketing
          text: 'Promotion {{promotion_id}} at {{retailer}}: Spend: {{get-promo-data.spend}}. Incremental sales: {{get-retail-data.incremental_sales}}. ROI: {{calculate-roi.roi}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/TPM_PROMOTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: promotions
      path: /Promotions('{{promotion_id}}')
      inputParameters:
      - name: promotion_id
        in: path
      operations:
      - name: get-promotion
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: promo-performance
      path: /promotions/{{promotion_id}}/performance?retailer={{retailer}}
      inputParameters:
      - name: promotion_id
        in: path
      - name: retailer
        in: query
      operations:
      - name: get-promo-performance
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kellanova-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-promotion-effectiveness-pipeline.yml

On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge.

naftiko: '0.5'
info:
  label: IT Incident Response Pipeline
  description: On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge.
  tags:
  - incident
  - dynatrace
  - servicenow
  - slack
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: it-incident-response-pipeline
    port: 8080
    tools:
    - name: execute
      description: On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: dynatrace.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: servicenow.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: zoom.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://api.dynatrace.com/v1
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → it-incident-response-pipeline.yml

Retrieves promotion data from a Google Sheets tracker used by the trade marketing team.

naftiko: '0.5'
info:
  label: Google Sheets Promotion Tracker
  description: Retrieves promotion data from a Google Sheets tracker used by the trade marketing team.
  tags:
  - marketing
  - promotions
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: trade-marketing
    port: 8080
    tools:
    - name: get-promotion-data
      description: Retrieve promotion tracking data from Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: The cell range to retrieve (e.g., Sheet1!A1:Z100).
      call: google-sheets.get-values
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
      outputParameters:
      - name: values
        type: string
        mapping: $.values
  consumes:
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-values
        method: GET
Open in Framework → View in Fleet → google-sheets-promotion-tracker.yml

Retrieves application performance metrics from Dynatrace for a given service.

naftiko: '0.5'
info:
  label: Dynatrace Application Health Check
  description: Retrieves application performance metrics from Dynatrace for a given service.
  tags:
  - monitoring
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: get-app-health
      description: Retrieve application health metrics from Dynatrace.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Dynatrace service name.
      call: dynatrace.get-service-metrics
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: response_time
        type: string
        mapping: $.result[0].data[0].values[0]
      - name: error_rate
        type: string
        mapping: $.result[1].data[0].values[0]
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://kellanova.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate&entitySelector=type(SERVICE),entityName({{service_name}})
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-service-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-health-check.yml

Retrieves a Zendesk consumer support ticket by ID.

naftiko: '0.5'
info:
  label: Zendesk Consumer Support Ticket Lookup
  description: Retrieves a Zendesk consumer support ticket by ID.
  tags:
  - customer-service
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: consumer-support
    port: 8080
    tools:
    - name: get-support-ticket
      description: Look up a Zendesk support ticket by ticket ID.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.ticket.subject
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://kellanova.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-consumer-support-ticket-lookup.yml

Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams.

naftiko: '0.5'
info:
  label: Recipe Formulation Pipeline
  description: Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams.
  tags:
  - food-science
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recipe-formulation-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: sharepoint.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: microsoft-teams.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://api.sharepoint.com/v1
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → recipe-formulation-pipeline.yml

Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets.

naftiko: '0.5'
info:
  label: Contract Renewal Pipeline
  description: Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets.
  tags:
  - legal
  - salesforce
  - jira
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal-pipeline
    port: 8080
    tools:
    - name: execute
      description: Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: jira.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: microsoft-outlook.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: jira
    baseUri: https://api.jira.com/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → contract-renewal-pipeline.yml

Retrieves supplier audit results from SAP, creates compliance findings in ServiceNow, shares documentation in SharePoint, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Compliance Audit Pipeline
  description: Retrieves supplier audit results from SAP, creates compliance findings in ServiceNow, shares documentation in SharePoint, and notifies the procurement team via Microsoft Teams.
  tags:
  - supply-chain
  - compliance
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-compliance
    port: 8080
    tools:
    - name: process-supplier-audit
      description: Given a supplier ID, process audit results, create findings, and notify procurement.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier identifier.
      - name: audit_date
        in: body
        type: string
        description: The audit date in YYYY-MM-DD format.
      - name: audit_type
        in: body
        type: string
        description: The type of audit (food-safety, quality, environmental).
      steps:
      - name: get-audit-results
        type: call
        call: sap.get-supplier-audit
        with:
          supplier_id: '{{supplier_id}}'
          audit_date: '{{audit_date}}'
      - name: create-findings
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supplier audit findings: {{get-audit-results.supplier_name}} ({{audit_type}})'
          category: supplier_compliance
          description: 'Audit score: {{get-audit-results.score}}. Findings: {{get-audit-results.findings_count}} items.'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: supplier-compliance
          folder_path: Audits/{{supplier_id}}/{{audit_date}}
          file_name: audit_report_{{audit_type}}.pdf
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement
          text: 'Supplier audit complete: {{get-audit-results.supplier_name}} ({{audit_type}}). Score: {{get-audit-results.score}}. Findings: {{get-audit-results.findings_count}}. Report: {{upload-report.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/SUPPLIER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: audits
      path: /SupplierAudits(SupplierId='{{supplier_id}}',AuditDate='{{audit_date}}')
      inputParameters:
      - name: supplier_id
        in: path
      - name: audit_date
        in: path
      operations:
      - name: get-supplier-audit
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kellanova.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: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - 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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-compliance-audit-pipeline.yml

Retrieves product innovation pipeline entries from Airtable.

naftiko: '0.5'
info:
  label: Airtable Innovation Pipeline Lookup
  description: Retrieves product innovation pipeline entries from Airtable.
  tags:
  - product
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: airtable-innovation
    port: 8080
    tools:
    - name: get-data
      description: Retrieves product innovation pipeline entries from Airtable.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: airtable-innovation.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: airtable-innovation
    baseUri: https://api.airtable.com/v0/appKellanova
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → airtable-innovation-pipeline-lookup.yml

Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Market Entry Pipeline
  description: Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams.
  tags:
  - expansion
  - salesforce
  - airtable
  - figma
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: new-market-entry-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: airtable.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: figma.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v1
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → new-market-entry-pipeline.yml

Looks up an employee in Workday by employee ID and returns name, department, title, and contact information.

naftiko: '0.5'
info:
  label: Workday Employee Directory Lookup
  description: Looks up an employee in Workday by employee ID and returns name, department, title, and contact information.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-directory
    port: 8080
    tools:
    - name: get-employee
      description: Look up an employee by Workday worker ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.worker.descriptor
      - name: department
        type: string
        mapping: $.worker.primarySupervisoryOrganization.descriptor
      - name: title
        type: string
        mapping: $.worker.businessTitle
      - name: email
        type: string
        mapping: $.worker.primaryWorkEmail
  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
Open in Framework → View in Fleet → workday-employee-directory-lookup.yml

Searches Google Drive for product recipe and formulation documents by keyword.

naftiko: '0.5'
info:
  label: Google Drive Recipe Document Search
  description: Searches Google Drive for product recipe and formulation documents by keyword.
  tags:
  - product-development
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: recipe-management
    port: 8080
    tools:
    - name: search-recipes
      description: Search Google Drive for recipe and formulation documents.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: google-drive.search-files
      with:
        query: name contains '{{keyword}}' and '{{folder_id}}' in parents
      outputParameters:
      - name: files
        type: string
        mapping: $.files
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-recipe-document-search.yml

Retrieves production system health metrics from New Relic.

naftiko: '0.5'
info:
  label: New Relic Production Health Lookup
  description: Retrieves production system health metrics from New Relic.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: newrelic-prod
    port: 8080
    tools:
    - name: get-data
      description: Retrieves production system health metrics from New Relic.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: newrelic-prod.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: newrelic-prod
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → new-relic-production-health-lookup.yml

Pulls sales data from SAP BW, runs demand forecasting in Azure Databricks, updates inventory plans in SAP, and notifies the supply chain team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Demand Forecast Pipeline
  description: Pulls sales data from SAP BW, runs demand forecasting in Azure Databricks, updates inventory plans in SAP, and notifies the supply chain team via Microsoft Teams.
  tags:
  - supply-chain
  - forecasting
  - sap-bw
  - azure-databricks
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Given a product category and time horizon, generate demand forecasts and update inventory plans.
      inputParameters:
      - name: product_category
        in: body
        type: string
        description: The product category (e.g., snacks, cereals, frozen).
      - name: forecast_horizon_weeks
        in: body
        type: string
        description: The forecast horizon in weeks.
      - name: region
        in: body
        type: string
        description: The geographic region for the forecast.
      steps:
      - name: extract-sales
        type: call
        call: sapbw.get-sales-data
        with:
          category: '{{product_category}}'
          region: '{{region}}'
          weeks: '{{forecast_horizon_weeks}}'
      - name: run-forecast
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM demand_forecast('{{product_category}}', '{{region}}', {{forecast_horizon_weeks}})
      - name: update-inventory
        type: call
        call: sap.update-inventory-plan
        with:
          category: '{{product_category}}'
          region: '{{region}}'
          forecast: '{{run-forecast.results}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-planning
          text: 'Demand forecast updated for {{product_category}} in {{region}} ({{forecast_horizon_weeks}}w horizon). Projected demand: {{run-forecast.total_units}}. Inventory plans updated.'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://kellanova-bw.sap.com/sap/opu/odata/sap/BW_SALES_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-data
      path: /SalesHistory?$filter=Category eq '{{category}}' and Region eq '{{region}}'
      inputParameters:
      - name: category
        in: query
      - name: region
        in: query
      operations:
      - name: get-sales-data
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kellanova-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory-plans
      path: /InventoryPlans
      operations:
      - name: update-inventory-plan
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → demand-forecast-pipeline.yml

Retrieves Power BI manufacturing performance dashboard refresh status.

naftiko: '0.5'
info:
  label: Power BI Manufacturing Dashboard
  description: Retrieves Power BI manufacturing performance dashboard refresh status.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: powerbi-mfg
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Power BI manufacturing performance dashboard refresh status.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: powerbi-mfg.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: powerbi-mfg
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → power-bi-manufacturing-dashboard.yml

Retrieves the status of a DocuSign supplier agreement envelope.

naftiko: '0.5'
info:
  label: DocuSign Supplier Agreement Lookup
  description: Retrieves the status of a DocuSign supplier agreement envelope.
  tags:
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: docusign-agreements
    port: 8080
    tools:
    - name: get-data
      description: Retrieves the status of a DocuSign supplier agreement envelope.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: docusign-agreements.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: docusign-agreements
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/kellanova
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → docusign-supplier-agreement-lookup.yml

Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker.

naftiko: '0.5'
info:
  label: Production Line Changeover Pipeline
  description: Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker.
  tags:
  - manufacturing
  - sap
  - servicenow
  - slack
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: production-line-changeover-pipeline
    port: 8080
    tools:
    - name: execute
      description: Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: servicenow.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → production-line-changeover-pipeline.yml

Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack.

naftiko: '0.5'
info:
  label: Supply Chain Visibility Pipeline
  description: Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack.
  tags:
  - logistics
  - sap
  - snowflake
  - tableau
  - slack
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-visibility-pipeline
    port: 8080
    tools:
    - name: execute
      description: Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: tableau.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://api.tableau.com/v1
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → supply-chain-visibility-pipeline.yml

Sends a message to a Slack supply chain operations channel.

naftiko: '0.5'
info:
  label: Slack Supply Chain Message Sender
  description: Sends a message to a Slack supply chain operations channel.
  tags:
  - communications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-supplychain
    port: 8080
    tools:
    - name: get-data
      description: Sends a message to a Slack supply chain operations channel.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: slack-supplychain.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: slack-supplychain
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → slack-supply-chain-message-sender.yml

Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches.

naftiko: '0.5'
info:
  label: Security Vulnerability Pipeline
  description: Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches.
  tags:
  - security
  - dynatrace
  - jira
  - slack
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: security-vulnerability-pipeline
    port: 8080
    tools:
    - name: execute
      description: Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: dynatrace.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: jira.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: azure-devops.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://api.dynatrace.com/v1
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: jira
    baseUri: https://api.jira.com/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-devops
    baseUri: https://api.azuredevops.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → security-vulnerability-pipeline.yml

Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets.

naftiko: '0.5'
info:
  label: Social Media Campaign Pipeline
  description: Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets.
  tags:
  - social-media
  - hubspot
  - instagram
  - facebook
  - google-analytics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: social-media-campaign-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: hubspot.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: instagram.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: facebook.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubspot.com/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://api.instagram.com/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://api.facebook.com/v1
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → social-media-campaign-pipeline.yml

Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams.

naftiko: '0.5'
info:
  label: Global Pricing Update Pipeline
  description: Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams.
  tags:
  - pricing
  - sap
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: global-pricing-update-pipeline
    port: 8080
    tools:
    - name: execute
      description: Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: snowflake.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → global-pricing-update-pipeline.yml

Generates nutritional labels from SAP recipe data, validates against regulatory database, uploads to SharePoint, and notifies compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Nutritional Labeling Pipeline
  description: Generates nutritional labels from SAP recipe data, validates against regulatory database, uploads to SharePoint, and notifies compliance team via Microsoft Teams.
  tags:
  - compliance
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nutritional-labeling
    port: 8080
    tools:
    - name: execute
      description: Orchestrate nutritional labeling across SAP, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The product ID.
      - name: context
        in: body
        type: string
        description: Additional context.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: sharepoint.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: microsoft-teams.execute-step-3
        with:
          data: '{{step-2.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://api.sharepoint.com/v1
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → nutritional-labeling-pipeline.yml

Analyzes warehouse utilization data from SAP, runs optimization in Azure Databricks, updates slot assignments in SAP, and notifies the warehouse team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Slot Optimization Pipeline
  description: Analyzes warehouse utilization data from SAP, runs optimization in Azure Databricks, updates slot assignments in SAP, and notifies the warehouse team via Microsoft Teams.
  tags:
  - distribution
  - warehouse
  - sap
  - azure-databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-optimization
    port: 8080
    tools:
    - name: optimize-warehouse-slots
      description: Given a warehouse code, analyze utilization, run optimization, and update slot assignments.
      inputParameters:
      - name: warehouse_code
        in: body
        type: string
        description: The SAP warehouse code.
      steps:
      - name: get-utilization
        type: call
        call: sap.get-warehouse-data
        with:
          warehouse: '{{warehouse_code}}'
      - name: run-optimization
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM warehouse_optimization('{{warehouse_code}}')
      - name: update-slots
        type: call
        call: sap.update-slot-assignments
        with:
          warehouse: '{{warehouse_code}}'
          assignments: '{{run-optimization.results}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: warehouse-ops
          text: Slot optimization complete for warehouse {{warehouse_code}}. {{run-optimization.moves_count}} moves recommended. Utilization improved from {{get-utilization.current_pct}}% to {{run-optimization.projected_pct}}%.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/WM_WAREHOUSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: warehouse
      path: /WarehouseData('{{warehouse}}')
      inputParameters:
      - name: warehouse
        in: path
      operations:
      - name: get-warehouse-data
        method: GET
    - name: slots
      path: /SlotAssignments
      operations:
      - name: update-slot-assignments
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://kellanova-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → warehouse-slot-optimization-pipeline.yml

Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Financial Close Pipeline
  description: Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams.
  tags:
  - finance
  - sap
  - power-bi
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: financial-close-pipeline
    port: 8080
    tools:
    - name: execute
      description: Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: power-bi.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → financial-close-pipeline.yml

Retrieves a Stripe payment for Kellanova direct-to-consumer orders.

naftiko: '0.5'
info:
  label: Stripe E-Commerce Payment Lookup
  description: Retrieves a Stripe payment for Kellanova direct-to-consumer orders.
  tags:
  - payments
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: stripe-payments
    port: 8080
    tools:
    - name: get-data
      description: Retrieves a Stripe payment for Kellanova direct-to-consumer orders.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: stripe-payments.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: stripe-payments
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → stripe-e-commerce-payment-lookup.yml

Searches Google Drive for brand guidelines and creative assets.

naftiko: '0.5'
info:
  label: Google Drive Brand Asset Search
  description: Searches Google Drive for brand guidelines and creative assets.
  tags:
  - marketing
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: brand-assets
    port: 8080
    tools:
    - name: search-brand-assets
      description: Search Google Drive for brand assets.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: google-drive.search-files
      with:
        query: name contains '{{keyword}}'
      outputParameters:
      - name: files
        type: string
        mapping: $.files
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-brand-asset-search.yml

Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack.

naftiko: '0.5'
info:
  label: Plant Energy Monitoring Pipeline
  description: Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack.
  tags:
  - operations
  - sap
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: plant-energy-monitoring-pipeline
    port: 8080
    tools:
    - name: execute
      description: Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: power-bi.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → plant-energy-monitoring-pipeline.yml

When a shipment is ready, creates a transport order in SAP, updates the delivery status in Salesforce, and notifies the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Transportation Logistics Orchestrator
  description: When a shipment is ready, creates a transport order in SAP, updates the delivery status in Salesforce, and notifies the logistics team via Microsoft Teams.
  tags:
  - distribution
  - logistics
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: process-shipment
      description: Given shipment details, create transport order, update delivery tracking, and notify logistics.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery number.
      - name: destination
        in: body
        type: string
        description: The delivery destination.
      - name: carrier
        in: body
        type: string
        description: The carrier name.
      steps:
      - name: create-transport
        type: call
        call: sap.create-transport-order
        with:
          delivery_number: '{{delivery_number}}'
          destination: '{{destination}}'
          carrier: '{{carrier}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-delivery
        with:
          delivery_number: '{{delivery_number}}'
          transport_id: '{{create-transport.transport_id}}'
          status: in_transit
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics
          text: 'Shipment {{delivery_number}} dispatched via {{carrier}} to {{destination}}. Transport order: {{create-transport.transport_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-s4.sap.com/sap/opu/odata/sap/TM_TRANSPORT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transport-orders
      path: /TransportOrders
      operations:
      - name: create-transport-order
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: deliveries
      path: /sobjects/Delivery__c/{{delivery_number}}
      inputParameters:
      - name: delivery_number
        in: path
      operations:
      - name: update-delivery
        method: PATCH
  - 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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → transportation-logistics-orchestrator.yml

Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets.

naftiko: '0.5'
info:
  label: Ingredient Sourcing Optimization Pipeline
  description: Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets.
  tags:
  - sourcing
  - sap
  - snowflake
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: ingredient-sourcing-optimization-pipeline
    port: 8080
    tools:
    - name: execute
      description: Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → ingredient-sourcing-optimization-pipeline.yml

Creates a brand content post on LinkedIn for Kellanova's corporate page and logs it in Salesforce for tracking.

naftiko: '0.5'
info:
  label: LinkedIn Brand Content Post
  description: Creates a brand content post on LinkedIn for Kellanova's corporate page and logs it in Salesforce for tracking.
  tags:
  - marketing
  - social-media
  - linkedin
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: social-content
    port: 8080
    tools:
    - name: post-brand-content
      description: Given content details, create a LinkedIn post and log it in Salesforce.
      inputParameters:
      - name: content_text
        in: body
        type: string
        description: The post content text.
      - name: campaign_id
        in: body
        type: string
        description: The associated Salesforce campaign ID.
      steps:
      - name: create-post
        type: call
        call: linkedin.create-post
        with:
          text: '{{content_text}}'
      - name: log-post
        type: call
        call: salesforce.create-activity
        with:
          campaign_id: '{{campaign_id}}'
          type: social_post
          platform: linkedin
          post_id: '{{create-post.post_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kellanova.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/CampaignActivity__c
      operations:
      - name: create-activity
        method: POST
Open in Framework → View in Fleet → linkedin-brand-content-post.yml

When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing Pipeline
  description: When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: invoice-processing
    port: 8080
    tools:
    - name: process-invoice
      description: Given an invoice and PO number, validate, route for approval, and notify AP.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The vendor invoice number.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: amount
        in: body
        type: string
        description: The invoice amount.
      - name: approver_id
        in: body
        type: string
        description: The Workday approver employee ID.
      steps:
      - name: validate-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: route-approval
        type: call
        call: workday.submit-approval
        with:
          approver_id: '{{approver_id}}'
          amount: '{{amount}}'
          description: Invoice {{invoice_number}} for PO {{po_number}}
      - name: notify-ap
        type: call
        call: msteams.send-message
        with:
          channel_id: accounts-payable
          text: 'Invoice {{invoice_number}} processed for PO {{po_number}}. Amount: ${{amount}}. Vendor: {{validate-po.Supplier.CompanyName}}. Approval routed to {{approver_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kellanova-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
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: approvals
      path: /approvals
      operations:
      - name: submit-approval
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing-pipeline.yml

Retrieves financial data from SAP BW and generates a formatted Excel report stored in SharePoint.

naftiko: '0.5'
info:
  label: Microsoft Excel Financial Report
  description: Retrieves financial data from SAP BW and generates a formatted Excel report stored in SharePoint.
  tags:
  - finance
  - reporting
  - sap-bw
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: financial-reporting
    port: 8080
    tools:
    - name: generate-financial-report
      description: Given a report type and period, pull data from SAP BW and create an Excel report in SharePoint.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: The report type (e.g., p-and-l, balance-sheet, cost-center).
      - name: period
        in: body
        type: string
        description: The fiscal period.
      steps:
      - name: extract-data
        type: call
        call: sapbw.get-financial-data
        with:
          report_type: '{{report_type}}'
          period: '{{period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance-reports
          folder_path: FinancialReports/{{report_type}}
          file_name: '{{report_type}}_{{period}}.xlsx'
          content: '{{extract-data.results}}'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://kellanova-bw.sap.com/sap/opu/odata/sap/BW_FINANCE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financial-data
      path: /FinancialData?$filter=ReportType eq '{{report_type}}' and Period eq '{{period}}'
      inputParameters:
      - name: report_type
        in: query
      - name: period
        in: query
      operations:
      - name: get-financial-data
        method: GET
  - 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:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → microsoft-excel-financial-report.yml

Pulls campaign data from Google Analytics, enriches with retail sales from Circana, creates a performance report in Power BI, and shares results with the marketing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Pipeline
  description: Pulls campaign data from Google Analytics, enriches with retail sales from Circana, creates a performance report in Power BI, and shares results with the marketing team via Microsoft Teams.
  tags:
  - marketing
  - analytics
  - google-analytics
  - circana
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: analyze-campaign
      description: Given a campaign ID, pull digital and retail data, refresh the dashboard, and notify the marketing team.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The marketing campaign identifier.
      - name: start_date
        in: body
        type: string
        description: Campaign start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Campaign end date in YYYY-MM-DD format.
      steps:
      - name: get-digital-metrics
        type: call
        call: google-analytics.get-report
        with:
          property_id: kellanova-brand-site
          campaign_id: '{{campaign_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-retail-lift
        type: call
        call: circana.get-sales-lift
        with:
          campaign_id: '{{campaign_id}}'
          period: '{{start_date}}_{{end_date}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: marketing-campaign-performance
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing
          text: 'Campaign {{campaign_id}} performance: Digital impressions: {{get-digital-metrics.impressions}}. Retail lift: {{get-retail-lift.lift_percent}}%. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: google-analytics
    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
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: sales-lift
      path: /campaigns/{{campaign_id}}/lift
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-sales-lift
        method: GET
  - 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: refresh-dataset
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-pipeline.yml

When a new packaging design is submitted, stores it in SharePoint, creates a review task in Jira, and notifies the team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Packaging Design Review Pipeline
  description: When a new packaging design is submitted, stores it in SharePoint, creates a review task in Jira, and notifies the team via Microsoft Teams.
  tags:
  - product-development
  - packaging
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: packaging-design
    port: 8080
    tools:
    - name: submit-design-review
      description: Given packaging design details, store the design, create a review task, and notify.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name.
      - name: design_version
        in: body
        type: string
        description: The design version.
      steps:
      - name: store-design
        type: call
        call: sharepoint.upload-file
        with:
          site_id: packaging-designs
          folder_path: Designs/{{product_name}}/{{design_version}}
          file_name: packaging_{{design_version}}.pdf
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: PKG
          summary: 'Packaging review: {{product_name}} v{{design_version}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: packaging-design
          text: 'New packaging design for review: {{product_name}} v{{design_version}}. Jira: {{create-review.key}}.'
  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:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://kellanova.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → packaging-design-review-pipeline.yml

Retrieves product launch project status from Asana.

naftiko: '0.5'
info:
  label: Asana Product Launch Lookup
  description: Retrieves product launch project status from Asana.
  tags:
  - project-management
  - asana
capability:
  exposes:
  - type: mcp
    namespace: asana-launches
    port: 8080
    tools:
    - name: get-data
      description: Retrieves product launch project status from Asana.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: asana-launches.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: asana-launches
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → asana-product-launch-lookup.yml

Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Supplier Onboarding Pipeline
  description: Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - docusign
  - box
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: supplier-onboarding-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: docusign.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-outlook.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://api.docusign.com/v1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → supplier-onboarding-pipeline.yml

Retrieves a Tableau dashboard embed URL for retail sales analytics.

naftiko: '0.5'
info:
  label: Tableau Retail Analytics Dashboard
  description: Retrieves a Tableau dashboard embed URL for retail sales analytics.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: retail-analytics
    port: 8080
    tools:
    - name: get-retail-dashboard
      description: Retrieve the embed URL for a Tableau retail analytics dashboard.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: embed_url
        type: string
        mapping: $.workbook.contentUrl
      - name: updated_at
        type: string
        mapping: $.workbook.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://kellanova-tableau.online/api/3.14
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: query
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-retail-analytics-dashboard.yml

Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Consumer Complaint Resolution Orchestrator
  description: Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake.
  tags:
  - quality
  - zendesk
  - jira
  - slack
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: consumer-complaint-resolution-orchestrator
    port: 8080
    tools:
    - name: execute
      description: Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: zendesk.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: jira.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://api.zendesk.com/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: jira
    baseUri: https://api.jira.com/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → consumer-complaint-resolution-orchestrator.yml

Retrieves a Jira issue by key from the product development project, returning summary, status, assignee, and sprint.

naftiko: '0.5'
info:
  label: Jira Product Development Task Lookup
  description: Retrieves a Jira issue by key from the product development project, returning summary, status, assignee, and sprint.
  tags:
  - product-development
  - jira
capability:
  exposes:
  - type: mcp
    namespace: product-dev
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key from the product development project.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kellanova.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-product-development-task-lookup.yml

Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box.

naftiko: '0.5'
info:
  label: Employee Offboarding Pipeline
  description: Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box.
  tags:
  - hr
  - workday
  - azure-active-directory
  - servicenow
  - box
capability:
  exposes:
  - type: mcp
    namespace: employee-offboarding-pipeline
    port: 8080
    tools:
    - name: execute
      description: Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: workday.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: azure-active-directory.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: servicenow.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: box.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-active-directory
    baseUri: https://api.azureactivedirectory.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_active_directory_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → employee-offboarding-pipeline.yml

Monitors product shelf life in SAP, alerts distribution teams via Slack, updates retailer notifications in Salesforce, and logs expiring inventory in Snowflake.

naftiko: '0.5'
info:
  label: Shelf Life Monitoring Pipeline
  description: Monitors product shelf life in SAP, alerts distribution teams via Slack, updates retailer notifications in Salesforce, and logs expiring inventory in Snowflake.
  tags:
  - quality
  - sap
  - slack
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: shelf-life-monitoring
    port: 8080
    tools:
    - name: execute
      description: Orchestrate shelf life monitoring across SAP, Slack, Salesforce, and Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: slack.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: salesforce.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → shelf-life-monitoring-pipeline.yml

Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Batch Quality Hold Pipeline
  description: Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake.
  tags:
  - quality
  - sap
  - servicenow
  - slack
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: batch-quality-hold-pipeline
    port: 8080
    tools:
    - name: execute
      description: Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: servicenow.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → batch-quality-hold-pipeline.yml

Queries SAP S/4HANA for current inventory levels across Kimberly-Clark's distribution centers and generates a Snowflake-backed analytics summary for supply chain planning.

naftiko: '0.5'
info:
  label: Supply Chain Inventory Snapshot
  description: Queries SAP S/4HANA for current inventory levels across Kimberly-Clark's distribution centers and generates a Snowflake-backed analytics summary for supply chain planning.
  tags:
  - supply-chain
  - inventory
  - sap
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: get-inventory-snapshot
      description: Pull current inventory levels by material and plant from SAP S/4HANA, then write a snapshot to Snowflake for supply chain analytics. Use for daily inventory monitoring and replenishment planning.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code to query inventory for, e.g. KC01.
      steps:
      - name: get-inventory
        type: call
        call: sap.get-inventory
        with:
          plant: '{{plant_code}}'
      - name: write-snapshot
        type: call
        call: snowflake.insert-snapshot
        with:
          plant: '{{plant_code}}'
          data: '{{get-inventory.results}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kimberly-clark.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-snapshot
        method: POST
Open in Framework → View in Fleet → supply-chain-inventory-snapshot.yml

When an employee's role changes in Workday, updates their Okta group memberships and access profile to match the new role's permissions.

naftiko: '0.5'
info:
  label: Okta Access Provisioning for New Role
  description: When an employee's role changes in Workday, updates their Okta group memberships and access profile to match the new role's permissions.
  tags:
  - identity
  - security
  - hr
  - okta
  - workday
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: sync-role-access
      description: Given a Workday employee ID and their new job profile, update the employee's Okta group memberships to match the new role's access entitlements. Invoke on role change events from Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role has changed.
      - name: new_role
        in: body
        type: string
        description: The new job profile or role name as defined in Workday.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-okta-user
        type: call
        call: okta.get-user
        with:
          login: '{{get-worker.work_email}}'
      - name: update-groups
        type: call
        call: okta.update-user-groups
        with:
          user_id: '{{get-okta-user.id}}'
          profile: '{{new_role}}'
  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: /kimberly-clark/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://kimberly-clark.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: POST
Open in Framework → View in Fleet → okta-access-provisioning-for-new-role.yml

When Datadog detects a production anomaly alert, creates a ServiceNow incident, assigns the on-call engineer, and posts a triage message to the ops Teams channel.

naftiko: '0.5'
info:
  label: Datadog Production Anomaly Response
  description: When Datadog detects a production anomaly alert, creates a ServiceNow incident, assigns the on-call engineer, and posts a triage message to the ops Teams channel.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-datadog-anomaly
      description: Given a Datadog alert ID and monitor name, retrieve alert details, create a ServiceNow incident, and post a triage message to the operations Teams channel. Invoke when Datadog fires a production anomaly alert.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert or event ID.
      - name: monitor_name
        in: body
        type: string
        description: The name of the Datadog monitor that fired.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Datadog anomaly: {{monitor_name}}'
          category: production_monitoring
          priority: '2'
      - name: post-triage
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'Datadog anomaly detected: {{monitor_name}} | SNOW: {{create-incident.number}} | Alert: {{alert_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-production-anomaly-response.yml

Queries Snowflake's query history to identify long-running or expensive queries, flags policy violations, and posts a governance summary to the data platform Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Query Governance Audit
  description: Queries Snowflake's query history to identify long-running or expensive queries, flags policy violations, and posts a governance summary to the data platform Teams channel.
  tags:
  - data
  - governance
  - snowflake
  - analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: audit-query-governance
      description: Retrieve Snowflake query history for the last N hours and identify queries exceeding execution time or credit thresholds. Post a governance summary to the data platform Teams channel. Use for daily data platform cost governance.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours of query history to analyze, e.g. 24.
      - name: threshold_seconds
        in: body
        type: integer
        description: Query execution time threshold in seconds. Queries exceeding this are flagged.
      steps:
      - name: get-query-history
        type: call
        call: snowflake.get-query-history
        with:
          hours_back: '{{hours_back}}'
          threshold_seconds: '{{threshold_seconds}}'
      - name: post-report
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_data_channel_id
          text: 'Snowflake Query Governance Report (last {{hours_back}}h): {{get-query-history.flagged_count}} queries exceeded {{threshold_seconds}}s threshold.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kimberly-clark.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /statements
      operations:
      - name: get-query-history
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-governance-audit.yml

Retrieves LinkedIn Campaign Manager performance metrics for Kimberly-Clark brand campaigns and posts a weekly summary to the social media Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Brand Campaign Performance
  description: Retrieves LinkedIn Campaign Manager performance metrics for Kimberly-Clark brand campaigns and posts a weekly summary to the social media Teams channel.
  tags:
  - marketing
  - social
  - linkedin
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-performance
      description: Given a date range, retrieve LinkedIn campaign impressions, clicks, and engagement rates from LinkedIn Campaign Manager and post a performance summary to the social media Teams channel.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for the reporting period in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for the reporting period in YYYY-MM-DD format.
      steps:
      - name: get-campaign-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_social_channel_id
          text: 'LinkedIn Campaign Digest {{start_date}} - {{end_date}}: {{get-campaign-stats.summary}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: ad-analytics
      path: /adAnalytics
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-brand-campaign-performance.yml

Retrieves submitted expense reports from SAP Concur that exceed policy thresholds and flags them in ServiceNow for manager review.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Audit
  description: Retrieves submitted expense reports from SAP Concur that exceed policy thresholds and flags them in ServiceNow for manager review.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: audit-expense-reports
      description: Retrieve expense reports from SAP Concur that exceed the policy limit and create ServiceNow approval tasks for manager review. Invoke on a nightly schedule or before period close.
      inputParameters:
      - name: threshold_amount
        in: body
        type: number
        description: The expense amount threshold in USD above which reports require additional review.
      - name: submission_date
        in: body
        type: string
        description: Filter expense reports submitted on or after this date in YYYY-MM-DD format.
      steps:
      - name: get-expense-reports
        type: call
        call: concur.get-expense-reports
        with:
          submitDateAfter: '{{submission_date}}'
      - name: create-review-task
        type: call
        call: servicenow.create-approval
        with:
          short_description: Expense reports exceeding ${{threshold_amount}} require review
          category: expense_audit
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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
Open in Framework → View in Fleet → sap-concur-expense-report-audit.yml

Uses Anthropic Claude to summarize supplier contracts retrieved from SharePoint and stores the structured summary back in SharePoint alongside the original document.

naftiko: '0.5'
info:
  label: AI-Assisted Contract Summarization
  description: Uses Anthropic Claude to summarize supplier contracts retrieved from SharePoint and stores the structured summary back in SharePoint alongside the original document.
  tags:
  - ai
  - procurement
  - anthropic
  - sharepoint
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: ai-contracts
    port: 8080
    tools:
    - name: summarize-contract
      description: Given a SharePoint document URL for a supplier contract, retrieve the document content, send it to Anthropic Claude for structured summarization (key terms, obligations, renewal dates), and write the summary back to SharePoint. Use for contract review and obligation tracking.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: The SharePoint document URL for the contract to summarize.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the document is stored.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-document
        with:
          site_id: '{{site_id}}'
          document_url: '{{document_url}}'
      - name: summarize
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          content: 'Summarize this supplier contract, extracting: key obligations, payment terms, renewal date, and termination clauses. Document: {{get-document.content}}'
      - name: write-summary
        type: call
        call: sharepoint.create-file
        with:
          site_id: '{{site_id}}'
          filename: contract-summary.md
          content: '{{summarize.text}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: get-document
        method: GET
      - name: create-file
        method: PUT
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-contract-summarization.yml

When a supplier invoice arrives in SAP Ariba, validates the invoice against a SAP S/4HANA purchase order and routes for approval if there is a discrepancy.

naftiko: '0.5'
info:
  label: SAP Invoice Processing and Approval
  description: When a supplier invoice arrives in SAP Ariba, validates the invoice against a SAP S/4HANA purchase order and routes for approval if there is a discrepancy.
  tags:
  - finance
  - procurement
  - sap
  - sap-ariba
  - invoice
  - approval
capability:
  exposes:
  - type: mcp
    namespace: invoice-ops
    port: 8080
    tools:
    - name: process-invoice
      description: Given an Ariba invoice ID, retrieve the invoice details from SAP Ariba, validate against the matching SAP S/4HANA PO, and create an approval task if amounts or quantities do not match.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice document ID.
      - name: po_number
        in: body
        type: string
        description: The associated SAP purchase order number.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow.create-approval
        with:
          short_description: 'Invoice discrepancy: {{invoice_id}} vs PO {{po_number}}'
          amount_invoiced: '{{get-invoice.total_amount}}'
          amount_po: '{{get-po.total_value}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kimberly-clark-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
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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
Open in Framework → View in Fleet → sap-invoice-processing-and-approval.yml

Generates a daily digest of Kimberly-Clark's top accounts from Salesforce CRM including open opportunities, recent activity, and revenue to date, and posts the summary to a Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Account Health Digest
  description: Generates a daily digest of Kimberly-Clark's top accounts from Salesforce CRM including open opportunities, recent activity, and revenue to date, and posts the summary to a Teams channel.
  tags:
  - sales
  - crm
  - reporting
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crm-reporting
    port: 8080
    tools:
    - name: digest-account-health
      description: Retrieve active Salesforce accounts with open opportunities and recent activity logs, then post a formatted digest to the sales leadership Teams channel. Run daily for pipeline visibility.
      inputParameters:
      - name: days_back
        in: body
        type: integer
        description: Number of days of activity to include in the digest, e.g. 7 for a weekly summary.
      steps:
      - name: get-accounts
        type: call
        call: salesforce.query-accounts
        with:
          days_back: '{{days_back}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'Account Health Digest: {{get-accounts.summary}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kimberly-clark.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-account-health-digest.yml

Retrieves retail buyer account details from Salesforce including account health, open opportunities, and planogram compliance scores.

naftiko: '0.5'
info:
  label: Salesforce Retail Buyer Account Lookup
  description: Retrieves retail buyer account details from Salesforce including account health, open opportunities, and planogram compliance scores.
  tags:
  - sales
  - retail
  - salesforce
  - crm
capability:
  exposes:
  - type: mcp
    namespace: crm-retail
    port: 8080
    tools:
    - name: get-retail-buyer
      description: Look up a retail buyer account in Salesforce. Returns health score, open opportunities, and compliance metrics.
      inputParameters:
      - name: account_id
        type: string
        description: Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: account_name
        type: string
        mapping: $.Name
      - name: health_score
        type: string
        mapping: $.Health_Score__c
      - name: open_opps
        type: string
        mapping: $.Open_Opportunity_Count__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kimberlyclark.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-retail-buyer-account-lookup.yml

Polls the Meta Graph API for Kimberly-Clark brand mentions across Facebook and Instagram, and posts significant engagement spikes or negative sentiment to the brand team Teams channel.

naftiko: '0.5'
info:
  label: Brand Social Media Monitoring Alert
  description: Polls the Meta Graph API for Kimberly-Clark brand mentions across Facebook and Instagram, and posts significant engagement spikes or negative sentiment to the brand team Teams channel.
  tags:
  - marketing
  - social
  - meta
  - microsoft-teams
  - brand-monitoring
capability:
  exposes:
  - type: mcp
    namespace: brand-monitoring
    port: 8080
    tools:
    - name: monitor-social-mentions
      description: Retrieve recent brand mentions from Meta Graph API for Kimberly-Clark brand pages. If engagement volume exceeds threshold, post an alert to the brand Teams channel. Use for real-time brand reputation monitoring.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Meta Facebook page ID for the Kimberly-Clark brand to monitor.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back for mentions and engagements.
      steps:
      - name: get-mentions
        type: call
        call: meta.get-page-insights
        with:
          page_id: '{{page_id}}'
          hours_back: '{{hours_back}}'
      - name: post-alert
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_brand_channel_id
          text: 'Social Monitor Alert: {{get-mentions.total_impressions}} impressions in last {{hours_back}}h on page {{page_id}}.'
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_page_token
    resources:
    - name: page-insights
      path: /{{page_id}}/insights
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page-insights
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → brand-social-media-monitoring-alert.yml

On a high-severity PagerDuty alert, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT Teams channel.

naftiko: '0.5'
info:
  label: IT Incident Response Handler
  description: On a high-severity PagerDuty alert, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT Teams channel.
  tags:
  - itsm
  - incident-response
  - pagerduty
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a PagerDuty alert ID for a critical production incident, create a P1 ServiceNow incident, trigger an on-call page, and post a war-room message to the IT Teams channel. Invoke when PagerDuty fires a critical-severity alert.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The PagerDuty alert ID for the critical incident.
      - name: service_name
        in: body
        type: string
        description: The name of the affected service or system.
      - name: alert_summary
        in: body
        type: string
        description: A brief description of the alert condition.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          priority: '1'
          short_description: 'P1: {{alert_summary}} in {{service_name}}'
          category: production_outage
      - name: trigger-page
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Incident: {{alert_summary}}'
          service_id: $secrets.pagerduty_it_service_id
          body_details: 'ServiceNow: {{create-snow-incident.number}}'
      - name: post-war-room
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'P1 INCIDENT OPEN: {{alert_summary}} | SNOW: {{create-snow-incident.number}} | PD: {{trigger-page.incident_key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incidents
      path: /incidents
      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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-incident-response-handler.yml

Retrieves employee certifications and training completions from Workday for compliance tracking at manufacturing facilities.

naftiko: '0.5'
info:
  label: Workday Employee Certification Lookup
  description: Retrieves employee certifications and training completions from Workday for compliance tracking at manufacturing facilities.
  tags:
  - hr
  - compliance
  - workday
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: hr-compliance
    port: 8080
    tools:
    - name: get-certifications
      description: Look up employee certifications in Workday including safety training, GMP, and equipment qualifications.
      inputParameters:
      - name: employee_id
        type: string
        description: Workday employee ID.
      call: workday.get-certifications
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: certifications
        type: string
        mapping: $.certifications
      - name: expired_count
        type: string
        mapping: $.expired_count
  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: /kimberlyclark/workers/{{worker_id}}/certifications
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-certifications
        method: GET
Open in Framework → View in Fleet → workday-employee-certification-lookup.yml

When a Salesforce opportunity is marked Closed Won, creates a corresponding sales order in SAP S/4HANA and notifies the account team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Order Sync
  description: When a Salesforce opportunity is marked Closed Won, creates a corresponding sales order in SAP S/4HANA and notifies the account team via Microsoft Teams.
  tags:
  - sales
  - crm
  - erp
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crm-erp-sync
    port: 8080
    tools:
    - name: sync-opportunity-to-order
      description: Given a Salesforce opportunity ID that has been marked Closed Won, retrieve opportunity details, create a SAP S/4HANA sales order, and notify the account team in Microsoft Teams.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID (18-character Salesforce record ID).
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-order
        type: call
        call: sap.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_sap_id}}'
          amount: '{{get-opportunity.amount}}'
          currency: '{{get-opportunity.currency_code}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: New SAP order {{create-sap-order.order_number}} created from Salesforce opportunity {{opportunity_id}}.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kimberly-clark.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kimberly-clark-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
      operations:
      - name: create-sales-order
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-sap-order-sync.yml

Syncs IT hardware and software asset records from ServiceNow Asset Management with the Microsoft 365 device inventory to identify unmanaged devices.

naftiko: '0.5'
info:
  label: ServiceNow IT Asset Inventory Sync
  description: Syncs IT hardware and software asset records from ServiceNow Asset Management with the Microsoft 365 device inventory to identify unmanaged devices.
  tags:
  - itsm
  - asset-management
  - servicenow
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: asset-ops
    port: 8080
    tools:
    - name: sync-asset-inventory
      description: Retrieve all managed devices from Microsoft Graph (Intune) and compare with ServiceNow hardware asset records. Return a list of devices present in Intune but missing from ServiceNow for reconciliation.
      steps:
      - name: get-intune-devices
        type: call
        call: msgraph.get-managed-devices
      - name: get-snow-assets
        type: call
        call: servicenow.get-hardware-assets
      - name: create-snow-assets
        type: call
        call: servicenow.create-asset
        with:
          device_data: '{{get-intune-devices.value}}'
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: managed-devices
      path: /deviceManagement/managedDevices
      operations:
      - name: get-managed-devices
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: hardware-assets
      path: /table/alm_hardware
      operations:
      - name: get-hardware-assets
        method: GET
      - name: create-asset
        method: POST
Open in Framework → View in Fleet → servicenow-it-asset-inventory-sync.yml

Pulls current compensation data from Workday and generates a cost-center benchmarking report published to Power BI for finance and HR leadership.

naftiko: '0.5'
info:
  label: Workday Compensation Benchmarking Report
  description: Pulls current compensation data from Workday and generates a cost-center benchmarking report published to Power BI for finance and HR leadership.
  tags:
  - hr
  - finance
  - workday
  - power-bi
  - reporting
  - compensation
capability:
  exposes:
  - type: mcp
    namespace: compensation-reporting
    port: 8080
    tools:
    - name: publish-compensation-benchmark
      description: Pull salary and grade data from Workday for all active employees, push the dataset to Power BI, and trigger a report refresh. Use for quarterly compensation benchmarking and HR finance reviews.
      inputParameters:
      - name: effective_date
        in: body
        type: string
        description: The effective date for the compensation snapshot in YYYY-MM-DD format.
      steps:
      - name: get-compensation-data
        type: call
        call: workday.get-compensation
        with:
          effectiveDate: '{{effective_date}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: $secrets.powerbi_hr_workspace_id
          dataset_id: $secrets.powerbi_compensation_dataset_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: compensation
      path: /kimberly-clark/compensation/workers
      operations:
      - name: get-compensation
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → workday-compensation-benchmarking-report.yml

Triggers a Power BI dataset refresh for the financial reporting workspace and notifies the finance team via Teams when the refresh completes or fails.

naftiko: '0.5'
info:
  label: Power BI Financial Report Refresh
  description: Triggers a Power BI dataset refresh for the financial reporting workspace and notifies the finance team via Teams when the refresh completes or fails.
  tags:
  - finance
  - analytics
  - reporting
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: refresh-financial-report
      description: Trigger a Power BI dataset refresh for the specified financial reporting workspace and dataset, then notify the finance Teams channel of completion status. Use at period close or on demand.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID containing the financial dataset.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Power BI financial dataset {{dataset_id}} refresh triggered. Refresh ID: {{trigger-refresh.refresh_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-financial-report-refresh.yml

Runs a security vulnerability scan summary across Kimberly-Clark's GitHub repositories using the GitHub Advanced Security API and creates Jira issues for critical findings.

naftiko: '0.5'
info:
  label: GitHub Repository Security Scan Summary
  description: Runs a security vulnerability scan summary across Kimberly-Clark's GitHub repositories using the GitHub Advanced Security API and creates Jira issues for critical findings.
  tags:
  - security
  - devops
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: scan-repo-security
      description: Given a GitHub repository name, retrieve open code scanning alerts at critical or high severity from GitHub Advanced Security and create a Jira security issue for each critical finding. Use for weekly security posture reviews.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository in owner/repo format to scan, e.g. kimberly-clark/digital-platform.
      steps:
      - name: get-alerts
        type: call
        call: github.get-code-scanning-alerts
        with:
          repo: '{{repo_name}}'
          severity: critical
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Security
          summary: 'Critical security alerts in {{repo_name}}: {{get-alerts.count}} findings'
          description: GitHub Advanced Security found {{get-alerts.count}} critical vulnerabilities in {{repo_name}}.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kimberly-clark.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-repository-security-scan-summary.yml

Queries Snowflake for failed or stalled data pipeline tasks, compiles a summary, and opens a ServiceNow incident if any critical jobs are overdue.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Check
  description: Queries Snowflake for failed or stalled data pipeline tasks, compiles a summary, and opens a ServiceNow incident if any critical jobs are overdue.
  tags:
  - data
  - analytics
  - monitoring
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Query Snowflake task execution history for failures or missed schedules in the last N hours. If critical jobs are overdue, open a ServiceNow incident. Use for automated data platform monitoring.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours of task execution history to check, e.g. 6.
      steps:
      - name: get-failed-tasks
        type: call
        call: snowflake.query-task-history
        with:
          hours_back: '{{hours_back}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Snowflake pipeline failures detected in last {{hours_back}} hours
          category: data_platform
          priority: '2'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kimberly-clark.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /statements
      operations:
      - name: query-task-history
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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
Open in Framework → View in Fleet → snowflake-data-pipeline-health-check.yml

Monitors Azure cost management for spend anomalies and, when detected, creates a ServiceNow incident and posts an alert to the cloud FinOps Teams channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Alert
  description: Monitors Azure cost management for spend anomalies and, when detected, creates a ServiceNow incident and posts an alert to the cloud FinOps Teams channel.
  tags:
  - cloud
  - finops
  - cost-management
  - azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID and anomaly detection period, retrieve cost anomalies from Azure Cost Management, open a ServiceNow ticket, and post an alert to the FinOps Teams channel. Invoke on scheduled cost monitoring runs.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to check for cost anomalies.
      - name: period_days
        in: body
        type: integer
        description: Number of days to analyze for anomalies, e.g. 7.
      steps:
      - name: get-anomalies
        type: call
        call: azure-cost.get-anomalies
        with:
          subscription_id: '{{subscription_id}}'
          period_days: '{{period_days}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Azure cost anomaly detected in subscription {{subscription_id}}
          category: cloud_cost
          priority: '3'
      - name: post-alert
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finops_channel_id
          text: 'Cost Anomaly Alert: Azure subscription {{subscription_id}} exceeded expected spend. SNOW: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: anomalies
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/anomalies
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-anomalies
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kimberly-clark.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-alert.yml

Queries Snowflake for consumer demand signals across tissue, diaper, and personal care categories by region.

naftiko: '0.5'
info:
  label: Snowflake Consumer Demand Signal Query
  description: Queries Snowflake for consumer demand signals across tissue, diaper, and personal care categories by region.
  tags:
  - analytics
  - supply-chain
  - snowflake
  - data
capability:
  exposes:
  - type: mcp
    namespace: demand-analytics
    port: 8080
    tools:
    - name: query-demand-signals
      description: Query Snowflake for consumer demand signals including velocity, weeks of supply, and demand trend indicators.
      inputParameters:
      - name: category
        type: string
        description: Product category (e.g., bath-tissue, diapers, fem-care).
      - name: region
        type: string
        description: Market region code.
      call: snowflake.execute-query
      with:
        warehouse: DEMAND_ANALYTICS_WH
        query: SELECT sku, velocity, weeks_of_supply, trend FROM demand_signals WHERE category='{{category}}' AND region='{{region}}'
      outputParameters:
      - name: signals
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kimberlyclark.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-consumer-demand-signal-query.yml

Enriches a new Salesforce lead with product interest data derived from associated Jira feature requests and customer feedback tickets.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment from Jira
  description: Enriches a new Salesforce lead with product interest data derived from associated Jira feature requests and customer feedback tickets.
  tags:
  - sales
  - crm
  - salesforce
  - jira
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-lead-from-jira
      description: Given a Salesforce lead ID and associated Jira customer ticket keys, retrieve Jira ticket details and update the Salesforce lead record with product interest and priority signals. Use for pre-sales intelligence gathering.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      - name: jira_ticket_key
        in: body
        type: string
        description: The Jira ticket key linked to this lead's customer feedback, e.g. CUST-1234.
      steps:
      - name: get-jira-ticket
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{jira_ticket_key}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          product_interest: '{{get-jira-ticket.summary}}'
          priority: '{{get-jira-ticket.priority}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kimberly-clark.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kimberly-clark.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment-from-jira.yml

Triggers the annual performance review cycle in Workday for a specified population, assigns reviewers, and sends reminder notifications via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launch
  description: Triggers the annual performance review cycle in Workday for a specified population, assigns reviewers, and sends reminder notifications via Microsoft Teams.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Given a review cycle name and due date, initiate the Workday performance review process for all eligible employees, and send kick-off reminders to managers via Teams. Use at the start of each annual or mid-year review period.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: Name of the performance review cycle, e.g. 2025 Annual Review.
      - name: due_date
        in: body
        type: string
        description: Deadline for completing reviews in YYYY-MM-DD format.
      steps:
      - name: launch-cycle
        type: call
        call: workday.create-review-cycle
        with:
          name: '{{cycle_name}}'
          dueDate: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Performance review cycle ''{{cycle_name}}'' has launched. Deadline: {{due_date}}. Please complete your reviews in Workday.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-cycles
      path: /kimberly-clark/performanceManagement/reviewCycles
      operations:
      - name: create-review-cycle
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launch.yml

Runs the month-end period close checklist in SAP S/4HANA, verifying that all posting periods are closed and all open items are resolved, then posts a status report to the finance Teams channel.

naftiko: '0.5'
info:
  label: SAP Period Close Checklist
  description: Runs the month-end period close checklist in SAP S/4HANA, verifying that all posting periods are closed and all open items are resolved, then posts a status report to the finance Teams channel.
  tags:
  - finance
  - erp
  - sap
  - period-close
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: period-close
    port: 8080
    tools:
    - name: run-period-close-check
      description: Given a fiscal period and company code, verify SAP S/4HANA posting period status, check for open items, and post a close-readiness report to the finance Teams channel. Use at month-end close.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYYMM format, e.g. 202503.
      - name: company_code
        in: body
        type: string
        description: The SAP company code to check, e.g. 1000.
      steps:
      - name: check-periods
        type: call
        call: sap.get-posting-periods
        with:
          period: '{{fiscal_period}}'
          companyCode: '{{company_code}}'
      - name: get-open-items
        type: call
        call: sap.get-open-items
        with:
          period: '{{fiscal_period}}'
          companyCode: '{{company_code}}'
      - name: post-status
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Period close check for {{fiscal_period}} ({{company_code}}): {{check-periods.status}} | Open items: {{get-open-items.count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kimberly-clark-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPLANDATA_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: posting-periods
      path: /PostingPeriods
      operations:
      - name: get-posting-periods
        method: GET
    - name: open-items
      path: /OpenItems
      operations:
      - name: get-open-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-period-close-checklist.yml

When a new job requisition is approved in Workday Recruiting, creates a corresponding Jira project tracking ticket for the hiring team and notifies the HR channel in Teams.

naftiko: '0.5'
info:
  label: Workday Recruiting Requisition Sync to Jira
  description: When a new job requisition is approved in Workday Recruiting, creates a corresponding Jira project tracking ticket for the hiring team and notifies the HR channel in Teams.
  tags:
  - hr
  - recruiting
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-requisition-to-jira
      description: Given a Workday job requisition ID, retrieve requisition details and create a Jira tracking issue for the hiring team. Notify the HR Teams channel with requisition and Jira details.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Hiring: {{get-requisition.job_title}} ({{get-requisition.department}})'
          description: 'Workday requisition {{requisition_id}} approved. Target hire date: {{get-requisition.target_hire_date}}'
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'New requisition approved: {{get-requisition.job_title}} | Jira: {{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /kimberly-clark/recruiting/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kimberly-clark.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-recruiting-requisition-sync-to-jira.yml

Validates that SAP S/4HANA posting periods are properly closed at month-end by checking open items and period status, then posts a close-readiness summary to the finance Teams channel.

naftiko: '0.5'
info:
  label: SAP Month-End Period Close Validation
  description: Validates that SAP S/4HANA posting periods are properly closed at month-end by checking open items and period status, then posts a close-readiness summary to the finance Teams channel.
  tags:
  - finance
  - erp
  - sap
  - period-close
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: period-close
    port: 8080
    tools:
    - name: validate-period-close
      description: Given a fiscal period and SAP company code, check posting period status and count of open items in SAP S/4HANA, then post a close-readiness report to the finance Teams channel. Use at month-end before final close.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYMM format, e.g. 202503.
      - name: company_code
        in: body
        type: string
        description: The SAP company code, e.g. 1000.
      steps:
      - name: get-period-status
        type: call
        call: sap.get-posting-periods
        with:
          period: '{{fiscal_period}}'
          companyCode: '{{company_code}}'
      - name: get-open-items
        type: call
        call: sap.get-open-items
        with:
          period: '{{fiscal_period}}'
          companyCode: '{{company_code}}'
      - name: post-summary
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Period Close Check {{fiscal_period}} ({{company_code}}): Status={{get-period-status.status}} | Open Items={{get-open-items.count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPLANDATA_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: posting-periods
      path: /PostingPeriods
      operations:
      - name: get-posting-periods
        method: GET
    - name: open-items
      path: /OpenItems
      operations:
      - name: get-open-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-month-end-period-close-validation.yml

Uses Anthropic Claude to review and summarize product marketing claims documents retrieved from SharePoint, checking for regulatory compliance language and flagging ambiguous claims.

naftiko: '0.5'
info:
  label: AI-Assisted Brand Claim Document Review
  description: Uses Anthropic Claude to review and summarize product marketing claims documents retrieved from SharePoint, checking for regulatory compliance language and flagging ambiguous claims.
  tags:
  - ai
  - marketing
  - compliance
  - anthropic
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: ai-compliance
    port: 8080
    tools:
    - name: review-brand-claims
      description: Given a SharePoint document URL for a product marketing claims brief, retrieve the document, send it to Anthropic Claude for compliance review, and write the review summary back to SharePoint. Use before packaging or campaign approvals.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the claims document is stored.
      - name: document_path
        in: body
        type: string
        description: The SharePoint document relative path.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-document
        with:
          site_id: '{{site_id}}'
          path: '{{document_path}}'
      - name: review-claims
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          content: 'Review this product marketing claims document for regulatory compliance. Flag any ambiguous health, nutrition, or comparative claims. Document: {{get-document.content}}'
      - name: write-review
        type: call
        call: sharepoint.create-file
        with:
          site_id: '{{site_id}}'
          filename: claims-review.md
          content: '{{review-claims.text}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: get-document
        method: GET
      - name: create-file
        method: PUT
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-brand-claim-document-review.yml

When a food safety or quality incident is reported via Salesforce Service Cloud, creates a high-priority ServiceNow incident, notifies the quality assurance team, and escalates to the regulatory affairs Teams channel.

naftiko: '0.5'
info:
  label: Food Safety Incident Triage
  description: When a food safety or quality incident is reported via Salesforce Service Cloud, creates a high-priority ServiceNow incident, notifies the quality assurance team, and escalates to the regulatory affairs Teams channel.
  tags:
  - customer-support
  - quality
  - food-safety
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: triage-food-safety-incident
      description: Given a Salesforce Service Cloud case ID flagged as food safety related, retrieve case details, create a P1 ServiceNow incident, and alert the quality assurance and regulatory affairs Teams channels. Use when a consumer complaint or safety report is escalated.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID for the food safety incident.
      - name: severity
        in: body
        type: string
        description: 'Incident severity level: critical, high, or medium.'
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Food Safety Incident: {{get-case.subject}}'
          category: food_safety
          priority: '1'
          description: 'Salesforce Case {{case_id}}: {{get-case.description}}'
      - name: alert-qa-team
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_qa_channel_id
          text: 'FOOD SAFETY INCIDENT: {{get-case.subject}} | Severity: {{severity}} | SNOW: {{create-snow-incident.number}} | SF Case: {{case_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kraft-heinz.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → food-safety-incident-triage.yml

Generates a weekly digest of Kraft Heinz's key retail and foodservice accounts from Salesforce CRM, including open opportunities and recent activity, then posts the summary to the sales leadership Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Health Digest
  description: Generates a weekly digest of Kraft Heinz's key retail and foodservice accounts from Salesforce CRM, including open opportunities and recent activity, then posts the summary to the sales leadership Teams channel.
  tags:
  - sales
  - crm
  - reporting
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crm-reporting
    port: 8080
    tools:
    - name: digest-account-health
      description: Query Salesforce for accounts with recent activity and open opportunities, then post a formatted account health digest to the sales leadership Teams channel. Use for weekly pipeline reviews and customer health monitoring.
      inputParameters:
      - name: days_back
        in: body
        type: integer
        description: Number of days of activity to include, e.g. 7 for a weekly digest.
      steps:
      - name: get-accounts
        type: call
        call: salesforce.query-accounts
        with:
          days_back: '{{days_back}}'
      - name: post-digest
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'Weekly Account Digest (last {{days_back}} days): {{get-accounts.count}} active accounts with open opportunities.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kraft-heinz.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-customer-account-health-digest.yml

When a Salesforce opportunity closes as Won, creates a corresponding SAP S/4HANA sales order and notifies the account team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Sales Order Sync
  description: When a Salesforce opportunity closes as Won, creates a corresponding SAP S/4HANA sales order and notifies the account team in Microsoft Teams.
  tags:
  - sales
  - crm
  - erp
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crm-erp-sync
    port: 8080
    tools:
    - name: sync-opportunity-to-order
      description: Given a Salesforce opportunity ID for a Closed Won deal, retrieve account and opportunity data, create a SAP S/4HANA sales order, and notify the account team in Teams. Use when a deal is marked Closed Won in Salesforce.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The 18-character Salesforce opportunity record ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-order
        type: call
        call: sap.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_sap_id}}'
          amount: '{{get-opportunity.amount}}'
          currency: '{{get-opportunity.currency_code}}'
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: SAP Order {{create-sap-order.order_number}} created for opportunity {{opportunity_id}} ({{get-opportunity.name}}).
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kraft-heinz.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kraft-heinz-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
      operations:
      - name: create-sales-order
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-sap-sales-order-sync.yml

On a high-severity PagerDuty alert for production systems, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT operations Teams channel.

naftiko: '0.5'
info:
  label: IT Incident Response and PagerDuty Escalation
  description: On a high-severity PagerDuty alert for production systems, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT operations Teams channel.
  tags:
  - itsm
  - incident-response
  - pagerduty
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a PagerDuty alert ID and affected service name, create a P1 ServiceNow incident, trigger an on-call PagerDuty page, and open a war-room Teams message. Invoke on critical production alerts.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The PagerDuty alert ID for the critical production alert.
      - name: service_name
        in: body
        type: string
        description: The name of the affected production service.
      - name: alert_summary
        in: body
        type: string
        description: A brief description of the alert condition.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          priority: '1'
          short_description: 'P1: {{alert_summary}} in {{service_name}}'
          category: production_outage
      - name: trigger-page
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Incident: {{alert_summary}}'
          service_id: $secrets.pagerduty_service_id
          body_details: 'SNOW: {{create-snow-incident.number}}'
      - name: open-war-room
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'P1 INCIDENT: {{alert_summary}} | Service: {{service_name}} | SNOW: {{create-snow-incident.number}} | PD: {{trigger-page.incident_key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incidents
      path: /incidents
      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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → it-incident-response-and-pagerduty-escalation.yml

Retrieves Facebook and Instagram campaign performance metrics from Meta Graph API and posts a weekly brand performance digest to the social media marketing Teams channel.

naftiko: '0.5'
info:
  label: Meta Social Campaign Performance Digest
  description: Retrieves Facebook and Instagram campaign performance metrics from Meta Graph API and posts a weekly brand performance digest to the social media marketing Teams channel.
  tags:
  - marketing
  - social
  - meta
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: digest-meta-campaign-performance
      description: Given a Meta ad account ID and date range, retrieve campaign impressions, clicks, and ROAS from Meta Graph API and post a performance digest to the social media Teams channel. Use for weekly brand performance reviews.
      inputParameters:
      - name: ad_account_id
        in: body
        type: string
        description: The Meta ad account ID in act_XXXXXXXXX format.
      - name: start_date
        in: body
        type: string
        description: Reporting period start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Reporting period end date in YYYY-MM-DD format.
      steps:
      - name: get-campaign-insights
        type: call
        call: meta.get-ad-insights
        with:
          ad_account_id: '{{ad_account_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_social_channel_id
          text: 'Meta Campaign Digest {{start_date}}-{{end_date}}: {{get-campaign-insights.impressions}} impressions | {{get-campaign-insights.clicks}} clicks'
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: ad-insights
      path: /{{ad_account_id}}/insights
      inputParameters:
      - name: ad_account_id
        in: path
      operations:
      - name: get-ad-insights
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → meta-social-campaign-performance-digest.yml

Audits Snowflake query history for excessive credit consumption and long-running queries, posts a governance summary to the data platform Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Data Governance Query Audit
  description: Audits Snowflake query history for excessive credit consumption and long-running queries, posts a governance summary to the data platform Teams channel.
  tags:
  - data
  - governance
  - snowflake
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: audit-snowflake-queries
      description: Query Snowflake execution history for queries exceeding cost or duration thresholds and post a governance report to the data platform Teams channel. Use for daily FinOps and data platform cost management.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours of query history to audit, e.g. 24.
      - name: threshold_seconds
        in: body
        type: integer
        description: Query execution time in seconds above which queries are flagged.
      steps:
      - name: query-history
        type: call
        call: snowflake.query-history
        with:
          hours_back: '{{hours_back}}'
      - name: post-report
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_data_channel_id
          text: 'Snowflake Governance Report (last {{hours_back}}h): {{query-history.flagged_count}} queries exceeded {{threshold_seconds}}s.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kraft-heinz.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /statements
      operations:
      - name: query-history
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-governance-query-audit.yml

When a new job requisition is approved in Workday Recruiting, creates a Jira tracking issue for the hiring team and posts a notification to the HR Teams channel.

naftiko: '0.5'
info:
  label: Workday Job Requisition to Jira Tracker Sync
  description: When a new job requisition is approved in Workday Recruiting, creates a Jira tracking issue for the hiring team and posts a notification to the HR Teams channel.
  tags:
  - hr
  - recruiting
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-requisition-to-jira
      description: Given a Workday job requisition ID, retrieve requisition details and create a Jira task for the hiring team. Notify the HR Teams channel with a summary. Invoke when a job requisition is approved in Workday.
      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: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Hire: {{get-requisition.job_title}} — {{get-requisition.department}}'
          description: 'Workday requisition {{requisition_id}}. Target: {{get-requisition.target_hire_date}}'
      - name: notify-hr
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'New req approved: {{get-requisition.job_title}} | Jira: {{create-jira-task.key}}'
  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: /kraft-heinz/recruiting/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kraft-heinz.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-job-requisition-to-jira-tracker-sync.yml

When an employee termination is recorded in Workday, disables the Microsoft 365 account, clears Okta sessions, and closes all open ServiceNow tickets assigned to the departing employee.

naftiko: '0.5'
info:
  label: Employee Offboarding and Access Revocation
  description: When an employee termination is recorded in Workday, disables the Microsoft 365 account, clears Okta sessions, and closes all open ServiceNow tickets assigned to the departing employee.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID for a terminating employee, disable their Microsoft 365 account, revoke all Okta sessions, and close their open ServiceNow tickets. Invoke on confirmed termination events from Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: disable-m365
        type: call
        call: msgraph.disable-user
        with:
          user_id: '{{get-worker.work_email}}'
      - name: revoke-okta-sessions
        type: call
        call: okta.clear-sessions
        with:
          login: '{{get-worker.work_email}}'
      - name: close-snow-tickets
        type: call
        call: servicenow.close-tickets
        with:
          assigned_to: '{{get-worker.work_email}}'
  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: /kraft-heinz/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://kraft-heinz.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-sessions
      path: /users/{{login}}/sessions
      inputParameters:
      - name: login
        in: path
      operations:
      - name: clear-sessions
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: close-tickets
        method: PATCH
Open in Framework → View in Fleet → employee-offboarding-and-access-revocation.yml

Queries SAP S/4HANA for current production order status and inventory levels, then writes a demand-sensing snapshot to Snowflake for supply chain analytics and forecasting.

naftiko: '0.5'
info:
  label: Supply Chain Demand Sensing Snapshot
  description: Queries SAP S/4HANA for current production order status and inventory levels, then writes a demand-sensing snapshot to Snowflake for supply chain analytics and forecasting.
  tags:
  - supply-chain
  - manufacturing
  - sap
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: capture-demand-snapshot
      description: Pull production order status and stock levels for a given SAP plant from S/4HANA and write a timestamped demand snapshot to Snowflake for downstream forecasting models. Use for daily supply chain data ingestion.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code to snapshot, e.g. KH01 for Chicago manufacturing.
      steps:
      - name: get-production-orders
        type: call
        call: sap.get-production-orders
        with:
          plant: '{{plant_code}}'
      - name: get-stock-levels
        type: call
        call: sap.get-stock-levels
        with:
          plant: '{{plant_code}}'
      - name: write-snapshot
        type: call
        call: snowflake.insert-snapshot
        with:
          plant: '{{plant_code}}'
          orders: '{{get-production-orders.results}}'
          stock: '{{get-stock-levels.results}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDERS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder
      operations:
      - name: get-production-orders
        method: GET
    - name: stock-levels
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock-levels
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kraft-heinz.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-snapshot
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-sensing-snapshot.yml

Retrieves sprint completion metrics from Jira for engineering teams and posts a weekly delivery performance summary to the technology leadership Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity and Delivery Report
  description: Retrieves sprint completion metrics from Jira for engineering teams and posts a weekly delivery performance summary to the technology leadership Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engineering-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity
      description: Given a Jira project key and sprint ID, retrieve sprint velocity metrics (completed vs. committed points) and post a delivery summary to the technology leadership Teams channel. Use for weekly engineering stand-ups and sprint retrospectives.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key, e.g. ENG.
      - name: sprint_id
        in: body
        type: integer
        description: The Jira sprint ID to report on.
      steps:
      - name: get-sprint
        type: call
        call: jira.get-sprint
        with:
          sprint_id: '{{sprint_id}}'
      - name: post-summary
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_tech_channel_id
          text: 'Sprint {{sprint_id}} ({{project_key}}): {{get-sprint.completed_points}} of {{get-sprint.committed_points}} story points completed.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kraft-heinz.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{sprint_id}}/sprint/{{sprint_id}}/report
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-and-delivery-report.yml

Creates and tracks IT infrastructure change requests in ServiceNow, assigns them to the change advisory board, and sends approval reminders via Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Lifecycle Management
  description: Creates and tracks IT infrastructure change requests in ServiceNow, assigns them to the change advisory board, and sends approval reminders via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: create-change-request
      description: Given a change description, risk level, and planned implementation window, create a ServiceNow change request and notify the change advisory board in Teams. Use before any production infrastructure modification.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the planned change and business justification.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: implementation_window
        in: body
        type: string
        description: Planned maintenance window in ISO 8601 format.
      steps:
      - name: create-cr
        type: call
        call: servicenow.create-change-request
        with:
          short_description: '{{change_description}}'
          risk: '{{risk_level}}'
          start_date: '{{implementation_window}}'
      - name: notify-cab
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_cab_channel_id
          text: 'New Change Request {{create-cr.number}} ({{risk_level}} risk) requires CAB review: {{change_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      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: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-lifecycle-management.yml

Retrieves supplier performance scores from SAP Ariba Supplier Risk, cross-references with open POs in SAP S/4HANA, and escalates high-risk suppliers to the procurement team via Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Risk Assessment
  description: Retrieves supplier performance scores from SAP Ariba Supplier Risk, cross-references with open POs in SAP S/4HANA, and escalates high-risk suppliers to the procurement team via Teams.
  tags:
  - procurement
  - sap-ariba
  - sap
  - supplier-risk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: Given a supplier ID, retrieve their risk score from SAP Ariba Supplier Risk and check for open purchase orders in SAP S/4HANA. If risk score exceeds threshold, notify the procurement Teams channel. Use for quarterly supplier risk reviews.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID to assess.
      steps:
      - name: get-risk-score
        type: call
        call: ariba.get-supplier-risk
        with:
          supplier_id: '{{supplier_id}}'
      - name: get-open-pos
        type: call
        call: sap.get-supplier-pos
        with:
          supplier_id: '{{supplier_id}}'
      - name: notify-procurement
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_procurement_channel_id
          text: 'Supplier Risk Alert: {{supplier_id}} | Risk Score: {{get-risk-score.score}} | Open POs: {{get-open-pos.count}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplierRisk/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: supplier-risk
      path: /suppliers/{{supplier_id}}/riskScore
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier-risk
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kraft-heinz-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
      operations:
      - name: get-supplier-pos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-risk-assessment.yml

Triggers a Power BI dataset refresh for the trade spend and promotional analytics workspace and notifies the commercial finance team via Teams on completion.

naftiko: '0.5'
info:
  label: Power BI Trade Spend Analytics Refresh
  description: Triggers a Power BI dataset refresh for the trade spend and promotional analytics workspace and notifies the commercial finance team via Teams on completion.
  tags:
  - finance
  - analytics
  - power-bi
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-analytics
    port: 8080
    tools:
    - name: refresh-trade-spend-report
      description: Trigger a Power BI dataset refresh for the trade spend analytics workspace and dataset, then post a completion notification to the commercial finance Teams channel. Use at the start of each promotional planning cycle or on demand.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the trade spend dataset.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Trade Spend dataset {{dataset_id}} refresh triggered. Refresh ID: {{trigger-refresh.refresh_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → power-bi-trade-spend-analytics-refresh.yml

When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access entitlements and notifies the IT security team.

naftiko: '0.5'
info:
  label: Okta Role-Based Access Provisioning
  description: When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access entitlements and notifies the IT security team.
  tags:
  - identity
  - security
  - hr
  - okta
  - workday
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: sync-role-access
      description: Given a Workday employee ID and new job profile, update the employee's Okta group memberships to reflect the new role's access entitlements. Notify the security team in Teams. Invoke on Workday role change events.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role changed.
      - name: new_role
        in: body
        type: string
        description: The new job profile or role name as defined in Workday.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-okta-user
        type: call
        call: okta.get-user
        with:
          login: '{{get-worker.work_email}}'
      - name: update-groups
        type: call
        call: okta.add-user-to-group
        with:
          user_id: '{{get-okta-user.id}}'
          profile: '{{new_role}}'
  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: /kraft-heinz/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://kraft-heinz.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
    - name: user-groups
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
Open in Framework → View in Fleet → okta-role-based-access-provisioning.yml

Monitors Snowflake task execution for the consumer analytics and demand-sensing pipelines, creates a ServiceNow incident if jobs fail, and alerts the data team via Teams.

naftiko: '0.5'
info:
  label: Snowflake Consumer Analytics Pipeline Monitor
  description: Monitors Snowflake task execution for the consumer analytics and demand-sensing pipelines, creates a ServiceNow incident if jobs fail, and alerts the data team via Teams.
  tags:
  - data
  - analytics
  - snowflake
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-analytics-pipelines
      description: Query Snowflake task history for failures in the consumer analytics and demand-sensing data pipelines over the last N hours. Open a ServiceNow incident and alert the data team if critical jobs have failed.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours of task execution history to check, e.g. 6.
      steps:
      - name: get-failed-tasks
        type: call
        call: snowflake.query-task-history
        with:
          hours_back: '{{hours_back}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Snowflake pipeline failures in last {{hours_back}} hours
          category: data_platform
          priority: '2'
      - name: notify-data-team
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_data_channel_id
          text: 'Snowflake pipeline failures detected over last {{hours_back}}h. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kraft-heinz.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /statements
      operations:
      - name: query-task-history
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-consumer-analytics-pipeline-monitor.yml

Retrieves expense reports from SAP Concur that exceed policy thresholds, creates ServiceNow approval tasks for finance review, and notifies the AP team via Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel and Expense Policy Audit
  description: Retrieves expense reports from SAP Concur that exceed policy thresholds, creates ServiceNow approval tasks for finance review, and notifies the AP team via Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-reports
      description: Retrieve submitted expense reports from SAP Concur exceeding the policy spending threshold and create ServiceNow approval tasks for AP review. Run nightly or before period close.
      inputParameters:
      - name: threshold_amount
        in: body
        type: number
        description: Dollar threshold above which expense reports require additional approval.
      - name: report_date
        in: body
        type: string
        description: Date filter for submitted reports in YYYY-MM-DD format.
      steps:
      - name: get-reports
        type: call
        call: concur.list-expense-reports
        with:
          submitDateAfter: '{{report_date}}'
      - name: create-review-tasks
        type: call
        call: servicenow.create-approval
        with:
          short_description: Expense reports exceeding ${{threshold_amount}} pending review
          category: expense_audit
      - name: notify-ap
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_ap_channel_id
          text: 'Expense audit complete: reports exceeding ${{threshold_amount}} have been queued for AP review in ServiceNow.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports
      operations:
      - name: list-expense-reports
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-and-expense-policy-audit.yml

When a supplier invoice is submitted in SAP Ariba, validates it against the matching SAP S/4HANA purchase order and routes exceptions to the accounts payable team via Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Invoice Validation and Routing
  description: When a supplier invoice is submitted in SAP Ariba, validates it against the matching SAP S/4HANA purchase order and routes exceptions to the accounts payable team via Teams.
  tags:
  - finance
  - procurement
  - sap-ariba
  - sap
  - invoice
  - approval
capability:
  exposes:
  - type: mcp
    namespace: invoice-ops
    port: 8080
    tools:
    - name: validate-and-route-invoice
      description: Given an Ariba invoice ID and associated PO number, retrieve invoice details from SAP Ariba, compare with the SAP S/4HANA PO, and alert the AP team via Teams if discrepancies exceed tolerance. Use for three-way match validation.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice document ID.
      - name: po_number
        in: body
        type: string
        description: The associated SAP purchase order number.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: notify-ap
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_ap_channel_id
          text: 'Invoice {{invoice_id}} requires review. Invoiced: {{get-invoice.total_amount}} | PO Amount: {{get-po.total_value}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kraft-heinz-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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-invoice-validation-and-routing.yml

Initiates the annual performance review cycle in Workday for all eligible Kraft Heinz employees and sends a kickoff reminder to managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Initiation
  description: Initiates the annual performance review cycle in Workday for all eligible Kraft Heinz employees and sends a kickoff reminder to managers via Microsoft Teams.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Given a review cycle name and due date, start the Workday performance review process and send reminder messages to all managers via Teams. Use at the beginning of each performance review period.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: Name of the performance cycle, e.g. 2025 Annual Review.
      - name: due_date
        in: body
        type: string
        description: Review completion deadline in YYYY-MM-DD format.
      steps:
      - name: start-cycle
        type: call
        call: workday.create-review-cycle
        with:
          name: '{{cycle_name}}'
          dueDate: '{{due_date}}'
      - name: notify-hr
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Performance Review ''{{cycle_name}}'' has launched in Workday. Deadline: {{due_date}}. Please complete reviews before the deadline.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-cycles
      path: /kraft-heinz/performanceManagement/reviewCycles
      operations:
      - name: create-review-cycle
        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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-initiation.yml

On a Datadog critical monitor trigger for Kraft Heinz digital commerce or manufacturing systems, creates a ServiceNow incident and posts a triage summary to the ops Teams channel.

naftiko: '0.5'
info:
  label: Datadog Production Monitoring Alert Handler
  description: On a Datadog critical monitor trigger for Kraft Heinz digital commerce or manufacturing systems, creates a ServiceNow incident and posts a triage summary to the ops Teams channel.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-datadog-alert
      description: Given a Datadog alert ID and monitor name, retrieve event details, open a ServiceNow incident, and post a triage message to the ops Teams channel. Invoke when Datadog fires a critical alert on production systems.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog event or alert ID.
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name that fired the alert.
      steps:
      - name: get-event
        type: call
        call: datadog.get-event
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Datadog Alert: {{monitor_name}}'
          category: monitoring
          priority: '2'
      - name: post-triage
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_ops_channel_id
          text: 'Datadog Alert: {{monitor_name}} | SNOW: {{create-incident.number}} | Event: {{alert_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kraft-heinz.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-production-monitoring-alert-handler.yml

Scans a GitHub repository for critical code vulnerabilities using GitHub Advanced Security and creates Jira issues for each critical finding, notifying the security team via Teams.

naftiko: '0.5'
info:
  label: GitHub Code Security Scan and Jira Triage
  description: Scans a GitHub repository for critical code vulnerabilities using GitHub Advanced Security and creates Jira issues for each critical finding, notifying the security team via Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: scan-and-triage-vulnerabilities
      description: Given a GitHub repository, retrieve critical and high-severity code scanning alerts from GitHub Advanced Security, create a Jira security tracking issue, and notify the security channel in Teams. Use for weekly vulnerability management.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      steps:
      - name: get-vulnerabilities
        type: call
        call: github.get-code-scanning-alerts
        with:
          repo: '{{repo_name}}'
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Security
          summary: 'Security scan: {{get-vulnerabilities.count}} critical findings in {{repo_name}}'
          description: GitHub Advanced Security found {{get-vulnerabilities.count}} issues in {{repo_name}}.
      - name: notify-security
        type: call
        call: msteams.post-message
        with:
          channel_id: $secrets.teams_security_channel_id
          text: 'Security Scan: {{repo_name}} has {{get-vulnerabilities.count}} critical vulnerabilities. Jira: {{create-jira-issue.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kraft-heinz.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-code-security-scan-and-jira-triage.yml

Gets guide from SharePoint, shares via Box links, notifies via Microsoft Outlook, and tracks in Airtable.

naftiko: '0.5'
info:
  label: Brand Style Guide Pipeline
  description: Gets guide from SharePoint, shares via Box links, notifies via Microsoft Outlook, and tracks in Airtable.
  tags:
  - brand
  - sharepoint
  - box
  - microsoft-outlook
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: brand-style-guide-pipeline
    port: 8080
    tools:
    - name: execute
      description: Gets guide from SharePoint, shares via Box links, notifies via Microsoft Outlook, and tracks in Airtable.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sharepoint.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: box.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: microsoft-outlook.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: airtable.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://api.sharepoint.com/v1
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v1
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → brand-style-guide-pipeline.yml

When launching a new LEGO set, creates the product master in SAP, sets up a Salesforce marketing campaign, configures Google Tag Manager tracking, publishes to BigCommerce, and announces to the team via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Set Launch Pipeline
  description: When launching a new LEGO set, creates the product master in SAP, sets up a Salesforce marketing campaign, configures Google Tag Manager tracking, publishes to BigCommerce, and announces to the team via Microsoft Teams.
  tags:
  - product-design
  - e-commerce
  - sap
  - salesforce
  - google-tag-manager
  - bigcommerce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: launch-new-set
      description: Given set details, create product master, marketing campaign, e-commerce listing, and notify the team.
      inputParameters:
      - name: set_name
        in: body
        type: string
        description: The LEGO set name.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: theme
        in: body
        type: string
        description: The product theme (e.g., Star Wars, City, Technic).
      - name: launch_date
        in: body
        type: string
        description: The launch date in YYYY-MM-DD format.
      - name: retail_price
        in: body
        type: string
        description: The retail price.
      steps:
      - name: create-master
        type: call
        call: sap.create-material
        with:
          material_number: '{{material_number}}'
          description: '{{set_name}}'
          theme: '{{theme}}'
          price: '{{retail_price}}'
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Launch: {{set_name}}'
          theme: '{{theme}}'
          start_date: '{{launch_date}}'
      - name: setup-tracking
        type: call
        call: gtm.create-tag
        with:
          tag_name: '{{set_name}}_launch'
          product_id: '{{material_number}}'
      - name: create-listing
        type: call
        call: bigcommerce.create-product
        with:
          name: '{{set_name}}'
          sku: '{{material_number}}'
          price: '{{retail_price}}'
          categories: '{{theme}}'
      - name: announce
        type: call
        call: msteams.send-message
        with:
          channel_id: product-launches
          text: 'New set launch: {{set_name}} ({{theme}}) on {{launch_date}}. Price: ${{retail_price}}. SAP: {{material_number}}. E-commerce listing: {{create-listing.product_url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.gtm_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags
      operations:
      - name: create-tag
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: create-product
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-set-launch-pipeline.yml

Creates campaign in Facebook, syncs audience from Salesforce, uploads creatives from Box, and tracks in Google Sheets.

naftiko: '0.5'
info:
  label: Facebook Ad Campaign Pipeline
  description: Creates campaign in Facebook, syncs audience from Salesforce, uploads creatives from Box, and tracks in Google Sheets.
  tags:
  - advertising
  - facebook
  - salesforce
  - box
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: facebook-ad-campaign-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates campaign in Facebook, syncs audience from Salesforce, uploads creatives from Box, and tracks in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: facebook.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: facebook
    baseUri: https://api.facebook.com/v1
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → facebook-ad-campaign-pipeline.yml

Gets Figma design, routes Asana approval, archives in Box, and updates SAP metadata.

naftiko: '0.5'
info:
  label: Packaging Review Pipeline
  description: Gets Figma design, routes Asana approval, archives in Box, and updates SAP metadata.
  tags:
  - packaging
  - figma
  - asana
  - box
  - sap
capability:
  exposes:
  - type: mcp
    namespace: packaging-review-pipeline
    port: 8080
    tools:
    - name: execute
      description: Gets Figma design, routes Asana approval, archives in Box, and updates SAP metadata.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: figma.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: asana.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: sap.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: asana
    baseUri: https://api.asana.com/v1
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → packaging-review-pipeline.yml

Gets employee from Workday, provisions Azure AD, creates ServiceNow request, and sends welcome via Microsoft Outlook.

naftiko: '0.5'
info:
  label: New Hire Provisioning Pipeline
  description: Gets employee from Workday, provisions Azure AD, creates ServiceNow request, and sends welcome via Microsoft Outlook.
  tags:
  - it
  - workday
  - azure-active-directory
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: new-hire-provisioning-pipeline
    port: 8080
    tools:
    - name: execute
      description: Gets employee from Workday, provisions Azure AD, creates ServiceNow request, and sends welcome via Microsoft Outlook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: workday.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: azure-active-directory.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: servicenow.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-outlook.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-active-directory
    baseUri: https://api.azureactivedirectory.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_active_directory_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → new-hire-provisioning-pipeline.yml

Retrieves LEGO.com website engagement metrics from Google Analytics.

naftiko: '0.5'
info:
  label: Google Analytics Website Metrics
  description: Retrieves LEGO.com website engagement metrics from Google Analytics.
  tags:
  - analytics
  - e-commerce
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-website-metrics
      description: Retrieve website metrics from Google Analytics for a date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: google-analytics.get-report
      with:
        property_id: lego-dotcom
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: conversion_rate
        type: string
        mapping: $.rows[0].metricValues[1].value
  consumes:
  - type: http
    namespace: google-analytics
    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
Open in Framework → View in Fleet → google-analytics-website-metrics.yml

Detects carts in BigCommerce, sends MailChimp recovery emails, logs in Snowflake, and tracks in Google Analytics.

naftiko: '0.5'
info:
  label: E-Commerce Cart Recovery Pipeline
  description: Detects carts in BigCommerce, sends MailChimp recovery emails, logs in Snowflake, and tracks in Google Analytics.
  tags:
  - e-commerce
  - bigcommerce
  - mailchimp
  - snowflake
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-cart-recovery-pipeline
    port: 8080
    tools:
    - name: execute
      description: Detects carts in BigCommerce, sends MailChimp recovery emails, logs in Snowflake, and tracks in Google Analytics.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: bigcommerce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: mailchimp.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: snowflake.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-analytics.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → e-commerce-cart-recovery-pipeline.yml

Retrieves LEGO set roadmap entries from Airtable.

naftiko: '0.5'
info:
  label: Airtable Set Roadmap Lookup
  description: Retrieves LEGO set roadmap entries from Airtable.
  tags:
  - product
  - airtable
capability:
  exposes:
  - type: mcp
    namespace: airtable-roadmap
    port: 8080
    tools:
    - name: get-data
      description: Retrieves LEGO set roadmap entries from Airtable.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: airtable-roadmap.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: airtable-roadmap
    baseUri: https://api.airtable.com/v0/appLego
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → airtable-set-roadmap-lookup.yml

Creates product in SAP, publishes to BigCommerce, notifies retailers via Salesforce, and promotes on Instagram.

naftiko: '0.5'
info:
  label: New Set Retail Distribution Pipeline
  description: Creates product in SAP, publishes to BigCommerce, notifies retailers via Salesforce, and promotes on Instagram.
  tags:
  - product
  - sap
  - bigcommerce
  - salesforce
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: new-set-retail-distribution-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates product in SAP, publishes to BigCommerce, notifies retailers via Salesforce, and promotes on Instagram.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: bigcommerce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: salesforce.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: instagram.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://api.instagram.com/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → new-set-retail-distribution-pipeline.yml

Triggers Azure DevOps build, publishes release notes to Confluence, notifies via Slack, and updates BigCommerce.

naftiko: '0.5'
info:
  label: Digital Experience Release Pipeline
  description: Triggers Azure DevOps build, publishes release notes to Confluence, notifies via Slack, and updates BigCommerce.
  tags:
  - digital
  - azure-devops
  - confluence
  - slack
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: digital-experience-release-pipeline
    port: 8080
    tools:
    - name: execute
      description: Triggers Azure DevOps build, publishes release notes to Confluence, notifies via Slack, and updates BigCommerce.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: azure-devops.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: confluence.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: bigcommerce.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: azure-devops
    baseUri: https://api.azuredevops.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://api.confluence.com/v1
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → digital-experience-release-pipeline.yml

Enrolls in Salesforce, creates Stripe record, triggers MailChimp welcome, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Customer Loyalty Enrollment Pipeline
  description: Enrolls in Salesforce, creates Stripe record, triggers MailChimp welcome, and logs in Snowflake.
  tags:
  - loyalty
  - salesforce
  - stripe
  - mailchimp
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-loyalty-enrollment-pipeline
    port: 8080
    tools:
    - name: execute
      description: Enrolls in Salesforce, creates Stripe record, triggers MailChimp welcome, and logs in Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: stripe.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: mailchimp.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → customer-loyalty-enrollment-pipeline.yml

Queries retail partner performance data from Teradata.

naftiko: '0.5'
info:
  label: Teradata Retail Data Query
  description: Queries retail partner performance data from Teradata.
  tags:
  - analytics
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: teradata-retail
    port: 8080
    tools:
    - name: get-data
      description: Queries retail partner performance data from Teradata.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: teradata-retail.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: teradata-retail
    baseUri: https://lego.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → teradata-retail-data-query.yml

Creates and sends a VIP insider newsletter via MailChimp to LEGO fans.

naftiko: '0.5'
info:
  label: MailChimp VIP Newsletter Campaign
  description: Creates and sends a VIP insider newsletter via MailChimp to LEGO fans.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: send-vip-newsletter
      description: Create and send a MailChimp VIP newsletter campaign.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: subject
        in: body
        type: string
        description: The email subject line.
      - name: template_id
        in: body
        type: string
        description: The email template ID.
      call: mailchimp.create-campaign
      with:
        name: '{{campaign_name}}'
        list_id: vip-insiders
        template_id: '{{template_id}}'
        subject: '{{subject}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-vip-newsletter-campaign.yml

When a licensing agreement is submitted in Salesforce, validates terms, creates a legal review in ServiceNow, stores the contract in SharePoint, and notifies the licensing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Licensing Agreement Approval Pipeline
  description: When a licensing agreement is submitted in Salesforce, validates terms, creates a legal review in ServiceNow, stores the contract in SharePoint, and notifies the licensing team via Microsoft Teams.
  tags:
  - licensing
  - legal
  - salesforce
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: licensing-agreements
    port: 8080
    tools:
    - name: process-licensing-agreement
      description: Given a licensing agreement ID, validate terms, create legal review, and notify the team.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: The Salesforce licensing agreement ID.
      - name: partner_name
        in: body
        type: string
        description: The licensing partner name.
      steps:
      - name: get-agreement
        type: call
        call: salesforce.get-agreement
        with:
          agreement_id: '{{agreement_id}}'
      - name: create-review
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Legal review: Licensing agreement with {{partner_name}}'
          category: legal_review
          description: 'Agreement ID: {{agreement_id}}. Partner: {{partner_name}}. Terms: {{get-agreement.terms_summary}}.'
      - name: store-contract
        type: call
        call: sharepoint.upload-file
        with:
          site_id: legal-docs
          folder_path: LicensingAgreements/{{partner_name}}
          file_name: agreement_{{agreement_id}}.pdf
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: licensing
          text: 'Licensing agreement {{agreement_id}} with {{partner_name}} submitted for review. Legal case: {{create-review.number}}. Contract stored: {{store-contract.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: agreements
      path: /sobjects/LicensingAgreement__c/{{agreement_id}}
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-agreement
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://lego.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - 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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → licensing-agreement-approval-pipeline.yml

Creates promotion in SAP, publishes to BigCommerce, sends MailChimp campaign, and tracks in Google Sheets.

naftiko: '0.5'
info:
  label: Seasonal Promotion Pipeline
  description: Creates promotion in SAP, publishes to BigCommerce, sends MailChimp campaign, and tracks in Google Sheets.
  tags:
  - promotions
  - sap
  - bigcommerce
  - mailchimp
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: seasonal-promotion-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates promotion in SAP, publishes to BigCommerce, sends MailChimp campaign, and tracks in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: bigcommerce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: mailchimp.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → seasonal-promotion-pipeline.yml

Updates a product listing on BigCommerce with new pricing, description, or availability.

naftiko: '0.5'
info:
  label: BigCommerce Product Listing Update
  description: Updates a product listing on BigCommerce with new pricing, description, or availability.
  tags:
  - e-commerce
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-management
    port: 8080
    tools:
    - name: update-product-listing
      description: Update a BigCommerce product listing.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The BigCommerce product ID.
      - name: price
        in: body
        type: string
        description: The new price.
      - name: availability
        in: body
        type: string
        description: The availability status.
      call: bigcommerce.update-product
      with:
        product_id: '{{product_id}}'
        price: '{{price}}'
        availability: '{{availability}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: update-product
        method: PUT
Open in Framework → View in Fleet → bigcommerce-product-listing-update.yml

Queries aggregated LEGO set sales data from Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Set Sales Query
  description: Queries aggregated LEGO set sales data from Snowflake.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-sales
    port: 8080
    tools:
    - name: get-data
      description: Queries aggregated LEGO set sales data from Snowflake.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: snowflake-sales.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-sales
    baseUri: https://lego.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → snowflake-set-sales-query.yml

Retrieves a Zendesk support ticket by ID.

naftiko: '0.5'
info:
  label: Zendesk Customer Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID.
  tags:
  - customer-service
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: customer-support
    port: 8080
    tools:
    - name: get-support-ticket
      description: Look up a Zendesk support ticket by ticket ID.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.ticket.subject
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://lego.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-customer-support-ticket-lookup.yml

Archives a legal document to Box in the licensing compliance folder.

naftiko: '0.5'
info:
  label: Box Legal Document Archive
  description: Archives a legal document to Box in the licensing compliance folder.
  tags:
  - licensing
  - legal
  - box
capability:
  exposes:
  - type: mcp
    namespace: legal-archive
    port: 8080
    tools:
    - name: archive-document
      description: Upload a legal document to Box.
      inputParameters:
      - name: file_name
        in: body
        type: string
        description: The document file name.
      - name: folder_id
        in: body
        type: string
        description: The Box target folder ID.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
  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
Open in Framework → View in Fleet → box-legal-document-archive.yml

Schedules maintenance in SAP, creates ServiceNow work order, notifies plant team via Slack, and updates Google Sheets.

naftiko: '0.5'
info:
  label: Mold Maintenance Scheduling Pipeline
  description: Schedules maintenance in SAP, creates ServiceNow work order, notifies plant team via Slack, and updates Google Sheets.
  tags:
  - manufacturing
  - sap
  - servicenow
  - slack
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: mold-maintenance-scheduling-pipeline
    port: 8080
    tools:
    - name: execute
      description: Schedules maintenance in SAP, creates ServiceNow work order, notifies plant team via Slack, and updates Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: servicenow.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://api.servicenow.com/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → mold-maintenance-scheduling-pipeline.yml

Retrieves a Tableau dashboard embed URL for retail performance analytics.

naftiko: '0.5'
info:
  label: Tableau Retail Performance Dashboard
  description: Retrieves a Tableau dashboard embed URL for retail performance analytics.
  tags:
  - analytics
  - retail
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: retail-dashboards
    port: 8080
    tools:
    - name: get-retail-dashboard
      description: Retrieve the embed URL for a Tableau retail performance dashboard.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: embed_url
        type: string
        mapping: $.workbook.contentUrl
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://lego-tableau.online/api/3.14
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: query
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-retail-performance-dashboard.yml

Enrolls collectors in Salesforce, provisions rewards in Stripe, triggers MailChimp welcome series, and tracks engagement in Snowflake.

naftiko: '0.5'
info:
  label: Minifigure Collector Program Pipeline
  description: Enrolls collectors in Salesforce, provisions rewards in Stripe, triggers MailChimp welcome series, and tracks engagement in Snowflake.
  tags:
  - loyalty
  - salesforce
  - stripe
  - mailchimp
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: minifigure-collector
    port: 8080
    tools:
    - name: execute
      description: Orchestrate minifigure collector program across Salesforce, Stripe, MailChimp, and Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The collector email.
      - name: context
        in: body
        type: string
        description: Additional context.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: stripe.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: mailchimp.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → minifigure-collector-program-pipeline.yml

Analyzes SAP inventory, optimizes in Snowflake, refreshes Power BI, and alerts via Slack.

naftiko: '0.5'
info:
  label: Warehouse Optimization Pipeline
  description: Analyzes SAP inventory, optimizes in Snowflake, refreshes Power BI, and alerts via Slack.
  tags:
  - logistics
  - sap
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: warehouse-optimization-pipeline
    port: 8080
    tools:
    - name: execute
      description: Analyzes SAP inventory, optimizes in Snowflake, refreshes Power BI, and alerts via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: power-bi.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → warehouse-optimization-pipeline.yml

Pulls from Google Search Console, updates BigCommerce, and reports via Google Sheets.

naftiko: '0.5'
info:
  label: SEO Optimization Pipeline
  description: Pulls from Google Search Console, updates BigCommerce, and reports via Google Sheets.
  tags:
  - seo
  - google-search-console
  - bigcommerce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: seo-optimization-pipeline
    port: 8080
    tools:
    - name: execute
      description: Pulls from Google Search Console, updates BigCommerce, and reports via Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: google-search-console.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: bigcommerce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: google-search-console
    baseUri: https://api.googlesearchconsole.com/v1
    authentication:
      type: bearer
      token: $secrets.google_search_console_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → seo-optimization-pipeline.yml

Retrieves design project status from Asana.

naftiko: '0.5'
info:
  label: Asana Design Project Lookup
  description: Retrieves design project status from Asana.
  tags:
  - project-management
  - asana
capability:
  exposes:
  - type: mcp
    namespace: asana-design
    port: 8080
    tools:
    - name: get-data
      description: Retrieves design project status from Asana.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: asana-design.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: asana-design
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → asana-design-project-lookup.yml

Retrieves a Figma packaging design file by key.

naftiko: '0.5'
info:
  label: Figma Set Packaging Lookup
  description: Retrieves a Figma packaging design file by key.
  tags:
  - design
  - figma
capability:
  exposes:
  - type: mcp
    namespace: figma-packaging
    port: 8080
    tools:
    - name: get-data
      description: Retrieves a Figma packaging design file by key.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: figma-packaging.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: figma-packaging
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → figma-set-packaging-lookup.yml

When a production run completes, retrieves mold quality data from SAP, analyzes defect rates in Azure Databricks, stores the report in SharePoint, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Mold Quality Pipeline
  description: When a production run completes, retrieves mold quality data from SAP, analyzes defect rates in Azure Databricks, stores the report in SharePoint, and notifies the quality team via Microsoft Teams.
  tags:
  - manufacturing
  - quality-control
  - sap
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mold-quality
    port: 8080
    tools:
    - name: analyze-mold-quality
      description: Given a production run ID, analyze mold quality metrics and notify the team.
      inputParameters:
      - name: production_run_id
        in: body
        type: string
        description: The SAP production run identifier.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: get-quality-data
        type: call
        call: sap.get-production-quality
        with:
          run_id: '{{production_run_id}}'
          plant: '{{plant_code}}'
      - name: analyze-defects
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM mold_defect_analysis WHERE run_id = '{{production_run_id}}'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: quality-docs
          folder_path: MoldQuality/{{plant_code}}/{{production_run_id}}
          file_name: quality_report.pdf
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-assurance
          text: 'Mold quality report for run {{production_run_id}} at {{plant_code}}: Defect rate: {{analyze-defects.defect_rate}}%. Top defect: {{analyze-defects.top_defect}}. Report: {{store-report.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality
      path: /ProductionQuality(RunId='{{run_id}}',Plant='{{plant}}')
      inputParameters:
      - name: run_id
        in: path
      - name: plant
        in: path
      operations:
      - name: get-production-quality
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://lego-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - 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:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - 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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-mold-quality-pipeline.yml

Retrieves e-commerce platform health from New Relic.

naftiko: '0.5'
info:
  label: New Relic E-Commerce Health Lookup
  description: Retrieves e-commerce platform health from New Relic.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: newrelic-ecom
    port: 8080
    tools:
    - name: get-data
      description: Retrieves e-commerce platform health from New Relic.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: newrelic-ecom.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: newrelic-ecom
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → new-relic-e-commerce-health-lookup.yml

Creates case in Salesforce, generates documents in SharePoint, assigns Jira review, and notifies via Microsoft Teams.

naftiko: '0.5'
info:
  label: Patent Coordination Pipeline
  description: Creates case in Salesforce, generates documents in SharePoint, assigns Jira review, and notifies via Microsoft Teams.
  tags:
  - legal
  - salesforce
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patent-coordination-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates case in Salesforce, generates documents in SharePoint, assigns Jira review, and notifies via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: sharepoint.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: jira.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://api.sharepoint.com/v1
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: jira
    baseUri: https://api.jira.com/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → patent-coordination-pipeline.yml

Aggregates community content from Snowflake, curates newsletter in MailChimp, tracks engagement in Google Analytics, and reports in Google Sheets.

naftiko: '0.5'
info:
  label: Adult Fan Community Newsletter Pipeline
  description: Aggregates community content from Snowflake, curates newsletter in MailChimp, tracks engagement in Google Analytics, and reports in Google Sheets.
  tags:
  - community
  - snowflake
  - mailchimp
  - google-analytics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: afol-newsletter
    port: 8080
    tools:
    - name: execute
      description: Orchestrate adult fan community newsletter across Snowflake, MailChimp, Google Analytics, and Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The newsletter edition ID.
      - name: context
        in: body
        type: string
        description: Additional context.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: mailchimp.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-analytics.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → adult-fan-community-newsletter-pipeline.yml

Validates batch in SAP quality, creates inspection report in Confluence, updates tracker in Airtable, and notifies via Slack.

naftiko: '0.5'
info:
  label: Brick Quality Control Pipeline
  description: Validates batch in SAP quality, creates inspection report in Confluence, updates tracker in Airtable, and notifies via Slack.
  tags:
  - quality
  - sap
  - confluence
  - airtable
  - slack
capability:
  exposes:
  - type: mcp
    namespace: brick-quality-control-pipeline
    port: 8080
    tools:
    - name: execute
      description: Validates batch in SAP quality, creates inspection report in Confluence, updates tracker in Airtable, and notifies via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: confluence.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: airtable.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://api.confluence.com/v1
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v1
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → brick-quality-control-pipeline.yml

Retrieves quality inspection results from SAP for brick batches.

naftiko: '0.5'
info:
  label: SAP Quality Inspection Lookup
  description: Retrieves quality inspection results from SAP for brick batches.
  tags:
  - quality
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap-quality
    port: 8080
    tools:
    - name: get-data
      description: Retrieves quality inspection results from SAP for brick batches.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sap-quality.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sap-quality
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/ZQUALITY_SRV
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → sap-quality-inspection-lookup.yml

Retrieves production order details from SAP for brick manufacturing.

naftiko: '0.5'
info:
  label: SAP Production Order Lookup
  description: Retrieves production order details from SAP for brick manufacturing.
  tags:
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap-prodorders
    port: 8080
    tools:
    - name: get-data
      description: Retrieves production order details from SAP for brick manufacturing.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sap-prodorders.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sap-prodorders
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/ZPRODORDER_SRV
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → sap-production-order-lookup.yml

Searches Google Drive for product design assets and creative files.

naftiko: '0.5'
info:
  label: Google Drive Design Asset Search
  description: Searches Google Drive for product design assets and creative files.
  tags:
  - product-design
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: design-assets
    port: 8080
    tools:
    - name: search-design-assets
      description: Search Google Drive for design assets.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: google-drive.search-files
      with:
        query: name contains '{{keyword}}'
      outputParameters:
      - name: files
        type: string
        mapping: $.files
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-design-asset-search.yml

Collects from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Customer Feedback Pipeline
  description: Collects from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.
  tags:
  - feedback
  - zendesk
  - azure-machine-learning
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: customer-feedback-pipeline
    port: 8080
    tools:
    - name: execute
      description: Collects from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: zendesk.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: azure-machine-learning.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: snowflake.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: confluence.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://api.zendesk.com/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-machine-learning
    baseUri: https://api.azuremachinelearning.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_machine_learning_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://api.confluence.com/v1
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → customer-feedback-pipeline.yml

When a LEGO.com order is placed, creates a delivery in SAP, updates BigCommerce order status, and sends a shipping confirmation via MailChimp.

naftiko: '0.5'
info:
  label: E-Commerce Fulfillment Pipeline
  description: When a LEGO.com order is placed, creates a delivery in SAP, updates BigCommerce order status, and sends a shipping confirmation via MailChimp.
  tags:
  - e-commerce
  - fulfillment
  - sap
  - bigcommerce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: fulfill-order
      description: Given an order, create delivery, update status, and send confirmation.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-delivery
        type: call
        call: sap.create-delivery
        with:
          order_id: '{{order_id}}'
          items: '{{get-order.products}}'
      - name: update-status
        type: call
        call: bigcommerce.update-order
        with:
          order_id: '{{order_id}}'
          status: shipped
          tracking: '{{create-delivery.tracking_number}}'
      - name: send-confirmation
        type: call
        call: mailchimp.send-transactional
        with:
          template: shipping-confirmation
          recipient: '{{customer_email}}'
          tracking: '{{create-delivery.tracking_number}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
      - name: update-order
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /Deliveries
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: transactional
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → e-commerce-fulfillment-pipeline.yml

Collects consumer feedback from Zendesk, analyzes sentiment in Azure Databricks, creates product improvement tasks in Jira, and shares insights with the design team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Feedback Pipeline
  description: Collects consumer feedback from Zendesk, analyzes sentiment in Azure Databricks, creates product improvement tasks in Jira, and shares insights with the design team via Microsoft Teams.
  tags:
  - product-design
  - customer-feedback
  - zendesk
  - azure-databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer-feedback
    port: 8080
    tools:
    - name: analyze-feedback
      description: Given a product theme and date range, analyze consumer feedback and create improvement tasks.
      inputParameters:
      - name: theme
        in: body
        type: string
        description: The LEGO theme to analyze.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      steps:
      - name: get-tickets
        type: call
        call: zendesk.search-tickets
        with:
          query: type:ticket tags:{{theme}} created>{{start_date}} created<{{end_date}}
      - name: analyze-sentiment
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM feedback_sentiment WHERE theme = '{{theme}}' AND date BETWEEN '{{start_date}}' AND '{{end_date}}'
      - name: create-improvement-task
        type: call
        call: jira.create-issue
        with:
          project: DESIGN
          summary: 'Consumer feedback insights: {{theme}} ({{start_date}} to {{end_date}})'
          description: 'Sentiment score: {{analyze-sentiment.avg_score}}. Top themes: {{analyze-sentiment.top_themes}}. Ticket count: {{get-tickets.count}}.'
      - name: notify-design
        type: call
        call: msteams.send-message
        with:
          channel_id: product-design
          text: 'Consumer feedback for {{theme}}: Avg sentiment: {{analyze-sentiment.avg_score}}. {{get-tickets.count}} tickets analyzed. Improvement task: {{create-improvement-task.key}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://lego.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: search
      path: /search.json?query={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-tickets
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://lego-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://lego.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-feedback-pipeline.yml

Creates vendor in SAP, sets up folder in Box, creates Salesforce account, and sends welcome via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Vendor Onboarding Pipeline
  description: Creates vendor in SAP, sets up folder in Box, creates Salesforce account, and sends welcome via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - box
  - salesforce
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates vendor in SAP, sets up folder in Box, creates Salesforce account, and sends welcome via Microsoft Outlook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: box.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: salesforce.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-outlook.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → vendor-onboarding-pipeline.yml

Retrieves a Jira issue by key from the product design project.

naftiko: '0.5'
info:
  label: Jira Design Task Lookup
  description: Retrieves a Jira issue by key from the product design project.
  tags:
  - product-design
  - jira
capability:
  exposes:
  - type: mcp
    namespace: design-tasks
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - type: http
    namespace: jira
    baseUri: https://lego.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-design-task-lookup.yml

Retrieves Qlik Sense inventory analytics dashboard status.

naftiko: '0.5'
info:
  label: Qlik Sense Inventory Analytics
  description: Retrieves Qlik Sense inventory analytics dashboard status.
  tags:
  - analytics
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik-inventory
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Qlik Sense inventory analytics dashboard status.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: qlik-inventory.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: qlik-inventory
    baseUri: https://lego.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → qlik-sense-inventory-analytics.yml

Syncs merchandise from SAP, updates ticketing in Salesforce, promotes on Instagram, and tracks in Google Analytics.

naftiko: '0.5'
info:
  label: Theme Park Integration Pipeline
  description: Syncs merchandise from SAP, updates ticketing in Salesforce, promotes on Instagram, and tracks in Google Analytics.
  tags:
  - entertainment
  - sap
  - salesforce
  - instagram
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: theme-park-integration-pipeline
    port: 8080
    tools:
    - name: execute
      description: Syncs merchandise from SAP, updates ticketing in Salesforce, promotes on Instagram, and tracks in Google Analytics.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: instagram.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-analytics.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://api.instagram.com/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → theme-park-integration-pipeline.yml

Retrieves DocuSign licensing agreement envelope status.

naftiko: '0.5'
info:
  label: DocuSign Licensing Agreement Lookup
  description: Retrieves DocuSign licensing agreement envelope status.
  tags:
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: docusign-licenses
    port: 8080
    tools:
    - name: get-data
      description: Retrieves DocuSign licensing agreement envelope status.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: docusign-licenses.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: docusign-licenses
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/lego
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → docusign-licensing-agreement-lookup.yml

Creates partner in Salesforce, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Licensing Partner Onboarding Pipeline
  description: Creates partner in Salesforce, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.
  tags:
  - licensing
  - salesforce
  - docusign
  - box
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: licensing-partner-onboarding-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates partner in Salesforce, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: docusign.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: box.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-outlook.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://api.docusign.com/v1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/v1
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → licensing-partner-onboarding-pipeline.yml

Retrieves employee benefits enrollment from Workday.

naftiko: '0.5'
info:
  label: Workday Employee Benefits Lookup
  description: Retrieves employee benefits enrollment from Workday.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday-benefits
    port: 8080
    tools:
    - name: get-data
      description: Retrieves employee benefits enrollment from Workday.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: workday-benefits.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: workday-benefits
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/lego
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → workday-employee-benefits-lookup.yml

Collects production data from SAP, analyzes in Snowflake, updates Power BI dashboards, and alerts plant managers via Slack.

naftiko: '0.5'
info:
  label: Manufacturing Efficiency Pipeline
  description: Collects production data from SAP, analyzes in Snowflake, updates Power BI dashboards, and alerts plant managers via Slack.
  tags:
  - manufacturing
  - sap
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-efficiency-pipeline
    port: 8080
    tools:
    - name: execute
      description: Collects production data from SAP, analyzes in Snowflake, updates Power BI dashboards, and alerts plant managers via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: power-bi.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → manufacturing-efficiency-pipeline.yml

Identifies VIPs in Snowflake, creates segments in Salesforce, triggers MailChimp campaigns, and tracks in Google Sheets.

naftiko: '0.5'
info:
  label: VIP Collector Engagement Pipeline
  description: Identifies VIPs in Snowflake, creates segments in Salesforce, triggers MailChimp campaigns, and tracks in Google Sheets.
  tags:
  - loyalty
  - snowflake
  - salesforce
  - mailchimp
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: vip-collector-engagement-pipeline
    port: 8080
    tools:
    - name: execute
      description: Identifies VIPs in Snowflake, creates segments in Salesforce, triggers MailChimp campaigns, and tracks in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: mailchimp.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://api.mailchimp.com/v1
    authentication:
      type: bearer
      token: $secrets.mailchimp_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → vip-collector-engagement-pipeline.yml

Processes return via Zendesk, initiates Stripe refund, updates SAP inventory, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Customer Returns Pipeline
  description: Processes return via Zendesk, initiates Stripe refund, updates SAP inventory, and logs in Snowflake.
  tags:
  - returns
  - zendesk
  - stripe
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-returns-pipeline
    port: 8080
    tools:
    - name: execute
      description: Processes return via Zendesk, initiates Stripe refund, updates SAP inventory, and logs in Snowflake.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: zendesk.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: stripe.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: sap.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: snowflake.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://api.zendesk.com/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → customer-returns-pipeline.yml

Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets.

naftiko: '0.5'
info:
  label: Digital Marketing Pipeline
  description: Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets.
  tags:
  - marketing
  - hubspot
  - facebook
  - google-analytics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: digital-marketing-pipeline
    port: 8080
    tools:
    - name: execute
      description: Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: hubspot.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: facebook.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-analytics.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubspot.com/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://api.facebook.com/v1
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://api.googleanalytics.com/v1
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → digital-marketing-pipeline.yml

Retrieves Power BI sales KPI dashboard refresh status.

naftiko: '0.5'
info:
  label: Power BI Sales KPI Report
  description: Retrieves Power BI sales KPI dashboard refresh status.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: powerbi-sales
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Power BI sales KPI dashboard refresh status.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: powerbi-sales.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: powerbi-sales
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → power-bi-sales-kpi-report.yml

Generates instructions from design data, uploads to Amazon S3, publishes to BigCommerce, and notifies via Slack.

naftiko: '0.5'
info:
  label: Building Instruction Publishing Pipeline
  description: Generates instructions from design data, uploads to Amazon S3, publishes to BigCommerce, and notifies via Slack.
  tags:
  - content
  - amazon-s3
  - bigcommerce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: building-instruction-publishing-pipeline
    port: 8080
    tools:
    - name: execute
      description: Generates instructions from design data, uploads to Amazon S3, publishes to BigCommerce, and notifies via Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: amazon-s3.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: bigcommerce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: slack.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: slack.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: amazon-s3
    baseUri: https://api.amazons3.com/v1
    authentication:
      type: bearer
      token: $secrets.amazon_s3_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/v1
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: slack
    baseUri: https://api.slack.com/v1
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → building-instruction-publishing-pipeline.yml

Publishes a LEGO product video to YouTube, creates a social post linking to it on Instagram, and tracks engagement in Google Analytics.

naftiko: '0.5'
info:
  label: YouTube Brand Content Publishing Pipeline
  description: Publishes a LEGO product video to YouTube, creates a social post linking to it on Instagram, and tracks engagement in Google Analytics.
  tags:
  - marketing
  - youtube
  - instagram
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: video-marketing
    port: 8080
    tools:
    - name: publish-video-campaign
      description: Given video details, publish to YouTube, cross-promote on Instagram, and set up tracking.
      inputParameters:
      - name: video_title
        in: body
        type: string
        description: The video title.
      - name: description
        in: body
        type: string
        description: The video description.
      - name: theme
        in: body
        type: string
        description: The LEGO theme.
      steps:
      - name: upload-video
        type: call
        call: youtube.upload-video
        with:
          title: '{{video_title}}'
          description: '{{description}}'
          tags: LEGO,{{theme}}
      - name: cross-promote
        type: call
        call: instagram.create-post
        with:
          caption: 'New video: {{video_title}}! Watch now on our YouTube channel. #LEGO #{{theme}}'
      - name: setup-tracking
        type: call
        call: google-analytics.create-event
        with:
          event_name: video_launch_{{theme}}
          video_id: '{{upload-video.video_id}}'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: videos
      path: /videos?part=snippet,status
      operations:
      - name: upload-video
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: posts
      path: /{{ig_user_id}}/media
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://www.google-analytics.com
    authentication:
      type: apikey
      key: $secrets.ga_measurement_id
    resources:
    - name: events
      path: /mp/collect
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → youtube-brand-content-publishing-pipeline.yml

Collects feedback from Zendesk, analyzes via Azure ML, shares insights in Confluence, and posts updates to Instagram.

naftiko: '0.5'
info:
  label: Fan Community Engagement Pipeline
  description: Collects feedback from Zendesk, analyzes via Azure ML, shares insights in Confluence, and posts updates to Instagram.
  tags:
  - community
  - zendesk
  - azure-machine-learning
  - confluence
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: fan-community-engagement-pipeline
    port: 8080
    tools:
    - name: execute
      description: Collects feedback from Zendesk, analyzes via Azure ML, shares insights in Confluence, and posts updates to Instagram.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: zendesk.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: azure-machine-learning.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: confluence.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: instagram.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://api.zendesk.com/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: azure-machine-learning
    baseUri: https://api.azuremachinelearning.com/v1
    authentication:
      type: bearer
      token: $secrets.azure_machine_learning_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://api.confluence.com/v1
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://api.instagram.com/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → fan-community-engagement-pipeline.yml

Retrieves a LEGO.com order from Salesforce Commerce by order ID, returning status, total, and shipping details.

naftiko: '0.5'
info:
  label: E-Commerce Order Status Lookup
  description: Retrieves a LEGO.com order from Salesforce Commerce by order ID, returning status, total, and shipping details.
  tags:
  - e-commerce
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce
    port: 8080
    tools:
    - name: get-order-status
      description: Look up a LEGO.com order by order ID.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The order ID.
      call: salesforce.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: total
        type: string
        mapping: $.TotalAmount
      - name: shipping_status
        type: string
        mapping: $.ShippingStatus__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → e-commerce-order-status-lookup.yml

Retrieves Salesforce retailer account details by ID.

naftiko: '0.5'
info:
  label: Salesforce Retailer Account Lookup
  description: Retrieves Salesforce retailer account details by ID.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sf-retailers
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Salesforce retailer account details by ID.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sf-retailers.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sf-retailers
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → salesforce-retailer-account-lookup.yml

Creates a corporate content post on LinkedIn and logs it in Salesforce.

naftiko: '0.5'
info:
  label: LinkedIn Corporate Content Post
  description: Creates a corporate content post on LinkedIn and logs it in Salesforce.
  tags:
  - marketing
  - linkedin
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: corporate-social
    port: 8080
    tools:
    - name: post-corporate-content
      description: Create a LinkedIn post and log it in Salesforce.
      inputParameters:
      - name: content_text
        in: body
        type: string
        description: The post content text.
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      steps:
      - name: create-post
        type: call
        call: linkedin.create-post
        with:
          text: '{{content_text}}'
      - name: log-post
        type: call
        call: salesforce.create-activity
        with:
          campaign_id: '{{campaign_id}}'
          platform: linkedin
          post_id: '{{create-post.post_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/CampaignActivity__c
      operations:
      - name: create-activity
        method: POST
Open in Framework → View in Fleet → linkedin-corporate-content-post.yml

Pulls licensing revenue data from SAP, enriches with partner performance from Salesforce, generates a report in Google Sheets, and shares with the licensing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Licensing Partner Revenue Pipeline
  description: Pulls licensing revenue data from SAP, enriches with partner performance from Salesforce, generates a report in Google Sheets, and shares with the licensing team via Microsoft Teams.
  tags:
  - licensing
  - revenue
  - sap
  - salesforce
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: licensing-revenue
    port: 8080
    tools:
    - name: generate-licensing-report
      description: Given a partner and period, generate a licensing revenue report.
      inputParameters:
      - name: partner_id
        in: body
        type: string
        description: The licensing partner ID.
      - name: period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: get-revenue
        type: call
        call: sap.get-licensing-revenue
        with:
          partner_id: '{{partner_id}}'
          period: '{{period}}'
      - name: get-partner-data
        type: call
        call: salesforce.get-partner-account
        with:
          partner_id: '{{partner_id}}'
      - name: create-report
        type: call
        call: google-sheets.create-spreadsheet
        with:
          title: Licensing Revenue - {{get-partner-data.partner_name}} - {{period}}
          data: '{{get-revenue.results}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: licensing
          text: 'Licensing revenue report for {{get-partner-data.partner_name}} ({{period}}): Total royalties: ${{get-revenue.total_royalties}}. Report: {{create-report.spreadsheet_url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/FI_REVENUE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: licensing-revenue
      path: /LicensingRevenue?$filter=PartnerId eq '{{partner_id}}' and Period eq '{{period}}'
      inputParameters:
      - name: partner_id
        in: query
      - name: period
        in: query
      operations:
      - name: get-licensing-revenue
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://lego.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: partners
      path: /sobjects/Account/{{partner_id}}
      inputParameters:
      - name: partner_id
        in: path
      operations:
      - name: get-partner-account
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → licensing-partner-revenue-pipeline.yml

Matches SAP invoices, validates Salesforce contracts, processes payments, and logs in Google Sheets.

naftiko: '0.5'
info:
  label: Vendor Invoice Pipeline
  description: Matches SAP invoices, validates Salesforce contracts, processes payments, and logs in Google Sheets.
  tags:
  - finance
  - sap
  - salesforce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: vendor-invoice-pipeline
    port: 8080
    tools:
    - name: execute
      description: Matches SAP invoices, validates Salesforce contracts, processes payments, and logs in Google Sheets.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: salesforce.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: google-sheets.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://api.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → vendor-invoice-pipeline.yml

Retrieves Tableau retail analytics dashboard view.

naftiko: '0.5'
info:
  label: Tableau Retail Analytics Lookup
  description: Retrieves Tableau retail analytics dashboard view.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-retail
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Tableau retail analytics dashboard view.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: tableau-retail.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: tableau-retail
    baseUri: https://tableau.lego.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → tableau-retail-analytics-lookup.yml

Retrieves brick inventory levels from SAP by material number.

naftiko: '0.5'
info:
  label: SAP Material Inventory Lookup
  description: Retrieves brick inventory levels from SAP by material number.
  tags:
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap-inventory
    port: 8080
    tools:
    - name: get-data
      description: Retrieves brick inventory levels from SAP by material number.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The lookup identifier.
      call: sap-inventory.get-data
      with:
        id: '{{query_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: sap-inventory
    baseUri: https://lego-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: data
      path: /{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → sap-material-inventory-lookup.yml

Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Supplier Performance Pipeline
  description: Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook.
  tags:
  - procurement
  - sap
  - snowflake
  - google-sheets
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: supplier-performance-pipeline
    port: 8080
    tools:
    - name: execute
      description: Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: sap.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: snowflake.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: google-sheets.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-outlook.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://api.sap.com/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://api.snowflake.com/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://api.googlesheets.com/v1
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-outlook
    baseUri: https://api.microsoftoutlook.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_outlook_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → supplier-performance-pipeline.yml

Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams.

naftiko: '0.5'
info:
  label: YouTube Content Pipeline
  description: Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams.
  tags:
  - content
  - youtube
  - hubspot
  - airtable
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: youtube-content-pipeline
    port: 8080
    tools:
    - name: execute
      description: Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: context
        in: body
        type: string
        description: Additional context parameter.
      steps:
      - name: step-1
        type: call
        call: youtube.execute-step-1
        with:
          input: '{{input_id}}'
          context: '{{context}}'
      - name: step-2
        type: call
        call: hubspot.execute-step-2
        with:
          data: '{{step-1.result}}'
      - name: step-3
        type: call
        call: airtable.execute-step-3
        with:
          data: '{{step-2.result}}'
      - name: step-4
        type: call
        call: microsoft-teams.execute-step-4
        with:
          data: '{{step-3.result}}'
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://api.youtube.com/v1
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubspot.com/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v1
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: microsoft-teams
    baseUri: https://api.microsoftteams.com/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: resources
      path: /{{id}}
      operations:
      - name: execute
        method: POST
Open in Framework → View in Fleet → youtube-content-pipeline.yml

Routes a customer complaint from Zendesk to a quality investigation by looking up the product batch in SAP, creating a Jira investigation ticket, and updating the Zendesk ticket.

naftiko: '0.5'
info:
  label: Customer Complaint to Quality Investigation
  description: Routes a customer complaint from Zendesk to a quality investigation by looking up the product batch in SAP, creating a Jira investigation ticket, and updating the Zendesk ticket.
  tags:
  - quality
  - customer-service
  - zendesk
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: complaint-quality
    port: 8080
    tools:
    - name: route-complaint-to-quality
      description: Route a customer complaint to the quality team by tracing the product batch and creating an investigation ticket.
      inputParameters:
      - name: ticket_id
        type: string
        description: Zendesk complaint ticket ID.
      - name: batch_number
        type: string
        description: Product batch number from the complaint.
      - name: material_number
        type: string
        description: Product material number.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: trace-batch
        type: call
        call: sap.get-batch
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: QUAL
          issuetype: Bug
          summary: 'Customer complaint investigation: batch {{batch_number}}'
          description: 'Complaint: {{get-ticket.subject}}. Batch produced at {{trace-batch.plant}} on {{trace-batch.production_date}}.'
      - name: update-ticket
        type: call
        call: zendesk.update-ticket
        with:
          ticket_id: '{{ticket_id}}'
          comment: 'Quality investigation opened: {{create-investigation.key}}. Our quality team is reviewing batch {{batch_number}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://loreal.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
      - name: update-ticket
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → customer-complaint-to-quality-investigation.yml

Pulls demand forecast data from Snowflake, checks current inventory in SAP, and creates or adjusts planned production orders to meet projected demand.

naftiko: '0.5'
info:
  label: Demand Forecast to Production Planning Sync
  description: Pulls demand forecast data from Snowflake, checks current inventory in SAP, and creates or adjusts planned production orders to meet projected demand.
  tags:
  - supply-chain
  - manufacturing
  - snowflake
  - sap
  - planning
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: sync-demand-to-production
      description: Synchronize demand forecasts with production planning by querying forecast data, checking inventory, and creating planned orders in SAP.
      inputParameters:
      - name: product_category
        type: string
        description: Product category for demand forecast.
      - name: planning_horizon_weeks
        type: number
        description: Number of weeks for the planning horizon.
      - name: plant_code
        type: string
        description: SAP plant code.
      steps:
      - name: get-forecast
        type: call
        call: snowflake.execute-query
        with:
          warehouse: DEMAND_PLANNING_WH
          query: SELECT sku, forecasted_units FROM demand_forecast WHERE category='{{product_category}}' AND weeks_ahead<={{planning_horizon_weeks}}
      - name: check-inventory
        type: call
        call: sap.get-plant-stock
        with:
          plant: '{{plant_code}}'
          category: '{{product_category}}'
      - name: create-planned-orders
        type: call
        call: sap.create-planned-order
        with:
          plant: '{{plant_code}}'
          forecast_data: '{{get-forecast.data}}'
          current_stock: '{{check-inventory.stock_levels}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-plant-stock
        method: GET
    - name: planned-orders
      path: /A_PlannedOrder
      operations:
      - name: create-planned-order
        method: POST
Open in Framework → View in Fleet → demand-forecast-to-production-planning-sync.yml

Coordinates brand ambassador events by creating a Salesforce campaign, setting up attendee registration in Google Forms, and notifying event coordinators via Teams.

naftiko: '0.5'
info:
  label: Brand Ambassador Event Coordinator
  description: Coordinates brand ambassador events by creating a Salesforce campaign, setting up attendee registration in Google Forms, and notifying event coordinators via Teams.
  tags:
  - marketing
  - events
  - salesforce
  - google-forms
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: event-management
    port: 8080
    tools:
    - name: coordinate-ambassador-event
      description: Coordinate a brand ambassador event by setting up campaign tracking, registration, and team notification.
      inputParameters:
      - name: event_name
        type: string
        description: Name of the event.
      - name: brand
        type: string
        description: Brand name.
      - name: event_date
        type: string
        description: Event date.
      - name: location
        type: string
        description: Event location.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          Name: '{{event_name}}'
          Type: Ambassador Event
          Brand__c: '{{brand}}'
          StartDate: '{{event_date}}'
      - name: notify-coordinators
        type: call
        call: msteams.send-message
        with:
          channel_id: brand-events
          text: 'Event created: {{event_name}} for {{brand}} on {{event_date}} at {{location}}. Campaign ID: {{create-campaign.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-ambassador-event-coordinator.yml

Tracks fragrance stability testing by pulling test schedules from Jira, querying lab results from Snowflake, and storing completed reports in SharePoint.

naftiko: '0.5'
info:
  label: Fragrance Stability Test Tracker
  description: Tracks fragrance stability testing by pulling test schedules from Jira, querying lab results from Snowflake, and storing completed reports in SharePoint.
  tags:
  - r-and-d
  - quality
  - jira
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: rd-stability
    port: 8080
    tools:
    - name: track-stability-test
      description: Track fragrance stability tests by correlating schedules with lab results and archiving reports.
      inputParameters:
      - name: test_id
        type: string
        description: Jira stability test ticket key.
      steps:
      - name: get-schedule
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{test_id}}'
      - name: get-results
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RD_ANALYTICS_WH
          query: SELECT test_point, color_delta, odor_score, viscosity FROM stability_results WHERE test_id='{{test_id}}' ORDER BY test_point
      - name: archive-report
        type: call
        call: sharepoint.upload-file
        with:
          site: rd-stability
          folder: completed-tests
          filename: '{{test_id}}-stability-report.json'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/rd-stability/drive/root:/{{folder}}/{{filename}}:/content
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → fragrance-stability-test-tracker.yml

Queries AWS Cost Explorer for spend anomalies exceeding a threshold and creates a Jira task and a Datadog event to track remediation.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Detection
  description: Queries AWS Cost Explorer for spend anomalies exceeding a threshold and creates a Jira task and a Datadog event to track remediation.
  tags:
  - cloud
  - finops
  - aws
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS account ID and spend threshold, query Cost Explorer for anomalies, create a Jira tracking ticket, and post a Datadog event. Use when automated cost alerts fire.
      inputParameters:
      - name: account_id
        type: string
        description: AWS account ID to check for spend anomalies.
      - name: threshold_usd
        type: number
        description: Anomaly threshold in USD. Anomalies above this value are reported.
      - name: date_from
        type: string
        description: Start date for the cost lookback period in YYYY-MM-DD format.
      steps:
      - name: get-anomalies
        type: call
        call: aws-cost.get-anomalies
        with:
          accountId: '{{account_id}}'
          threshold: '{{threshold_usd}}'
          startDate: '{{date_from}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: CLOUD
          issuetype: Task
          summary: Cost anomaly detected on AWS account {{account_id}}
          description: 'Anomaly details: {{get-anomalies.summary}}'
      - name: post-event
        type: call
        call: datadog.create-event
        with:
          title: 'AWS cost anomaly: {{account_id}}'
          text: 'Threshold {{threshold_usd}} USD exceeded. Jira: {{create-task.key}}'
          alert_type: warning
  consumes:
  - type: http
    namespace: aws-cost
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_cost_explorer_token
    resources:
    - name: anomalies
      path: /GetAnomalies
      operations:
      - name: get-anomalies
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-detection.yml

Analyzes production yield by comparing planned vs actual output in SAP, identifying waste trends in Snowflake, and creating improvement tasks in Jira.

naftiko: '0.5'
info:
  label: SAP Production Yield Analysis
  description: Analyzes production yield by comparing planned vs actual output in SAP, identifying waste trends in Snowflake, and creating improvement tasks in Jira.
  tags:
  - manufacturing
  - quality
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: production-analytics
    port: 8080
    tools:
    - name: analyze-production-yield
      description: Analyze production yield to identify waste and efficiency improvement opportunities.
      inputParameters:
      - name: production_line
        type: string
        description: Production line identifier.
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: period
        type: string
        description: Analysis period in YYYY-MM format.
      steps:
      - name: get-yield-data
        type: call
        call: sap.get-production-confirmations
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
          period: '{{period}}'
      - name: get-waste-trends
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MANUFACTURING_WH
          query: SELECT waste_category, waste_pct, trend FROM production_waste WHERE line='{{production_line}}' AND plant='{{plant_code}}' AND period='{{period}}'
      - name: create-improvement
        type: call
        call: jira.create-issue
        with:
          project_key: MFG
          issuetype: Task
          summary: 'Yield improvement: {{production_line}} at {{plant_code}} ({{period}})'
          description: 'Yield: {{get-yield-data.yield_pct}}%. Top waste: {{get-waste-trends.top_category}} at {{get-waste-trends.top_pct}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: confirmations
      path: /A_ProdnOrdConf2
      operations:
      - name: get-production-confirmations
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-production-yield-analysis.yml

Retrieves e-commerce conversion funnel metrics from Google Analytics for a specific brand property.

naftiko: '0.5'
info:
  label: Google Analytics E-commerce Funnel Report
  description: Retrieves e-commerce conversion funnel metrics from Google Analytics for a specific brand property.
  tags:
  - marketing
  - analytics
  - google-analytics
  - ecommerce
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-ecommerce-funnel
      description: Fetch e-commerce funnel data from Google Analytics including sessions, add-to-cart rate, checkout rate, and purchase conversion rate.
      inputParameters:
      - name: property_id
        type: string
        description: Google Analytics 4 property ID.
      - name: date_from
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.run-report
      with:
        property: '{{property_id}}'
        dateRanges_startDate: '{{date_from}}'
        dateRanges_endDate: '{{date_to}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: add_to_cart_rate
        type: string
        mapping: $.rows[0].metricValues[1].value
      - name: purchase_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}}/runReport
      inputParameters:
      - name: property
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-e-commerce-funnel-report.yml

Triggers a refresh of a Power BI brand sales dashboard dataset and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Brand Sales Dashboard Refresh
  description: Triggers a refresh of a Power BI brand sales dashboard dataset and returns the refresh status.
  tags:
  - analytics
  - reporting
  - power-bi
  - sales
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-brand-dashboard
      description: Trigger a dataset refresh for a Power BI brand sales dashboard and return the resulting refresh status.
      inputParameters:
      - name: dataset_id
        type: string
        description: Power BI dataset ID for the brand sales dashboard.
      call: powerbi.refresh-dataset
      with:
        datasetId: '{{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/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-brand-sales-dashboard-refresh.yml

Generates beauty advisor performance metrics by pulling sales data from Salesforce, attendance from Workday, and refreshing the Power BI performance dashboard.

naftiko: '0.5'
info:
  label: Beauty Advisor Performance Dashboard
  description: Generates beauty advisor performance metrics by pulling sales data from Salesforce, attendance from Workday, and refreshing the Power BI performance dashboard.
  tags:
  - sales
  - hr
  - salesforce
  - workday
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: retail-performance
    port: 8080
    tools:
    - name: generate-advisor-dashboard
      description: Generate beauty advisor performance metrics combining sales achievements with workforce data.
      inputParameters:
      - name: region
        type: string
        description: Sales region code.
      - name: period
        type: string
        description: Reporting period in YYYY-MM format.
      steps:
      - name: get-sales
        type: call
        call: salesforce.get-advisor-sales
        with:
          region: '{{region}}'
          period: '{{period}}'
      - name: get-attendance
        type: call
        call: workday.get-attendance
        with:
          region: '{{region}}'
          period: '{{period}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: beauty-advisor-performance
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: reports
      path: /analytics/reports
      operations:
      - name: get-advisor-sales
        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: attendance
      path: /loreal/attendance
      operations:
      - name: get-attendance
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → beauty-advisor-performance-dashboard.yml

When an employee changes roles in Workday, updates their Okta group assignments, adjusts Microsoft 365 license, and notifies the employee and manager via Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Provisioning
  description: When an employee changes roles in Workday, updates their Okta group assignments, adjusts Microsoft 365 license, and notifies the employee and manager via Teams.
  tags:
  - hr
  - identity
  - workday
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-identity
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID and new role details, update Okta group memberships to reflect the new role, adjust Microsoft 365 license tier, and notify both the employee and their new manager via Teams.
      inputParameters:
      - name: employee_id
        type: string
        description: Workday worker ID.
      - name: new_role
        type: string
        description: New job role or title.
      - name: okta_new_group_id
        type: string
        description: Okta group ID for the new role.
      - name: okta_old_group_id
        type: string
        description: Okta group ID of the previous role to remove.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: remove-old-group
        type: call
        call: okta.remove-user-from-group
        with:
          groupId: '{{okta_old_group_id}}'
          userId: '{{get-worker.work_email}}'
      - name: add-new-group
        type: call
        call: okta.add-user-to-group
        with:
          groupId: '{{okta_new_group_id}}'
          userId: '{{get-worker.work_email}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          text: Your role has been updated to {{new_role}}. System access has been adjusted accordingly.
  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: /loreal/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://loreal.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{groupId}}/users/{{userId}}
      inputParameters:
      - name: groupId
        in: path
      - name: userId
        in: path
      operations:
      - name: remove-user-from-group
        method: DELETE
      - name: add-user-to-group
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-provisioning.yml

Generates workforce diversity metrics by pulling demographic data from Workday, enriching with analytics from Snowflake, and refreshing the Power BI diversity dashboard.

naftiko: '0.5'
info:
  label: Workday Diversity Metrics Report Generator
  description: Generates workforce diversity metrics by pulling demographic data from Workday, enriching with analytics from Snowflake, and refreshing the Power BI diversity dashboard.
  tags:
  - hr
  - analytics
  - workday
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: hr-analytics
    port: 8080
    tools:
    - name: generate-diversity-report
      description: Generate workforce diversity metrics combining HR data with analytics and publishing to the dashboard.
      inputParameters:
      - name: business_unit
        type: string
        description: Business unit for the report.
      - name: period
        type: string
        description: Reporting period in YYYY-QN format.
      steps:
      - name: get-demographics
        type: call
        call: workday.get-demographics
        with:
          business_unit: '{{business_unit}}'
      - name: get-analytics
        type: call
        call: snowflake.execute-query
        with:
          warehouse: HR_ANALYTICS_WH
          query: SELECT gender_pct, ethnicity_pct, leadership_diversity FROM diversity_metrics WHERE bu='{{business_unit}}' AND period='{{period}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: diversity-inclusion-dashboard
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: demographics
      path: /loreal/workers/demographics
      operations:
      - name: get-demographics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → workday-diversity-metrics-report-generator.yml

Fetches engagement metrics for a brand Instagram account over a date range including likes, comments, and follower growth.

naftiko: '0.5'
info:
  label: Instagram Brand Engagement Lookup
  description: Fetches engagement metrics for a brand Instagram account over a date range including likes, comments, and follower growth.
  tags:
  - marketing
  - social
  - instagram
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: get-instagram-engagement
      description: Retrieve Instagram engagement metrics for a brand account including total likes, comments, shares, and follower delta.
      inputParameters:
      - name: account_id
        type: string
        description: Instagram business account ID.
      - name: date_from
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        type: string
        description: End date in YYYY-MM-DD format.
      call: instagram.get-insights
      with:
        ig_user_id: '{{account_id}}'
        since: '{{date_from}}'
        until: '{{date_to}}'
      outputParameters:
      - name: total_likes
        type: string
        mapping: $.data[0].values[0].value
      - name: total_comments
        type: string
        mapping: $.data[1].values[0].value
      - name: follower_count
        type: string
        mapping: $.data[2].values[0].value
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: insights
      path: /{{ig_user_id}}/insights
      inputParameters:
      - name: ig_user_id
        in: path
      - name: since
        in: query
      - name: until
        in: query
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → instagram-brand-engagement-lookup.yml

Creates an intercompany stock transfer in SAP between plants, updates the receiving plant inventory forecast in Snowflake, and notifies both plant teams via Teams.

naftiko: '0.5'
info:
  label: SAP Intercompany Transfer Order Workflow
  description: Creates an intercompany stock transfer in SAP between plants, updates the receiving plant inventory forecast in Snowflake, and notifies both plant teams via Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: intercompany-logistics
    port: 8080
    tools:
    - name: create-intercompany-transfer
      description: Create an intercompany stock transfer between plants, update forecasts, and notify plant teams.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      - name: source_plant
        type: string
        description: Source plant code.
      - name: target_plant
        type: string
        description: Target plant code.
      - name: quantity
        type: number
        description: Transfer quantity.
      steps:
      - name: create-transfer
        type: call
        call: sap.create-stock-transfer
        with:
          material: '{{material_number}}'
          from_plant: '{{source_plant}}'
          to_plant: '{{target_plant}}'
          quantity: '{{quantity}}'
      - name: update-forecast
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SUPPLY_CHAIN_WH
          query: CALL update_plant_forecast('{{target_plant}}', '{{material_number}}', {{quantity}})
      - name: notify-plants
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'Intercompany transfer {{create-transfer.document_number}}: {{quantity}} units of {{material_number}} from {{source_plant}} to {{target_plant}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-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: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-transfer-order-workflow.yml

Coordinates a new market launch by creating Jira epic with subtasks, setting up Salesforce territory records, and notifying the regional team via Teams.

naftiko: '0.5'
info:
  label: New Market Launch Checklist Coordinator
  description: Coordinates a new market launch by creating Jira epic with subtasks, setting up Salesforce territory records, and notifying the regional team via Teams.
  tags:
  - sales
  - marketing
  - jira
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-launch
    port: 8080
    tools:
    - name: coordinate-market-launch
      description: Coordinate the launch of products in a new market by creating project tasks, setting up CRM territories, and notifying regional teams.
      inputParameters:
      - name: market_name
        type: string
        description: Name of the new market (e.g., Vietnam, Colombia).
      - name: brand
        type: string
        description: Brand being launched.
      - name: launch_date
        type: string
        description: Target launch date.
      steps:
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: LAUNCH
          issuetype: Epic
          summary: 'New market launch: {{brand}} in {{market_name}}'
          description: 'Target launch: {{launch_date}}. Brand: {{brand}}.'
      - name: setup-territory
        type: call
        call: salesforce.create-territory
        with:
          Name: '{{market_name}} - {{brand}}'
          Territory_Type__c: New Market
          Launch_Date__c: '{{launch_date}}'
      - name: notify-regional
        type: call
        call: msteams.send-message
        with:
          channel_id: international-launches
          text: 'New market launch initiated: {{brand}} in {{market_name}}. Target: {{launch_date}}. Epic: {{create-epic.key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: territories
      path: /sobjects/Territory__c
      operations:
      - name: create-territory
        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: send-message
        method: POST
Open in Framework → View in Fleet → new-market-launch-checklist-coordinator.yml

On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog event marker, and alerts the engineering Teams channel.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Response
  description: On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog event marker, and alerts the engineering Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event, create a Jira bug in the engineering project, post a Datadog deployment event, and alert the engineering Teams channel with full context.
      inputParameters:
      - name: repo
        type: string
        description: GitHub repository full name (org/repo).
      - name: branch
        type: string
        description: Branch name where the failure occurred.
      - name: workflow_run_id
        type: string
        description: GitHub Actions workflow run ID.
      - name: commit_sha
        type: string
        description: Git commit SHA that triggered the pipeline.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}}'
          description: Workflow run {{workflow_run_id}} failed on commit {{commit_sha}}
      - name: post-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI failure: {{repo}}'
          text: 'Branch {{branch}} pipeline failed. Jira: {{create-bug.key}}'
          alert_type: error
      - name: alert-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: engineering-alerts
          text: 'Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{workflow_run_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/engineering/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-response.yml

Creates a new job requisition in Workday when a headcount request is approved and opens the corresponding Jira ticket for the recruiting team.

naftiko: '0.5'
info:
  label: Workday Open Position Requisition
  description: Creates a new job requisition in Workday when a headcount request is approved and opens the corresponding Jira ticket for the recruiting team.
  tags:
  - hr
  - recruiting
  - workday
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: open-job-requisition
      description: Given headcount request details, create a job requisition in Workday Recruiting and open a Jira ticket in the TA board to track sourcing progress.
      inputParameters:
      - name: job_title
        type: string
        description: Job title for the open position.
      - name: department
        type: string
        description: Department requesting the headcount.
      - name: hiring_manager_id
        type: string
        description: Workday worker ID of the hiring manager.
      steps:
      - name: create-requisition
        type: call
        call: workday.create-job-requisition
        with:
          jobTitle: '{{job_title}}'
          department: '{{department}}'
          hiringManagerId: '{{hiring_manager_id}}'
      - name: create-ta-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: TA
          issuetype: Task
          summary: 'Recruit for: {{job_title}} ({{department}})'
          description: 'Workday requisition: {{create-requisition.requisitionId}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /loreal/jobRequisitions
      operations:
      - name: create-job-requisition
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-open-position-requisition.yml

When a GitHub release is published, generates AI-assisted release notes using Anthropic Claude and posts them to the engineering Teams channel and Confluence.

naftiko: '0.5'
info:
  label: GitHub Deployment Release Notes
  description: When a GitHub release is published, generates AI-assisted release notes using Anthropic Claude and posts them to the engineering Teams channel and Confluence.
  tags:
  - devops
  - github
  - anthropic
  - confluence
  - release-management
capability:
  exposes:
  - type: mcp
    namespace: release-ops
    port: 8080
    tools:
    - name: publish-release-notes
      description: Given a GitHub release tag and repository, fetch the commit log, generate polished release notes using Anthropic Claude, and publish to Confluence and the engineering Teams channel.
      inputParameters:
      - name: repo_owner
        type: string
        description: GitHub organization or owner name.
      - name: repo_name
        type: string
        description: GitHub repository name.
      - name: tag
        type: string
        description: Release tag name (e.g., v1.4.0).
      - name: teams_channel_id
        type: string
        description: Teams channel ID for engineering announcements.
      steps:
      - name: get-release
        type: call
        call: github.get-release
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          tag: '{{tag}}'
      - name: generate-notes
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Generate professional release notes from these commits: {{get-release.body}}'
      - name: publish-to-confluence
        type: call
        call: confluence.create-page
        with:
          space_key: ENG
          title: Release Notes {{tag}} — {{repo_name}}
          content: '{{generate-notes.content}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Release {{tag}} published for {{repo_name}}. Confluence: {{publish-to-confluence.url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/{{owner}}/{{repo}}/releases/tags/{{tag}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://loreal.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_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/engineering/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-deployment-release-notes.yml

Analyzes customer return patterns by pulling return data from SAP, correlating with quality data in Snowflake, and creating improvement tasks in Jira.

naftiko: '0.5'
info:
  label: SAP Customer Returns Analysis
  description: Analyzes customer return patterns by pulling return data from SAP, correlating with quality data in Snowflake, and creating improvement tasks in Jira.
  tags:
  - quality
  - sales
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: returns-analytics
    port: 8080
    tools:
    - name: analyze-customer-returns
      description: Analyze customer return patterns to identify quality issues and create improvement actions.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      - name: period
        type: string
        description: Analysis period in YYYY-QN format.
      steps:
      - name: get-returns
        type: call
        call: sap.get-return-orders
        with:
          material: '{{material_number}}'
          period: '{{period}}'
      - name: get-quality-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: QUALITY_WH
          query: SELECT return_reason, count, pct_of_sales FROM return_analysis WHERE material='{{material_number}}' AND period='{{period}}'
      - name: create-improvement
        type: call
        call: jira.create-issue
        with:
          project_key: QUAL
          issuetype: Task
          summary: 'Returns analysis: {{material_number}} ({{period}})'
          description: 'Return count: {{get-returns.count}}. Top reason: {{get-quality-data.top_reason}}. Rate: {{get-quality-data.return_rate}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: returns
      path: /A_ReturnsDeliveryHeader
      operations:
      - name: get-return-orders
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-customer-returns-analysis.yml

Syncs Facebook lead gen ad form submissions to Salesforce leads, enriches with ZoomInfo data, and notifies the sales team via Teams.

naftiko: '0.5'
info:
  label: Facebook Ad to Salesforce Lead Sync
  description: Syncs Facebook lead gen ad form submissions to Salesforce leads, enriches with ZoomInfo data, and notifies the sales team via Teams.
  tags:
  - marketing
  - sales
  - facebook
  - salesforce
  - zoominfo
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-management
    port: 8080
    tools:
    - name: sync-fb-leads
      description: Sync Facebook lead ad submissions to Salesforce with enrichment and team notification.
      inputParameters:
      - name: form_id
        type: string
        description: Facebook lead form ID.
      - name: campaign_id
        type: string
        description: Salesforce campaign ID for attribution.
      steps:
      - name: get-leads
        type: call
        call: facebook.get-lead-forms
        with:
          form_id: '{{form_id}}'
      - name: enrich-leads
        type: call
        call: zoominfo.enrich-contact
        with:
          email: '{{get-leads.email}}'
      - name: create-sf-lead
        type: call
        call: salesforce.create-lead
        with:
          Email: '{{get-leads.email}}'
          FirstName: '{{get-leads.first_name}}'
          LastName: '{{get-leads.last_name}}'
          Company: '{{enrich-leads.company}}'
          Title: '{{enrich-leads.title}}'
          CampaignId: '{{campaign_id}}'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-leads
          text: 'New lead from Facebook: {{get-leads.first_name}} {{get-leads.last_name}} at {{enrich-leads.company}}. SF Lead: {{create-sf-lead.id}}.'
  consumes:
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: leads
      path: /{{form_id}}/leads
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: get-lead-forms
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/enrich
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contacts
      path: /contact
      operations:
      - name: enrich-contact
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        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: send-message
        method: POST
Open in Framework → View in Fleet → facebook-ad-to-salesforce-lead-sync.yml

Onboards a new SKU by creating the material master in SAP, setting up the Salesforce product record, and notifying the supply chain team via Teams.

naftiko: '0.5'
info:
  label: New SKU Listing Onboarding Workflow
  description: Onboards a new SKU by creating the material master in SAP, setting up the Salesforce product record, and notifying the supply chain team via Teams.
  tags:
  - supply-chain
  - sales
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sku-management
    port: 8080
    tools:
    - name: onboard-new-sku
      description: Orchestrate the onboarding of a new SKU across ERP, CRM, and notification systems.
      inputParameters:
      - name: sku_name
        type: string
        description: Product name for the new SKU.
      - name: brand
        type: string
        description: Brand name.
      - name: category
        type: string
        description: Product category.
      - name: unit_cost
        type: number
        description: Unit cost in USD.
      steps:
      - name: create-material
        type: call
        call: sap.create-material
        with:
          description: '{{sku_name}}'
          material_group: '{{category}}'
          brand: '{{brand}}'
          standard_price: '{{unit_cost}}'
      - name: create-sf-product
        type: call
        call: salesforce.create-product
        with:
          Name: '{{sku_name}}'
          ProductCode: '{{create-material.material_number}}'
          Family: '{{category}}'
          IsActive: true
      - name: notify-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'New SKU onboarded: {{sku_name}} ({{create-material.material_number}}). Brand: {{brand}}. Category: {{category}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-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
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: products
      path: /sobjects/Product2
      operations:
      - name: create-product
        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: send-message
        method: POST
Open in Framework → View in Fleet → new-sku-listing-onboarding-workflow.yml

Triggers a GitHub Advanced Security scan on a repository, checks Dependabot alerts, and creates Jira issues for critical vulnerabilities.

naftiko: '0.5'
info:
  label: GitHub Repository Security Scan
  description: Triggers a GitHub Advanced Security scan on a repository, checks Dependabot alerts, and creates Jira issues for critical vulnerabilities.
  tags:
  - security
  - devops
  - github
  - jira
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: scan-repo-vulnerabilities
      description: Given a GitHub repository, retrieve critical Dependabot and code scanning alerts, then create Jira security issues for each critical finding. Use during security review cycles or on-demand.
      inputParameters:
      - name: repo_owner
        type: string
        description: GitHub organization or owner name.
      - name: repo_name
        type: string
        description: GitHub repository name.
      steps:
      - name: get-dependabot-alerts
        type: call
        call: github.list-dependabot-alerts
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          severity: critical
      - name: create-security-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: Critical vulnerability in {{repo_owner}}/{{repo_name}}
          description: 'Dependabot alerts: {{get-dependabot-alerts.count}} critical findings. Repo: {{repo_owner}}/{{repo_name}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{owner}}/{{repo}}/dependabot/alerts
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: severity
        in: query
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-repository-security-scan.yml

Creates a plant maintenance order in SAP based on a ServiceNow request, assigns technicians, and notifies the maintenance team via Teams.

naftiko: '0.5'
info:
  label: SAP Maintenance Order Creation Workflow
  description: Creates a plant maintenance order in SAP based on a ServiceNow request, assigns technicians, and notifies the maintenance team via Teams.
  tags:
  - manufacturing
  - operations
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: plant-maintenance
    port: 8080
    tools:
    - name: create-maintenance-order
      description: Create a maintenance order from a ServiceNow request, assign resources, and notify the team.
      inputParameters:
      - name: snow_ticket
        type: string
        description: ServiceNow request number.
      - name: equipment_id
        type: string
        description: SAP equipment ID.
      - name: priority
        type: string
        description: 'Maintenance priority: emergency, high, normal, low.'
      steps:
      - name: get-request
        type: call
        call: servicenow.get-request
        with:
          number: '{{snow_ticket}}'
      - name: create-order
        type: call
        call: sap.create-maintenance-order
        with:
          equipment: '{{equipment_id}}'
          priority: '{{priority}}'
          description: '{{get-request.short_description}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: maintenance-ops
          text: 'Maintenance order {{create-order.order_number}} created for equipment {{equipment_id}}. Priority: {{priority}}. Source: {{snow_ticket}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://loreal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: get-request
        method: GET
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /MaintenanceOrder
      operations:
      - name: create-maintenance-order
        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: send-message
        method: POST
Open in Framework → View in Fleet → sap-maintenance-order-creation-workflow.yml

Generates a plant maintenance schedule report by pulling upcoming maintenance orders from SAP, enriching with equipment history from Snowflake, and posting to Teams.

naftiko: '0.5'
info:
  label: SAP Plant Maintenance Schedule Report
  description: Generates a plant maintenance schedule report by pulling upcoming maintenance orders from SAP, enriching with equipment history from Snowflake, and posting to Teams.
  tags:
  - manufacturing
  - operations
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: maintenance-reporting
    port: 8080
    tools:
    - name: generate-maintenance-report
      description: Generate a maintenance schedule report combining upcoming orders with equipment history.
      inputParameters:
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: weeks_ahead
        type: number
        description: Number of weeks to look ahead.
      steps:
      - name: get-schedule
        type: call
        call: sap.get-maintenance-orders
        with:
          plant: '{{plant_code}}'
          horizon_weeks: '{{weeks_ahead}}'
      - name: get-equipment-history
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MANUFACTURING_WH
          query: SELECT equipment_id, mtbf_hours, last_failure_date FROM equipment_history WHERE plant='{{plant_code}}' AND equipment_id IN ({{get-schedule.equipment_ids}})
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: maintenance-planning
          text: 'Maintenance schedule for {{plant_code}} (next {{weeks_ahead}} weeks): {{get-schedule.order_count}} orders. Equipment at risk: {{get-equipment-history.at_risk_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /MaintenanceOrder
      operations:
      - name: get-maintenance-orders
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-plant-maintenance-schedule-report.yml

Initiates a quality audit for a contract manufacturer by pulling supplier data from SAP Ariba, creating a Jira audit task, and sharing the audit checklist via SharePoint.

naftiko: '0.5'
info:
  label: Contract Manufacturer Quality Audit Workflow
  description: Initiates a quality audit for a contract manufacturer by pulling supplier data from SAP Ariba, creating a Jira audit task, and sharing the audit checklist via SharePoint.
  tags:
  - quality
  - procurement
  - sap
  - jira
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: quality-audit
    port: 8080
    tools:
    - name: initiate-cm-audit
      description: Start a contract manufacturer quality audit by gathering supplier data, creating an audit task, and sharing the checklist.
      inputParameters:
      - name: supplier_id
        type: string
        description: SAP Ariba supplier ID.
      - name: audit_type
        type: string
        description: 'Type of audit: routine, for-cause, pre-approval.'
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-audit-task
        type: call
        call: jira.create-issue
        with:
          project_key: QAUDIT
          issuetype: Task
          summary: 'CM Quality Audit: {{get-supplier.name}} ({{audit_type}})'
          description: 'Audit type: {{audit_type}}. Supplier: {{get-supplier.name}}. Location: {{get-supplier.address}}.'
      - name: share-checklist
        type: call
        call: sharepoint.copy-template
        with:
          template: quality-audit-checklist-{{audit_type}}
          destination: audits/{{supplier_id}}
          name: audit-{{supplier_id}}-checklist
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/quality/drive/items
      operations:
      - name: copy-template
        method: POST
Open in Framework → View in Fleet → contract-manufacturer-quality-audit-workflow.yml

Retrieves the current live container version from Google Tag Manager for a brand website property.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Version Lookup
  description: Retrieves the current live container version from Google Tag Manager for a brand website property.
  tags:
  - marketing
  - analytics
  - google-tag-manager
  - web
capability:
  exposes:
  - type: mcp
    namespace: tag-management
    port: 8080
    tools:
    - name: get-container-version
      description: Fetch the current live GTM container version including tag count, trigger count, and publish date.
      inputParameters:
      - name: account_id
        type: string
        description: GTM account ID.
      - name: container_id
        type: string
        description: GTM container ID.
      call: gtm.get-live-version
      with:
        accountId: '{{account_id}}'
        containerId: '{{container_id}}'
      outputParameters:
      - name: version_id
        type: string
        mapping: $.containerVersionId
      - name: tag_count
        type: string
        mapping: $.tag.length
      - name: publish_date
        type: string
        mapping: $.fingerprint
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_gtm_token
    resources:
    - name: versions
      path: /accounts/{{accountId}}/containers/{{containerId}}/versions/live
      inputParameters:
      - name: accountId
        in: path
      - name: containerId
        in: path
      operations:
      - name: get-live-version
        method: GET
Open in Framework → View in Fleet → google-tag-manager-container-version-lookup.yml

When an R&D formulation is submitted, retrieves the bill of materials from SAP, checks regulatory compliance documents in SharePoint, and creates a review task in Jira.

naftiko: '0.5'
info:
  label: New Product Formulation Review Workflow
  description: When an R&D formulation is submitted, retrieves the bill of materials from SAP, checks regulatory compliance documents in SharePoint, and creates a review task in Jira.
  tags:
  - r-and-d
  - quality
  - sap
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: rd-formulation
    port: 8080
    tools:
    - name: initiate-formulation-review
      description: Orchestrate a new product formulation review by pulling the BOM, checking regulatory docs, and creating a review task.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number for the new formulation.
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: formulation_name
        type: string
        description: Name of the new formulation.
      steps:
      - name: get-bom
        type: call
        call: sap.get-bom
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: check-regulatory
        type: call
        call: sharepoint.search-docs
        with:
          query: '{{formulation_name}} regulatory INCI'
          site: regulatory-affairs
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: RND
          issuetype: Task
          summary: 'Formulation review: {{formulation_name}}'
          description: 'BOM contains {{get-bom.component_count}} components. Regulatory docs found: {{check-regulatory.result_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /MaterialBOM
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/regulatory-affairs/drive/root/search
      operations:
      - name: search-docs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → new-product-formulation-review-workflow.yml

Searches Jira for open quality defect issues in a project and returns defect counts by priority.

naftiko: '0.5'
info:
  label: Jira Quality Defect Lookup
  description: Searches Jira for open quality defect issues in a project and returns defect counts by priority.
  tags:
  - quality
  - project-management
  - jira
  - defects
capability:
  exposes:
  - type: mcp
    namespace: quality-tracking
    port: 8080
    tools:
    - name: get-quality-defects
      description: Search Jira for open quality defects in a project. Returns issue count grouped by priority.
      inputParameters:
      - name: project_key
        type: string
        description: Jira project key for the quality project.
      call: jira.search-issues
      with:
        jql: project={{project_key}} AND type=Bug AND status!=Done
      outputParameters:
      - name: total
        type: string
        mapping: $.total
      - name: issues
        type: string
        mapping: $.issues
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        method: POST
Open in Framework → View in Fleet → jira-quality-defect-lookup.yml

Handles contractor access expiry by checking Okta account status, verifying contract end dates in Workday, and creating deprovisioning tasks in ServiceNow.

naftiko: '0.5'
info:
  label: Okta Contractor Access Expiry Handler
  description: Handles contractor access expiry by checking Okta account status, verifying contract end dates in Workday, and creating deprovisioning tasks in ServiceNow.
  tags:
  - security
  - identity
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-lifecycle
    port: 8080
    tools:
    - name: handle-contractor-expiry
      description: Handle contractor access expiry by verifying employment status and creating deprovisioning tasks.
      inputParameters:
      - name: contractor_email
        type: string
        description: Contractor email address.
      steps:
      - name: get-okta-status
        type: call
        call: okta.get-user
        with:
          email: '{{contractor_email}}'
      - name: check-workday
        type: call
        call: workday.get-worker-by-email
        with:
          email: '{{contractor_email}}'
      - name: create-deprovision-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contractor access expiry: {{contractor_email}}'
          description: 'Okta status: {{get-okta-status.status}}. Workday end date: {{check-workday.contract_end_date}}. Deprovisioning required.'
          category: identity_management
  consumes:
  - type: http
    namespace: okta
    baseUri: https://loreal.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /loreal/workers
      operations:
      - name: get-worker-by-email
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://loreal.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
Open in Framework → View in Fleet → okta-contractor-access-expiry-handler.yml

Optimizes production scheduling by pulling demand signals from Snowflake, checking plant capacity in SAP, and creating optimized schedule proposals in Jira.

naftiko: '0.5'
info:
  label: SAP Production Scheduling Optimizer
  description: Optimizes production scheduling by pulling demand signals from Snowflake, checking plant capacity in SAP, and creating optimized schedule proposals in Jira.
  tags:
  - manufacturing
  - supply-chain
  - snowflake
  - sap
  - jira
capability:
  exposes:
  - type: mcp
    namespace: production-planning
    port: 8080
    tools:
    - name: optimize-production-schedule
      description: Optimize production scheduling by balancing demand signals with plant capacity constraints.
      inputParameters:
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: planning_period
        type: string
        description: Planning period in YYYY-WW format.
      steps:
      - name: get-demand
        type: call
        call: snowflake.execute-query
        with:
          warehouse: DEMAND_PLANNING_WH
          query: SELECT sku, required_units, priority FROM demand_signals WHERE plant='{{plant_code}}' AND week='{{planning_period}}'
      - name: get-capacity
        type: call
        call: sap.get-plant-capacity
        with:
          plant: '{{plant_code}}'
          period: '{{planning_period}}'
      - name: create-schedule
        type: call
        call: jira.create-issue
        with:
          project_key: PROD
          issuetype: Task
          summary: 'Production schedule: {{plant_code}} week {{planning_period}}'
          description: 'Demand: {{get-demand.total_units}} units across {{get-demand.sku_count}} SKUs. Available capacity: {{get-capacity.available_hours}} hours.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: capacity
      path: /A_ProductionOrderCapacity
      operations:
      - name: get-plant-capacity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-production-scheduling-optimizer.yml

Assembles a product launch briefing by pulling campaign assets from Adobe Creative Cloud and distributing the package to brand teams via SharePoint and Teams.

naftiko: '0.5'
info:
  label: Product Launch Content Briefing
  description: Assembles a product launch briefing by pulling campaign assets from Adobe Creative Cloud and distributing the package to brand teams via SharePoint and Teams.
  tags:
  - marketing
  - content
  - adobe
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: content-ops
    port: 8080
    tools:
    - name: assemble-launch-briefing
      description: Given a product launch ID, retrieve approved creative assets from Adobe Experience Manager, upload them to a SharePoint brand folder, and notify the brand team via Teams.
      inputParameters:
      - name: launch_id
        type: string
        description: Internal product launch ID.
      - name: brand_name
        type: string
        description: Brand name (e.g., Lancôme, Maybelline) for folder routing.
      - name: teams_channel_id
        type: string
        description: Teams channel ID for the brand team notification.
      steps:
      - name: get-assets
        type: call
        call: aem.list-assets
        with:
          launchId: '{{launch_id}}'
          brand: '{{brand_name}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: brand_launches
          folder_path: Launches/{{brand_name}}/{{launch_id}}
          content: '{{get-assets.packageUrl}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Launch briefing ready for {{brand_name}} ({{launch_id}}). Assets: {{upload-to-sharepoint.sharepoint_url}}'
  consumes:
  - type: http
    namespace: aem
    baseUri: https://author.loreal.adobecqms.net/api/assets
    authentication:
      type: basic
      username: $secrets.aem_user
      password: $secrets.aem_password
    resources:
    - name: assets
      path: /loreal/launches/{{launchId}}
      inputParameters:
      - name: launchId
        in: path
      operations:
      - name: list-assets
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/items/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        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/brand/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → product-launch-content-briefing.yml

Audits privileged access by pulling Okta admin role assignments, cross-referencing with Workday employment status, and creating a ServiceNow review task for stale accounts.

naftiko: '0.5'
info:
  label: Okta Privileged Access Audit Workflow
  description: Audits privileged access by pulling Okta admin role assignments, cross-referencing with Workday employment status, and creating a ServiceNow review task for stale accounts.
  tags:
  - security
  - identity
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-privileged-access
      description: Audit privileged Okta accounts by verifying employment status and flagging stale or orphaned admin accounts.
      inputParameters:
      - name: role_type
        type: string
        description: Okta admin role type to audit (e.g., SUPER_ADMIN, ORG_ADMIN).
      steps:
      - name: get-admin-users
        type: call
        call: okta.list-role-assignments
        with:
          role_type: '{{role_type}}'
      - name: check-employment
        type: call
        call: workday.get-active-workers
        with:
          email_list: '{{get-admin-users.emails}}'
      - name: create-review
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Privileged access audit: {{role_type}} role'
          description: 'Total admins: {{get-admin-users.count}}. Inactive employees with admin access: {{check-employment.stale_count}}.'
          category: security
  consumes:
  - type: http
    namespace: okta
    baseUri: https://loreal.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: roles
      path: /users
      operations:
      - name: list-role-assignments
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /loreal/workers
      operations:
      - name: get-active-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://loreal.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
Open in Framework → View in Fleet → okta-privileged-access-audit-workflow.yml

Fetches marketing campaign attribution data from Adobe Analytics for a given campaign and date range.

naftiko: '0.5'
info:
  label: Adobe Analytics Campaign Attribution
  description: Fetches marketing campaign attribution data from Adobe Analytics for a given campaign and date range.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: digital-analytics
    port: 8080
    tools:
    - name: get-campaign-attribution
      description: Pull campaign attribution metrics from Adobe Analytics including visits, conversions, and revenue attributed to a campaign.
      inputParameters:
      - name: campaign_id
        type: string
        description: Adobe Analytics campaign tracking code.
      - name: date_from
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        type: string
        description: End date in YYYY-MM-DD format.
      call: adobe.get-report
      with:
        rsid: lorealproduction
        campaign_id: '{{campaign_id}}'
        dateFrom: '{{date_from}}'
        dateTo: '{{date_to}}'
      outputParameters:
      - name: visits
        type: string
        mapping: $.report.data.visits
      - name: conversions
        type: string
        mapping: $.report.data.conversions
      - name: revenue
        type: string
        mapping: $.report.data.revenue
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/loreal
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-campaign-attribution.yml

Tracks regulatory submission status by querying Jira for submission tasks, checking document completeness in SharePoint, and updating the compliance dashboard in Power BI.

naftiko: '0.5'
info:
  label: Cosmetics Regulatory Submission Tracker
  description: Tracks regulatory submission status by querying Jira for submission tasks, checking document completeness in SharePoint, and updating the compliance dashboard in Power BI.
  tags:
  - regulatory
  - quality
  - jira
  - sharepoint
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-regulatory-submission
      description: Track the status of a cosmetics regulatory submission across project management, document storage, and reporting systems.
      inputParameters:
      - name: submission_id
        type: string
        description: Jira issue key for the regulatory submission.
      steps:
      - name: get-submission-status
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{submission_id}}'
      - name: check-documents
        type: call
        call: sharepoint.list-folder
        with:
          site: regulatory-submissions
          folder: '{{submission_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: regulatory-compliance-tracker
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /sites/{{site}}/drive/root:/{{folder}}:/children
      inputParameters:
      - name: site
        in: path
      - name: folder
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → cosmetics-regulatory-submission-tracker.yml

Pulls current compensation data for an employee from Workday including base pay, bonus eligibility, and pay grade.

naftiko: '0.5'
info:
  label: Workday Compensation Review Snapshot
  description: Pulls current compensation data for an employee from Workday including base pay, bonus eligibility, and pay grade.
  tags:
  - hr
  - compensation
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation-snapshot
      description: Retrieve compensation details for a Workday employee including base salary, bonus target, and pay grade.
      inputParameters:
      - name: employee_id
        type: string
        description: Workday employee ID.
      call: workday.get-compensation
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: base_salary
        type: string
        mapping: $.compensation.base_pay
      - name: bonus_target
        type: string
        mapping: $.compensation.bonus_target_percent
      - name: pay_grade
        type: string
        mapping: $.compensation.pay_grade
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /loreal/workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-review-snapshot.yml

Aggregates completed story points from the last Jira sprint and posts a velocity digest to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Digest
  description: Aggregates completed story points from the last Jira sprint and posts a velocity digest to the engineering Teams channel.
  tags:
  - devops
  - project-management
  - jira
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: digest-sprint-velocity
      description: Given a Jira board ID and sprint ID, fetch completed issues and story points, then post a velocity summary to the engineering Teams channel.
      inputParameters:
      - name: board_id
        type: string
        description: Jira board ID.
      - name: sprint_id
        type: string
        description: Jira sprint ID to summarize.
      - name: teams_channel_id
        type: string
        description: Teams channel ID for the engineering team.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.get-sprint-issues
        with:
          boardId: '{{board_id}}'
          sprintId: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: Sprint {{sprint_id}} complete — {{get-sprint-issues.totalPoints}} story points delivered across {{get-sprint-issues.issueCount}} issues.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-issues
      path: /board/{{boardId}}/sprint/{{sprintId}}/issue
      inputParameters:
      - name: boardId
        in: path
      - name: sprintId
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/engineering/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-digest.yml

Processes DTC product returns by updating the Salesforce case, creating a return goods receipt in SAP, and issuing a refund notification via email.

naftiko: '0.5'
info:
  label: Direct-to-Consumer Returns Processing
  description: Processes DTC product returns by updating the Salesforce case, creating a return goods receipt in SAP, and issuing a refund notification via email.
  tags:
  - ecommerce
  - supply-chain
  - salesforce
  - sap
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: dtc-returns
    port: 8080
    tools:
    - name: process-dtc-return
      description: Process a direct-to-consumer product return across CRM, ERP, and customer notification systems.
      inputParameters:
      - name: case_id
        type: string
        description: Salesforce case ID for the return.
      - name: order_number
        type: string
        description: Original SAP sales order number.
      - name: reason
        type: string
        description: Return reason code.
      steps:
      - name: update-case
        type: call
        call: salesforce.update-case
        with:
          case_id: '{{case_id}}'
          Status: In Progress
          Return_Reason__c: '{{reason}}'
      - name: create-return-order
        type: call
        call: sap.create-return-order
        with:
          reference_order: '{{order_number}}'
          reason: '{{reason}}'
      - name: send-notification
        type: call
        call: msgraph.send-mail
        with:
          to: '{{update-case.contact_email}}'
          subject: 'Return processed: {{order_number}}'
          body: 'Your return has been processed. Return reference: {{create-return-order.return_number}}. Refund will be issued within 5-7 business days.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: update-case
        method: PATCH
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: returns
      path: /A_ReturnsDeliveryHeader
      operations:
      - name: create-return-order
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → direct-to-consumer-returns-processing.yml

Generates a media mix optimization report by pulling spend data from Meta and Google Ads via Snowflake, correlating with sales, and refreshing the Power BI dashboard.

naftiko: '0.5'
info:
  label: Media Mix Optimization Report Generator
  description: Generates a media mix optimization report by pulling spend data from Meta and Google Ads via Snowflake, correlating with sales, and refreshing the Power BI dashboard.
  tags:
  - marketing
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: media-planning
    port: 8080
    tools:
    - name: generate-media-mix-report
      description: Generate a media mix optimization report combining multi-channel spend with sales outcomes.
      inputParameters:
      - name: brand
        type: string
        description: Brand name.
      - name: date_from
        type: string
        description: Start date.
      - name: date_to
        type: string
        description: End date.
      steps:
      - name: get-media-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MARKETING_ANALYTICS_WH
          query: SELECT channel, spend, impressions, conversions, roas FROM media_mix WHERE brand='{{brand}}' AND date BETWEEN '{{date_from}}' AND '{{date_to}}' GROUP BY channel
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: media-mix-optimization
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: media-planning
          text: 'Media mix report ready for {{brand}} ({{date_from}} to {{date_to}}). Best ROAS channel: {{get-media-data.top_channel}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        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: send-message
        method: POST
Open in Framework → View in Fleet → media-mix-optimization-report-generator.yml

When a manufacturing line goes down, creates a ServiceNow incident, updates the production order status in SAP, and alerts the plant operations team via Teams.

naftiko: '0.5'
info:
  label: Manufacturing Downtime Incident Handler
  description: When a manufacturing line goes down, creates a ServiceNow incident, updates the production order status in SAP, and alerts the plant operations team via Teams.
  tags:
  - manufacturing
  - operations
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfg-ops
    port: 8080
    tools:
    - name: handle-downtime
      description: Orchestrate the response to a manufacturing line downtime event by creating an incident, updating SAP, and notifying operations.
      inputParameters:
      - name: production_line
        type: string
        description: Manufacturing production line identifier.
      - name: plant_code
        type: string
        description: SAP plant code.
      - name: reason
        type: string
        description: Reason for downtime.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line down: {{production_line}} at plant {{plant_code}}'
          category: manufacturing
          urgency: '1'
          description: 'Production line {{production_line}} is down. Reason: {{reason}}.'
      - name: update-sap-order
        type: call
        call: sap.update-production-status
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
          status: INTERRUPTED
      - name: alert-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-operations
          text: 'LINE DOWN: {{production_line}} at {{plant_code}}. Reason: {{reason}}. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://loreal.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: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder
      operations:
      - name: update-production-status
        method: PATCH
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-downtime-incident-handler.yml

Submits a vendor invoice to SAP Ariba for three-way match validation, creates an approval task in ServiceNow, and notifies the approver via Teams.

naftiko: '0.5'
info:
  label: Invoice Processing and Approval
  description: Submits a vendor invoice to SAP Ariba for three-way match validation, creates an approval task in ServiceNow, and notifies the approver via Teams.
  tags:
  - finance
  - procurement
  - sap-ariba
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: process-invoice
      description: Given a vendor invoice number and amount, submit it to SAP Ariba for three-way match, create a ServiceNow approval task, and notify the finance approver via Teams.
      inputParameters:
      - name: invoice_number
        type: string
        description: Vendor invoice number.
      - name: vendor_id
        type: string
        description: SAP vendor ID.
      - name: amount
        type: number
        description: Invoice total amount.
      - name: approver_upn
        type: string
        description: UPN (email) of the finance approver in Microsoft 365.
      steps:
      - name: submit-invoice
        type: call
        call: sap-ariba.create-invoice
        with:
          invoiceNumber: '{{invoice_number}}'
          vendorId: '{{vendor_id}}'
          totalAmount: '{{amount}}'
      - name: create-approval-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Invoice approval required: {{invoice_number}}'
          assigned_to: '{{approver_upn}}'
          description: 'Ariba invoice ID: {{submit-invoice.invoiceId}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Invoice {{invoice_number}} for {{amount}} requires your approval. ServiceNow task: {{create-approval-task.number}}'
  consumes:
  - type: http
    namespace: sap-ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://loreal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → invoice-processing-and-approval.yml

Pulls engagement metrics from LinkedIn and Meta for L'Oréal brand accounts and posts a weekly summary to a Teams channel.

naftiko: '0.5'
info:
  label: Social Media Performance Report
  description: Pulls engagement metrics from LinkedIn and Meta for L'Oréal brand accounts and posts a weekly summary to a Teams channel.
  tags:
  - marketing
  - social
  - linkedin
  - meta
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-social-performance
      description: Fetch weekly post engagement metrics from LinkedIn and Meta brand pages and post a combined summary to the specified Teams channel. Use for weekly brand performance reviews.
      inputParameters:
      - name: linkedin_org_id
        type: string
        description: LinkedIn organization URN for the brand page.
      - name: meta_page_id
        type: string
        description: Meta (Facebook) page ID for the brand.
      - name: teams_channel_id
        type: string
        description: Microsoft Teams channel ID to post the report to.
      steps:
      - name: get-linkedin-stats
        type: call
        call: linkedin.get-org-stats
        with:
          org_id: '{{linkedin_org_id}}'
      - name: get-meta-stats
        type: call
        call: meta.get-page-insights
        with:
          page_id: '{{meta_page_id}}'
      - name: post-report
        type: call
        call: msteams.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Weekly Social Report — LinkedIn impressions: {{get-linkedin-stats.impressionCount}}, Meta reach: {{get-meta-stats.reach}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: org-stats
      path: /organizationalEntityShareStatistics
      inputParameters:
      - name: org_id
        in: query
      operations:
      - name: get-org-stats
        method: GET
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: page-insights
      path: /{{page_id}}/insights
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page-insights
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/marketing/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → social-media-performance-report.yml

Retrieves IT asset details from ServiceNow CMDB by asset tag or serial number.

naftiko: '0.5'
info:
  label: ServiceNow IT Asset Lookup
  description: Retrieves IT asset details from ServiceNow CMDB by asset tag or serial number.
  tags:
  - operations
  - it-asset
  - servicenow
  - cmdb
capability:
  exposes:
  - type: mcp
    namespace: it-assets
    port: 8080
    tools:
    - name: get-asset
      description: Look up an IT asset in ServiceNow CMDB by asset tag. Returns asset name, status, assigned user, and warranty expiration.
      inputParameters:
      - name: asset_tag
        type: string
        description: ServiceNow asset tag identifier.
      call: servicenow.get-asset
      with:
        asset_tag: '{{asset_tag}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.result.name
      - name: status
        type: string
        mapping: $.result.install_status
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
      - name: warranty_expiry
        type: string
        mapping: $.result.warranty_expiration
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://loreal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/alm_hardware
      inputParameters:
      - name: asset_tag
        in: query
      operations:
      - name: get-asset
        method: GET
Open in Framework → View in Fleet → servicenow-it-asset-lookup.yml

Extracts budget vs. actuals data from SAP S/4HANA by cost center and publishes the variance report to Power BI and SharePoint.

naftiko: '0.5'
info:
  label: SAP Budget Variance Report
  description: Extracts budget vs. actuals data from SAP S/4HANA by cost center and publishes the variance report to Power BI and SharePoint.
  tags:
  - finance
  - erp
  - sap
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: publish-budget-variance
      description: Given a fiscal period and cost center, extract budget vs. actuals from SAP S/4HANA, push the data to a Power BI dataset, and upload a summary report to SharePoint.
      inputParameters:
      - name: fiscal_period
        type: string
        description: Fiscal period in YYYYMM format (e.g., 202603).
      - name: cost_center
        type: string
        description: SAP cost center code.
      steps:
      - name: get-variance-data
        type: call
        call: sap.get-cost-center-actuals
        with:
          fiscalPeriod: '{{fiscal_period}}'
          costCenter: '{{cost_center}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          datasetId: $secrets.powerbi_budget_dataset_id
          tableName: BudgetVariance
          rows: '{{get-variance-data.rows}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance_reports
          folder_path: BudgetVariance/{{fiscal_period}}
          content: '{{get-variance-data.summary}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/YY1_COSTCENTERACTUALS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-actuals
      path: /CostCenterActuals
      inputParameters:
      - name: fiscalPeriod
        in: query
      - name: costCenter
        in: query
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{datasetId}}/tables/{{tableName}}/rows
      inputParameters:
      - name: datasetId
        in: path
      - name: tableName
        in: path
      operations:
      - name: push-rows
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/items/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → sap-budget-variance-report.yml

Checks hazardous material compliance for shipping by querying SAP material safety data, validating against regulations in Snowflake, and creating a ServiceNow task for non-compliance.

naftiko: '0.5'
info:
  label: SAP Hazardous Material Compliance Check
  description: Checks hazardous material compliance for shipping by querying SAP material safety data, validating against regulations in Snowflake, and creating a ServiceNow task for non-compliance.
  tags:
  - quality
  - regulatory
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hazmat-compliance
    port: 8080
    tools:
    - name: check-hazmat-compliance
      description: Verify hazardous material compliance for a shipment by checking safety data and regulatory requirements.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number.
      - name: destination_country
        type: string
        description: Destination country code.
      steps:
      - name: get-safety-data
        type: call
        call: sap.get-material-safety
        with:
          material: '{{material_number}}'
      - name: check-regulations
        type: call
        call: snowflake.execute-query
        with:
          warehouse: REGULATORY_WH
          query: SELECT regulation, compliant, required_docs FROM hazmat_regulations WHERE un_number='{{get-safety-data.un_number}}' AND country='{{destination_country}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Hazmat compliance: {{material_number}} to {{destination_country}}'
          description: 'UN number: {{get-safety-data.un_number}}. Compliance status: {{check-regulations.compliant}}.'
          category: regulatory
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-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('{{material}}')/to_ProductSafetyData
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-safety
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://loreal.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
Open in Framework → View in Fleet → sap-hazardous-material-compliance-check.yml

Pulls influencer campaign spend from Salesforce, engagement data from Instagram, and sales lift from Snowflake to calculate ROI and post results to Teams.

naftiko: '0.5'
info:
  label: Influencer Campaign ROI Analyzer
  description: Pulls influencer campaign spend from Salesforce, engagement data from Instagram, and sales lift from Snowflake to calculate ROI and post results to Teams.
  tags:
  - marketing
  - social
  - salesforce
  - instagram
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: influencer-analytics
    port: 8080
    tools:
    - name: analyze-influencer-roi
      description: Calculate influencer campaign ROI by combining spend data, engagement metrics, and sales lift, then post the summary to Teams.
      inputParameters:
      - name: campaign_id
        type: string
        description: Salesforce campaign ID for the influencer program.
      - name: ig_account_id
        type: string
        description: Instagram business account ID.
      - name: date_from
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-spend
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-engagement
        type: call
        call: instagram.get-insights
        with:
          ig_user_id: '{{ig_account_id}}'
          since: '{{date_from}}'
          until: '{{date_to}}'
      - name: get-sales-lift
        type: call
        call: snowflake.execute-query
        with:
          warehouse: MARKETING_ANALYTICS_WH
          query: SELECT sales_lift_pct FROM influencer_attribution WHERE campaign_id='{{campaign_id}}'
      - name: post-results
        type: call
        call: msteams.send-message
        with:
          channel_id: influencer-marketing
          text: 'Influencer ROI for {{campaign_id}}: Spend ${{get-spend.actual_cost}}, Engagement {{get-engagement.total_interactions}}, Sales lift {{get-sales-lift.sales_lift_pct}}%.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_token
    resources:
    - name: insights
      path: /{{ig_user_id}}/insights
      inputParameters:
      - name: ig_user_id
        in: path
      operations:
      - name: get-insights
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → influencer-campaign-roi-analyzer.yml

Queries Datadog APM for application latency percentiles over a time window for a specified service.

naftiko: '0.5'
info:
  label: Datadog Application Latency Report
  description: Queries Datadog APM for application latency percentiles over a time window for a specified service.
  tags:
  - operations
  - monitoring
  - datadog
  - performance
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-latency-report
      description: Fetch p50, p95, and p99 latency metrics from Datadog APM for a given service over a specified time range.
      inputParameters:
      - name: service_name
        type: string
        description: Datadog APM service name.
      - name: time_from
        type: string
        description: Start timestamp in epoch seconds.
      - name: time_to
        type: string
        description: End timestamp in epoch seconds.
      call: datadog.query-timeseries
      with:
        query: avg:trace.servlet.request.duration{service:{{service_name}}}
        from: '{{time_from}}'
        to: '{{time_to}}'
      outputParameters:
      - name: p50_ms
        type: string
        mapping: $.series[0].pointlist[0][1]
      - name: p95_ms
        type: string
        mapping: $.series[1].pointlist[0][1]
      - name: p99_ms
        type: string
        mapping: $.series[2].pointlist[0][1]
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: query
      path: /query
      operations:
      - name: query-timeseries
        method: GET
Open in Framework → View in Fleet → datadog-application-latency-report.yml

Uses Anthropic Claude to classify and summarize incoming customer complaints from Salesforce Service Cloud, then routes them to the appropriate ServiceNow queue.

naftiko: '0.5'
info:
  label: AI-Assisted Customer Complaint Triage
  description: Uses Anthropic Claude to classify and summarize incoming customer complaints from Salesforce Service Cloud, then routes them to the appropriate ServiceNow queue.
  tags:
  - customer-support
  - ai
  - salesforce
  - servicenow
  - anthropic
capability:
  exposes:
  - type: mcp
    namespace: cx-ops
    port: 8080
    tools:
    - name: triage-customer-complaint
      description: Given a Salesforce Service Cloud case ID, retrieve case details, use Anthropic Claude to classify severity and summarize the complaint, then create a routed ServiceNow incident with the summary.
      inputParameters:
      - name: case_id
        type: string
        description: Salesforce Service Cloud case record ID.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: classify-complaint
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Classify and summarize this customer complaint for routing: {{get-case.Description}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Customer complaint: {{get-case.Subject}}'
          description: 'AI summary: {{classify-complaint.content}}'
          category: customer_complaint
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://loreal.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
Open in Framework → View in Fleet → ai-assisted-customer-complaint-triage.yml

Triggers a Terraform Cloud workspace run to provision or update infrastructure, then posts run status to the DevOps Teams channel and creates a Jira tracking task.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning
  description: Triggers a Terraform Cloud workspace run to provision or update infrastructure, then posts run status to the DevOps Teams channel and creates a Jira tracking task.
  tags:
  - cloud
  - devops
  - terraform
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: trigger-terraform-run
      description: Given a Terraform Cloud workspace ID, trigger a new plan-and-apply run, create a Jira task to track the provisioning change, and post status to the DevOps Teams channel.
      inputParameters:
      - name: workspace_id
        type: string
        description: Terraform Cloud workspace ID.
      - name: message
        type: string
        description: Commit message or description of the infrastructure change.
      - name: teams_channel_id
        type: string
        description: Teams channel ID for DevOps notifications.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspaceId: '{{workspace_id}}'
          message: '{{message}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: CLOUD
          issuetype: Task
          summary: 'Terraform run: {{message}}'
          description: 'Workspace: {{workspace_id}} | Run ID: {{create-run.runId}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Terraform run triggered: {{message}} | Workspace: {{workspace_id}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/devops/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning.yml

Checks packaging materials against sustainability requirements by querying SAP BOM data, verifying compliance in Snowflake, and creating a Jira task for non-compliant items.

naftiko: '0.5'
info:
  label: Packaging Sustainability Compliance Checker
  description: Checks packaging materials against sustainability requirements by querying SAP BOM data, verifying compliance in Snowflake, and creating a Jira task for non-compliant items.
  tags:
  - sustainability
  - quality
  - sap
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: check-packaging-compliance
      description: Verify packaging sustainability compliance by cross-referencing BOM materials with sustainability standards and flagging non-compliant components.
      inputParameters:
      - name: material_number
        type: string
        description: SAP material number for the packaged product.
      - name: plant_code
        type: string
        description: SAP plant code.
      steps:
      - name: get-packaging-bom
        type: call
        call: sap.get-bom
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: check-compliance
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SUSTAINABILITY_WH
          query: SELECT material_id, recyclable_pct, compliant FROM packaging_sustainability WHERE material_id IN ({{get-packaging-bom.component_ids}})
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: SUSTAIN
          issuetype: Task
          summary: 'Packaging compliance review: {{material_number}}'
          description: 'Non-compliant components found: {{check-compliance.non_compliant_count}}. Review required.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /MaterialBOM
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → packaging-sustainability-compliance-checker.yml

Orchestrates clinical trial data collection by pulling trial metadata from Jira, collecting results from Snowflake, and storing the summary report in SharePoint.

naftiko: '0.5'
info:
  label: Clinical Trial Data Collection Orchestrator
  description: Orchestrates clinical trial data collection by pulling trial metadata from Jira, collecting results from Snowflake, and storing the summary report in SharePoint.
  tags:
  - r-and-d
  - quality
  - jira
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical-trials
    port: 8080
    tools:
    - name: collect-trial-data
      description: Collect and organize clinical trial data from multiple sources into a structured report.
      inputParameters:
      - name: trial_id
        type: string
        description: Clinical trial identifier.
      - name: phase
        type: string
        description: Trial phase (e.g., Phase I, Phase II).
      steps:
      - name: get-trial-metadata
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{trial_id}}'
      - name: get-trial-results
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RD_ANALYTICS_WH
          query: SELECT subject_count, adverse_events, efficacy_score FROM clinical_results WHERE trial_id='{{trial_id}}' AND phase='{{phase}}'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site: rd-clinical-trials
          folder: '{{trial_id}}'
          filename: '{{trial_id}}-{{phase}}-results.json'
          content: '{{get-trial-results.data}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site}}/drive/root:/{{folder}}/{{filename}}:/content
      inputParameters:
      - name: site
        in: path
      - name: folder
        in: path
      - name: filename
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → clinical-trial-data-collection-orchestrator.yml

Searches SharePoint for regulatory compliance documents matching a keyword and returns document titles, URLs, and last modified dates.

naftiko: '0.5'
info:
  label: SharePoint Regulatory Document Search
  description: Searches SharePoint for regulatory compliance documents matching a keyword and returns document titles, URLs, and last modified dates.
  tags:
  - quality
  - regulatory
  - sharepoint
  - documents
capability:
  exposes:
  - type: mcp
    namespace: doc-management
    port: 8080
    tools:
    - name: search-regulatory-docs
      description: Search SharePoint regulatory library for documents matching a keyword. Returns title, URL, and last modified date.
      inputParameters:
      - name: keyword
        type: string
        description: Search keyword for regulatory documents.
      - name: site_id
        type: string
        description: SharePoint site ID for the regulatory library.
      call: sharepoint.search
      with:
        siteId: '{{site_id}}'
        queryText: '{{keyword}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.value
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/{{siteId}}/drive/root/search(q='{{queryText}}')
      inputParameters:
      - name: siteId
        in: path
      - name: queryText
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-regulatory-document-search.yml

When a Datadog monitor fires a critical alert, creates a ServiceNow incident, assigns an on-call engineer via PagerDuty, and notifies the ops Teams channel.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert Response
  description: When a Datadog monitor fires a critical alert, creates a ServiceNow incident, assigns an on-call engineer via PagerDuty, and notifies the ops Teams channel.
  tags:
  - itsm
  - observability
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: handle-infrastructure-alert
      description: Given a Datadog monitor alert ID and severity, create a ServiceNow incident, trigger a PagerDuty incident to page on-call, and post context to the ops Teams channel.
      inputParameters:
      - name: monitor_id
        type: string
        description: Datadog monitor ID that triggered the alert.
      - name: severity
        type: string
        description: 'Alert severity: critical, warning, or info.'
      - name: affected_service
        type: string
        description: Name of the affected service or host.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Infrastructure alert: {{affected_service}} — {{severity}}'
          urgency: '1'
          impact: '1'
          description: 'Datadog monitor {{monitor_id}}: {{get-monitor.message}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Infrastructure alert: {{affected_service}}'
          service_id: $secrets.pagerduty_infra_service_id
          body: 'ServiceNow: {{create-incident.number}} | Monitor: {{monitor_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://loreal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-alert-response.yml

Executes a consumer analytics query in Snowflake and returns aggregated purchase behavior data for a product category.

naftiko: '0.5'
info:
  label: Snowflake Consumer Insights Query
  description: Executes a consumer analytics query in Snowflake and returns aggregated purchase behavior data for a product category.
  tags:
  - analytics
  - marketing
  - snowflake
  - data
capability:
  exposes:
  - type: mcp
    namespace: consumer-analytics
    port: 8080
    tools:
    - name: query-consumer-insights
      description: Query Snowflake consumer analytics warehouse for purchase frequency, basket size, and brand affinity by product category.
      inputParameters:
      - name: category
        type: string
        description: Product category to analyze (e.g., skincare, haircare).
      - name: region
        type: string
        description: Market region code.
      call: snowflake.execute-query
      with:
        warehouse: CONSUMER_ANALYTICS_WH
        query: SELECT * FROM consumer_insights WHERE category='{{category}}' AND region='{{region}}'
      outputParameters:
      - name: avg_basket_size
        type: string
        mapping: $.data[0].avg_basket_size
      - name: purchase_frequency
        type: string
        mapping: $.data[0].purchase_frequency
      - name: brand_affinity_score
        type: string
        mapping: $.data[0].brand_affinity
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-consumer-insights-query.yml

Publishes a sponsored content post to a L'Oréal LinkedIn brand page and records the post ID in Salesforce for attribution tracking.

naftiko: '0.5'
info:
  label: LinkedIn Brand Campaign Publisher
  description: Publishes a sponsored content post to a L'Oréal LinkedIn brand page and records the post ID in Salesforce for attribution tracking.
  tags:
  - marketing
  - social
  - linkedin
  - salesforce
  - content
capability:
  exposes:
  - type: mcp
    namespace: social-publishing
    port: 8080
    tools:
    - name: publish-linkedin-post
      description: Given post copy, image URL, and a Salesforce campaign ID, publish a LinkedIn sponsored content post on the brand page and log the post ID back to the Salesforce campaign record.
      inputParameters:
      - name: org_urn
        type: string
        description: LinkedIn organization URN for the brand page.
      - name: post_text
        type: string
        description: Post copy text to publish.
      - name: image_url
        type: string
        description: URL of the image asset to attach.
      - name: campaign_id
        type: string
        description: Salesforce campaign record ID for attribution.
      steps:
      - name: publish-post
        type: call
        call: linkedin.create-post
        with:
          author: '{{org_urn}}'
          commentary: '{{post_text}}'
          content_url: '{{image_url}}'
      - name: update-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{campaign_id}}'
          LinkedIn_Post_ID__c: '{{publish-post.id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /posts
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
Open in Framework → View in Fleet → linkedin-brand-campaign-publisher.yml

Assesses ingredient safety by pulling INCI data from SharePoint, checking regulatory status in Snowflake, and creating a Jira review ticket for the toxicology team.

naftiko: '0.5'
info:
  label: Ingredient Safety Assessment Workflow
  description: Assesses ingredient safety by pulling INCI data from SharePoint, checking regulatory status in Snowflake, and creating a Jira review ticket for the toxicology team.
  tags:
  - r-and-d
  - quality
  - regulatory
  - sharepoint
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: ingredient-safety
    port: 8080
    tools:
    - name: assess-ingredient-safety
      description: Conduct an ingredient safety assessment by gathering INCI data, checking regulatory status, and routing for toxicology review.
      inputParameters:
      - name: ingredient_name
        type: string
        description: INCI ingredient name.
      - name: concentration_pct
        type: number
        description: Proposed concentration percentage.
      steps:
      - name: get-inci-docs
        type: call
        call: sharepoint.search-docs
        with:
          query: '{{ingredient_name}} safety INCI'
          site: rd-safety
      - name: check-regulatory
        type: call
        call: snowflake.execute-query
        with:
          warehouse: REGULATORY_WH
          query: SELECT status, max_concentration, restricted_markets FROM ingredient_regulatory WHERE inci_name='{{ingredient_name}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: SAFETY
          issuetype: Task
          summary: 'Ingredient safety review: {{ingredient_name}} at {{concentration_pct}}%'
          description: 'Regulatory status: {{check-regulatory.status}}. Max allowed: {{check-regulatory.max_concentration}}%. Documents found: {{get-inci-docs.count}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/rd-safety/drive/root/search
      operations:
      - name: search-docs
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → ingredient-safety-assessment-workflow.yml

Assesses supply chain risk by analyzing supplier concentration in Snowflake, checking SAP Ariba supplier status, and posting risk alerts to Teams.

naftiko: '0.5'
info:
  label: Supply Chain Risk Assessment Workflow
  description: Assesses supply chain risk by analyzing supplier concentration in Snowflake, checking SAP Ariba supplier status, and posting risk alerts to Teams.
  tags:
  - supply-chain
  - procurement
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-risk
    port: 8080
    tools:
    - name: assess-supply-chain-risk
      description: Assess supply chain risk by analyzing supplier concentration and geopolitical exposure.
      inputParameters:
      - name: material_group
        type: string
        description: SAP material group to assess.
      steps:
      - name: get-concentration
        type: call
        call: snowflake.execute-query
        with:
          warehouse: SUPPLY_CHAIN_WH
          query: SELECT supplier_id, spend_share_pct, country, risk_score FROM supplier_concentration WHERE material_group='{{material_group}}' ORDER BY spend_share_pct DESC
      - name: get-supplier-status
        type: call
        call: ariba.get-supplier-risk
        with:
          material_group: '{{material_group}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-risk
          text: 'Supply chain risk for {{material_group}}: Top supplier share {{get-concentration.top_share}}%. High-risk suppliers: {{get-supplier-status.high_risk_count}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: risk
      path: /suppliers/risk
      operations:
      - name: get-supplier-risk
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-risk-assessment-workflow.yml

Processes credit memos by validating the original invoice in SAP, creating the credit memo, and updating the Salesforce account with the credit balance.

naftiko: '0.5'
info:
  label: SAP Credit Memo Processing Workflow
  description: Processes credit memos by validating the original invoice in SAP, creating the credit memo, and updating the Salesforce account with the credit balance.
  tags:
  - finance
  - sales
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: finance-ar
    port: 8080
    tools:
    - name: process-credit-memo
      description: Process a credit memo by validating the original invoice, creating the credit document, and updating the customer account.
      inputParameters:
      - name: invoice_number
        type: string
        description: Original SAP invoice number.
      - name: credit_amount
        type: number
        description: Credit amount to issue.
      - name: reason
        type: string
        description: Reason for credit memo.
      steps:
      - name: validate-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: create-credit-memo
        type: call
        call: sap.create-credit-memo
        with:
          reference_invoice: '{{invoice_number}}'
          amount: '{{credit_amount}}'
          reason: '{{reason}}'
      - name: update-sf-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{validate-invoice.customer_id}}'
          Credit_Balance__c: '{{credit_amount}}'
          Last_Credit_Memo__c: '{{create-credit-memo.document_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://loreal-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: billing
      path: /A_BillingDocument
      operations:
      - name: get-invoice
        method: GET
      - name: create-credit-memo
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → sap-credit-memo-processing-workflow.yml

Reviews the R&D patent portfolio by querying SharePoint for patent documents, pulling innovation metrics from Snowflake, and creating a review summary in Jira.

naftiko: '0.5'
info:
  label: R&D Patent Portfolio Review
  description: Reviews the R&D patent portfolio by querying SharePoint for patent documents, pulling innovation metrics from Snowflake, and creating a review summary in Jira.
  tags:
  - r-and-d
  - innovation
  - sharepoint
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: rd-innovation
    port: 8080
    tools:
    - name: review-patent-portfolio
      description: Review the patent portfolio by pulling documents, analyzing metrics, and creating a summary task.
      inputParameters:
      - name: technology_area
        type: string
        description: Technology area for patent review.
      - name: review_year
        type: string
        description: Year for the review.
      steps:
      - name: get-patents
        type: call
        call: sharepoint.search-docs
        with:
          query: patent {{technology_area}} {{review_year}}
          site: rd-innovation
      - name: get-metrics
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RD_ANALYTICS_WH
          query: SELECT patent_count, pending_count, granted_count FROM patent_metrics WHERE tech_area='{{technology_area}}' AND year='{{review_year}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: RND
          issuetype: Task
          summary: 'Patent portfolio review: {{technology_area}} ({{review_year}})'
          description: 'Total patents: {{get-metrics.patent_count}}. Pending: {{get-metrics.pending_count}}. Granted: {{get-metrics.granted_count}}. Documents found: {{get-patents.count}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/rd-innovation/drive/root/search
      operations:
      - name: search-docs
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://loreal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://loreal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → r-d-patent-portfolio-review.yml

Pulls YouTube channel analytics, compares with campaign targets in Salesforce, and posts a performance digest to the marketing Teams channel.

naftiko: '0.5'
info:
  label: YouTube Brand Channel Performance Digest
  description: Pulls YouTube channel analytics, compares with campaign targets in Salesforce, and posts a performance digest to the marketing Teams channel.
  tags:
  - marketing
  - social
  - youtube
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video-analytics
    port: 8080
    tools:
    - name: generate-youtube-digest
      description: Generate a YouTube brand channel performance digest by combining analytics with campaign targets.
      inputParameters:
      - name: channel_id
        type: string
        description: YouTube channel ID.
      - name: campaign_id
        type: string
        description: Salesforce campaign ID.
      steps:
      - name: get-channel-stats
        type: call
        call: youtube.get-channel-analytics
        with:
          channel_id: '{{channel_id}}'
      - name: get-campaign-targets
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-digital
          text: 'YouTube digest: Views {{get-channel-stats.views}}, Subs {{get-channel-stats.subscribers}}. Target views: {{get-campaign-targets.video_target}}.'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/youtube/v3
    authentication:
      type: bearer
      token: $secrets.google_youtube_token
    resources:
    - name: analytics
      path: /channels
      operations:
      - name: get-channel-analytics
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - 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: send-message
        method: POST
Open in Framework → View in Fleet → youtube-brand-channel-performance-digest.yml

When an access request is approved in ServiceNow, provisions the requested Okta group membership and confirms via Teams.

naftiko: '0.5'
info:
  label: Okta Access Request Provisioning
  description: When an access request is approved in ServiceNow, provisions the requested Okta group membership and confirms via Teams.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: provision-access
      description: Given an approved ServiceNow access request ticket, assign the user to the corresponding Okta group and update the ticket status to resolved. Use for access provisioning automation.
      inputParameters:
      - name: snow_ticket_id
        type: string
        description: ServiceNow request ticket sys_id.
      - name: user_email
        type: string
        description: User email address to provision access for.
      - name: okta_group_id
        type: string
        description: Okta group ID to assign the user to.
      steps:
      - name: add-to-group
        type: call
        call: okta.add-user-to-group
        with:
          groupId: '{{okta_group_id}}'
          userId: '{{user_email}}'
      - name: resolve-ticket
        type: call
        call: servicenow.update-request
        with:
          sys_id: '{{snow_ticket_id}}'
          state: '3'
          close_notes: Access provisioned to Okta group {{okta_group_id}}
      - name: notify-user
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{user_email}}'
          text: 'Your access request has been fulfilled. You now have access to the requested resources (Okta group: {{okta_group_id}}).'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://loreal.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{groupId}}/users/{{userId}}
      inputParameters:
      - name: groupId
        in: path
      - name: userId
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://loreal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-request
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-access-request-provisioning.yml

Processes a salon professional order by creating a Salesforce order, triggering SAP sales order creation, and sending an order confirmation via email through Microsoft Graph.

naftiko: '0.5'
info:
  label: Salon Professional Order Processing
  description: Processes a salon professional order by creating a Salesforce order, triggering SAP sales order creation, and sending an order confirmation via email through Microsoft Graph.
  tags:
  - sales
  - supply-chain
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salon-sales
    port: 8080
    tools:
    - name: process-salon-order
      description: Process a salon professional order by creating CRM and ERP records and sending confirmation.
      inputParameters:
      - name: salon_account_id
        type: string
        description: Salesforce salon account ID.
      - name: product_list
        type: string
        description: JSON array of products and quantities.
      steps:
      - name: create-sf-order
        type: call
        call: salesforce.create-order
        with:
          AccountId: '{{salon_account_id}}'
          Status: Draft
          products: '{{product_list}}'
      - name: create-sap-order
        type: call
        call: sap.create-sales-order
        with:
          customer: '{{salon_account_id}}'
          items: '{{product_list}}'
          sf_reference: '{{create-sf-order.id}}'
      - name: send-confirmation
        type: call
        call: msgraph.send-mail
        with:
          to: '{{create-sf-order.contact_email}}'
          subject: 'Order confirmation: {{create-sf-order.OrderNumber}}'
          body: 'Your order {{create-sf-order.OrderNumber}} has been placed. SAP reference: {{create-sap-order.order_number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://loreal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: sap
    baseUri: https://loreal-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
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → salon-professional-order-processing.yml

Personalizes luxury gifts by pulling client preferences from Salesforce, recommending products from the catalog, creating gift packages, and sending confirmations via WhatsApp.

naftiko: '0.5'
info:
  label: Luxury Gifting Personalization Pipeline
  description: Personalizes luxury gifts by pulling client preferences from Salesforce, recommending products from the catalog, creating gift packages, and sending confirmations via WhatsApp.
  tags:
  - gifting
  - personalization
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-gifting-personalization
      description: Personalizes luxury gifts.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Gifting Personalization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-gifting-personalization-pipeline.yml

Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion.

naftiko: '0.5'
info:
  label: Zendesk Luxury Service Ticket
  description: Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion.
  tags:
  - after-sales
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: after-sales
    port: 8080
    tools:
    - name: zendesk_luxury_service_ticket
      description: Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: zendesk.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://lvmh-zendesk.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → zendesk-luxury-service-ticket.yml

Retrieves atelier artisan workforce data from Workday including skill certifications and capacity.

naftiko: '0.5'
info:
  label: Workday Atelier Workforce Lookup
  description: Retrieves atelier artisan workforce data from Workday including skill certifications and capacity.
  tags:
  - workforce
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: workday_atelier_workforce_lookup
      description: Retrieves atelier artisan workforce data from Workday including skill certifications and capacity..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: workday.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: workday
    baseUri: https://lvmh-workday.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → workday-atelier-workforce-lookup.yml

Fetches a digital asset entry from Contentful CMS by entry ID, returning asset URL, title, description, and associated Maison tag.

naftiko: '0.5'
info:
  label: Contentful Asset Retrieval
  description: Fetches a digital asset entry from Contentful CMS by entry ID, returning asset URL, title, description, and associated Maison tag.
  tags:
  - content-management
  - digital-asset
  - contentful
capability:
  exposes:
  - type: mcp
    namespace: cms
    port: 8080
    tools:
    - name: get-asset
      description: Retrieve a Contentful CMS asset by entry ID. Returns asset URL, title, description, and Maison tag.
      inputParameters:
      - name: entry_id
        in: body
        type: string
        description: The Contentful entry ID.
      call: contentful.get-entry
      with:
        entry_id: '{{entry_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.fields.title
      - name: asset_url
        type: string
        mapping: $.fields.file.url
      - name: maison
        type: string
        mapping: $.fields.maisonTag
  consumes:
  - type: http
    namespace: contentful
    baseUri: https://cdn.contentful.com/spaces/lvmh_space_id
    authentication:
      type: bearer
      token: $secrets.contentful_token
    resources:
    - name: entries
      path: /entries/{{entry_id}}
      inputParameters:
      - name: entry_id
        in: path
      operations:
      - name: get-entry
        method: GET
Open in Framework → View in Fleet → contentful-asset-retrieval.yml

Reviews luxury packaging designs by collecting submissions from the DAM, routing for approval in Jira, tracking feedback in Confluence, and notifying the creative team.

naftiko: '0.5'
info:
  label: Luxury Packaging Design Review Pipeline
  description: Reviews luxury packaging designs by collecting submissions from the DAM, routing for approval in Jira, tracking feedback in Confluence, and notifying the creative team.
  tags:
  - packaging
  - design
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-packaging-design-review
      description: Reviews luxury packaging designs.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Packaging Design Review Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-packaging-design-review-pipeline.yml

Consolidates financial data across LVMH maisons by extracting from SAP, harmonizing in Snowflake, generating consolidated reports in Power BI, and distributing to CFO office.

naftiko: '0.5'
info:
  label: Maison Financial Consolidation Pipeline
  description: Consolidates financial data across LVMH maisons by extracting from SAP, harmonizing in Snowflake, generating consolidated reports in Power BI, and distributing to CFO office.
  tags:
  - finance
  - consolidation
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: maison-ops
    port: 8080
    tools:
    - name: maison-financial-consolidation
      description: Consolidates financial data across LVMH maisons.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Maison Financial Consolidation Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → maison-financial-consolidation-pipeline.yml

Retrieves a Stripe payment intent by ID to check payment status, amount, and currency for LVMH e-commerce transactions.

naftiko: '0.5'
info:
  label: Stripe Payment Intent Lookup
  description: Retrieves a Stripe payment intent by ID to check payment status, amount, and currency for LVMH e-commerce transactions.
  tags:
  - payments
  - e-commerce
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment-intent
      description: Retrieve a Stripe payment intent by ID. Returns status, amount, currency, and payment method.
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: The Stripe payment intent ID (pi_xxx).
      call: stripe.get-payment-intent
      with:
        pi_id: '{{payment_intent_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.amount
      - name: currency
        type: string
        mapping: $.currency
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{pi_id}}
      inputParameters:
      - name: pi_id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
Open in Framework → View in Fleet → stripe-payment-intent-lookup.yml

Launches a multi-channel marketing campaign by creating a Klaviyo campaign, publishing Contentful content, and tracking the campaign in Google Analytics.

naftiko: '0.5'
info:
  label: Brand Campaign Launch Orchestrator
  description: Launches a multi-channel marketing campaign by creating a Klaviyo campaign, publishing Contentful content, and tracking the campaign in Google Analytics.
  tags:
  - marketing
  - brand-management
  - klaviyo
  - contentful
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: campaign-launch
    port: 8080
    tools:
    - name: launch-campaign
      description: Given a campaign name, content entry ID, and email list ID, publish CMS content, create Klaviyo campaign, and register GA tracking.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The name of the marketing campaign.
      - name: content_entry_id
        in: body
        type: string
        description: The Contentful entry ID for campaign content.
      - name: email_list_id
        in: body
        type: string
        description: The Klaviyo list ID for target audience.
      - name: maison
        in: body
        type: string
        description: The Maison brand (e.g., Louis Vuitton, Dior, Fendi).
      steps:
      - name: get-content
        type: call
        call: contentful.get-entry
        with:
          entry_id: '{{content_entry_id}}'
      - name: publish-content
        type: call
        call: contentful.publish-entry
        with:
          entry_id: '{{content_entry_id}}'
      - name: create-email-campaign
        type: call
        call: klaviyo.create-campaign
        with:
          name: '{{campaign_name}} — {{maison}}'
          list_id: '{{email_list_id}}'
          subject: '{{get-content.fields.emailSubject}}'
          template_html: '{{get-content.fields.emailBody}}'
  consumes:
  - type: http
    namespace: contentful
    baseUri: https://api.contentful.com/spaces/lvmh_space_id/environments/master
    authentication:
      type: bearer
      token: $secrets.contentful_mgmt_token
    resources:
    - name: entries
      path: /entries/{{entry_id}}
      inputParameters:
      - name: entry_id
        in: path
      operations:
      - name: get-entry
        method: GET
      - name: publish-entry
        method: PUT
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → brand-campaign-launch-orchestrator.yml

Syncs boutique associate schedules from Workday to Microsoft Teams shifts, creating shift entries and sending confirmation notifications to each associate.

naftiko: '0.5'
info:
  label: Store Associate Scheduling Sync
  description: Syncs boutique associate schedules from Workday to Microsoft Teams shifts, creating shift entries and sending confirmation notifications to each associate.
  tags:
  - retail
  - hr
  - scheduling
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scheduling
    port: 8080
    tools:
    - name: sync-boutique-schedule
      description: Given a Workday location ID and schedule date, pull associate shifts from Workday and create corresponding Teams shift entries.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Workday location ID for the boutique.
      - name: schedule_date
        in: body
        type: string
        description: The schedule date in YYYY-MM-DD format.
      steps:
      - name: get-shifts
        type: call
        call: workday.get-schedules
        with:
          location: '{{location_id}}'
          date: '{{schedule_date}}'
      - name: create-teams-shifts
        type: call
        call: msteams.create-shift
        with:
          teamId: boutique_{{location_id}}
          startDateTime: '{{get-shifts.shifts[0].start_time}}'
          endDateTime: '{{get-shifts.shifts[0].end_time}}'
          userId: '{{get-shifts.shifts[0].worker_upn}}'
      - name: notify-associates
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-shifts.shifts[0].worker_upn}}'
          text: 'Your shift on {{schedule_date}} is confirmed: {{get-shifts.shifts[0].start_time}} to {{get-shifts.shifts[0].end_time}}.'
  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: /schedules?location={{location}}&date={{date}}
      inputParameters:
      - name: location
        in: query
      - name: date
        in: query
      operations:
      - name: get-schedules
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: shifts
      path: /teams/{{teamId}}/schedule/shifts
      inputParameters:
      - name: teamId
        in: path
      operations:
      - name: create-shift
        method: POST
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-associate-scheduling-sync.yml

Retrieves VIP client profile details from Salesforce including purchase history and brand preferences.

naftiko: '0.5'
info:
  label: Salesforce VIP Client Lookup
  description: Retrieves VIP client profile details from Salesforce including purchase history and brand preferences.
  tags:
  - clienteling
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: clienteling
    port: 8080
    tools:
    - name: salesforce_vip_client_lookup
      description: Retrieves VIP client profile details from Salesforce including purchase history and brand preferences..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: salesforce.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh-salesforce.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → salesforce-vip-client-lookup.yml

Generates a transformed image URL from Cloudinary for a given public ID, applying brand-standard transformations for luxury product imagery.

naftiko: '0.5'
info:
  label: Cloudinary Image URL Generator
  description: Generates a transformed image URL from Cloudinary for a given public ID, applying brand-standard transformations for luxury product imagery.
  tags:
  - digital-asset
  - media
  - cloudinary
capability:
  exposes:
  - type: mcp
    namespace: media
    port: 8080
    tools:
    - name: get-image-url
      description: Generate a Cloudinary image URL with luxury-standard transformations for a given public ID.
      inputParameters:
      - name: public_id
        in: body
        type: string
        description: The Cloudinary public ID of the image.
      call: cloudinary.get-resource
      with:
        public_id: '{{public_id}}'
      outputParameters:
      - name: secure_url
        type: string
        mapping: $.secure_url
      - name: format
        type: string
        mapping: $.format
  consumes:
  - type: http
    namespace: cloudinary
    baseUri: https://api.cloudinary.com/v1_1/lvmh
    authentication:
      type: basic
      username: $secrets.cloudinary_api_key
      password: $secrets.cloudinary_api_secret
    resources:
    - name: resources
      path: /resources/image/upload/{{public_id}}
      inputParameters:
      - name: public_id
        in: path
      operations:
      - name: get-resource
        method: GET
Open in Framework → View in Fleet → cloudinary-image-url-generator.yml

Executes a product search query against the Algolia index, returning matching products with facets for brand, category, and price range.

naftiko: '0.5'
info:
  label: Algolia Search Query
  description: Executes a product search query against the Algolia index, returning matching products with facets for brand, category, and price range.
  tags:
  - e-commerce
  - search
  - algolia
capability:
  exposes:
  - type: mcp
    namespace: search
    port: 8080
    tools:
    - name: search-products
      description: Execute a product search query on Algolia. Returns matching products with brand, category, and price facets.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search query string.
      - name: brand_filter
        in: body
        type: string
        description: Optional brand facet filter (e.g., Louis Vuitton, Dior).
      call: algolia.search
      with:
        query: '{{query}}'
        facetFilters: brand:{{brand_filter}}
  consumes:
  - type: http
    namespace: algolia
    baseUri: https://lvmh-app.algolia.net/1/indexes/products
    authentication:
      type: bearer
      token: $secrets.algolia_api_key
    inputParameters:
    - name: X-Algolia-Application-Id
      in: header
      value: $secrets.algolia_app_id
    resources:
    - name: search
      path: /query
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → algolia-search-query.yml

Launches luxury e-commerce experiences by syncing product catalog from SAP, configuring Shopify storefront, loading content from the DAM, and notifying digital teams.

naftiko: '0.5'
info:
  label: Luxury E-Commerce Launch Orchestrator
  description: Launches luxury e-commerce experiences by syncing product catalog from SAP, configuring Shopify storefront, loading content from the DAM, and notifying digital teams.
  tags:
  - e-commerce
  - launch
  - sap
  - shopify
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-e-commerce-launch
      description: Launches luxury e-commerce experiences.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury E-Commerce Launch Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-e-commerce-launch-orchestrator.yml

Manages artisan training programs by pulling competency data from Workday, assigning courses in the LMS, tracking completion, and reporting to atelier directors.

naftiko: '0.5'
info:
  label: Atelier Artisan Training Pipeline
  description: Manages artisan training programs by pulling competency data from Workday, assigning courses in the LMS, tracking completion, and reporting to atelier directors.
  tags:
  - training
  - artisans
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: atelier-ops
    port: 8080
    tools:
    - name: atelier-artisan-training
      description: Manages artisan training programs.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Atelier Artisan Training Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → atelier-artisan-training-pipeline.yml

Processes a return request by validating the order in SFCC, initiating a Stripe refund, updating the Salesforce case, and notifying the client via Zendesk.

naftiko: '0.5'
info:
  label: Return and Exchange Processor
  description: Processes a return request by validating the order in SFCC, initiating a Stripe refund, updating the Salesforce case, and notifying the client via Zendesk.
  tags:
  - e-commerce
  - returns
  - salesforce-commerce-cloud
  - stripe
  - salesforce
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: returns
    port: 8080
    tools:
    - name: process-return
      description: Given an order ID, payment intent ID, and client ID, validate the order, issue a refund, update the CRM case, and notify the client.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The SFCC order ID.
      - name: payment_intent_id
        in: body
        type: string
        description: The Stripe payment intent ID.
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: reason
        in: body
        type: string
        description: The return reason.
      steps:
      - name: get-order
        type: call
        call: sfcc.get-order
        with:
          order_no: '{{order_id}}'
      - name: issue-refund
        type: call
        call: stripe.create-refund
        with:
          payment_intent: '{{payment_intent_id}}'
          reason: '{{reason}}'
      - name: update-crm
        type: call
        call: salesforce.create-case
        with:
          ContactId: '{{client_id}}'
          Subject: 'Return processed: Order {{order_id}}'
          Description: 'Refund {{issue-refund.id}} issued for {{get-order.order_total}}. Reason: {{reason}}.'
          Status: Closed
      - name: notify-client
        type: call
        call: zendesk.create-ticket
        with:
          requester_email: '{{get-order.customer_info.email}}'
          subject: Your return for order {{order_id}} has been processed
          body: 'Your refund of {{get-order.order_total}} has been initiated. Refund reference: {{issue-refund.id}}. Please allow 5-10 business days.'
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: orders
      path: /orders/{{order_no}}
      inputParameters:
      - name: order_no
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.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: zendesk
    baseUri: https://lvmh.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets.json
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → return-and-exchange-processor.yml

Retrieves a subscriber profile from Klaviyo by email address, returning subscription status, lists, and engagement metrics for email marketing.

naftiko: '0.5'
info:
  label: Klaviyo Subscriber Profile
  description: Retrieves a subscriber profile from Klaviyo by email address, returning subscription status, lists, and engagement metrics for email marketing.
  tags:
  - marketing
  - email
  - klaviyo
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: get-subscriber
      description: Look up a Klaviyo subscriber profile by email. Returns subscription status, list memberships, and open/click rates.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The subscriber email address.
      call: klaviyo.get-profile
      with:
        email: '{{email}}'
  consumes:
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    inputParameters:
    - name: revision
      in: header
      value: '2024-02-15'
    resources:
    - name: profiles
      path: /profiles/?filter=equals(email,'{{email}}')
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-profile
        method: GET
Open in Framework → View in Fleet → klaviyo-subscriber-profile.yml

Orchestrates haute couture collection launches by syncing designs from the PLM system, creating production orders in SAP, scheduling ateliers, and coordinating press via Teams.

naftiko: '0.5'
info:
  label: Haute Couture Collection Launch Orchestrator
  description: Orchestrates haute couture collection launches by syncing designs from the PLM system, creating production orders in SAP, scheduling ateliers, and coordinating press via Teams.
  tags:
  - fashion
  - collection-launch
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: haute-ops
    port: 8080
    tools:
    - name: haute-couture-collection-launch
      description: Orchestrates haute couture collection launches.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Haute Couture Collection Launch Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → haute-couture-collection-launch-orchestrator.yml

Retrieves a point-of-sale transaction from Shopify POS by transaction ID, returning payment details, line items, and store location.

naftiko: '0.5'
info:
  label: Shopify POS Transaction Lookup
  description: Retrieves a point-of-sale transaction from Shopify POS by transaction ID, returning payment details, line items, and store location.
  tags:
  - retail
  - pos
  - shopify
capability:
  exposes:
  - type: mcp
    namespace: pos
    port: 8080
    tools:
    - name: get-pos-transaction
      description: Retrieve a Shopify POS transaction by ID. Returns payment method, line items, store location, and associate.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The Shopify POS transaction ID.
      call: shopify.get-order
      with:
        order_id: '{{transaction_id}}'
      outputParameters:
      - name: total_price
        type: string
        mapping: $.order.total_price
      - name: payment_method
        type: string
        mapping: $.order.payment_gateway_names[0]
      - name: location
        type: string
        mapping: $.order.location_id
  consumes:
  - type: http
    namespace: shopify
    baseUri: https://lvmh-retail.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: orders
      path: /orders/{{order_id}}.json
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → shopify-pos-transaction-lookup.yml

Processes a luxury item repair request by creating a Salesforce case, logging the item details from SAP serial lookup, and scheduling a courier pickup via ShipStation.

naftiko: '0.5'
info:
  label: Luxury Repair Service Intake
  description: Processes a luxury item repair request by creating a Salesforce case, logging the item details from SAP serial lookup, and scheduling a courier pickup via ShipStation.
  tags:
  - after-sales
  - repair
  - salesforce
  - sap-s4hana
  - shipstation
capability:
  exposes:
  - type: mcp
    namespace: repair-intake
    port: 8080
    tools:
    - name: intake-repair-request
      description: Given a client ID, serial number, and defect description, create a CRM case, validate the item, and schedule courier pickup.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: serial_number
        in: body
        type: string
        description: The product serial number.
      - name: defect_description
        in: body
        type: string
        description: Description of the repair needed.
      - name: pickup_address
        in: body
        type: string
        description: The client pickup address.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: get-item
        type: call
        call: sap.get-serial
        with:
          serial: '{{serial_number}}'
      - name: create-repair-case
        type: call
        call: salesforce.create-case
        with:
          ContactId: '{{client_id}}'
          Subject: 'Repair request: {{get-item.material_description}} — SN {{serial_number}}'
          Description: '{{defect_description}}. Product: {{get-item.material_description}}. Manufactured: {{get-item.production_date}}.'
          Type: Repair
      - name: schedule-pickup
        type: call
        call: shipstation.create-order
        with:
          orderNumber: REPAIR-{{create-repair-case.id}}
          shipTo_name: LVMH Repair Center
          shipFrom_name: '{{get-client.Name}}'
          shipFrom_address: '{{pickup_address}}'
          serviceCode: courier_pickup
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SERIALNUMBER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: serials
      path: /A_SerialNumber('{{serial}}')
      inputParameters:
      - name: serial
        in: path
      operations:
      - name: get-serial
        method: GET
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/createorder
      operations:
      - name: create-order
        method: POST
Open in Framework → View in Fleet → luxury-repair-service-intake.yml

For international shipments, retrieves product details from SAP, generates customs documentation metadata, and attaches documents to the ShipStation shipment record.

naftiko: '0.5'
info:
  label: Cross-Border Customs Documentation Generator
  description: For international shipments, retrieves product details from SAP, generates customs documentation metadata, and attaches documents to the ShipStation shipment record.
  tags:
  - logistics
  - customs
  - sap-s4hana
  - shipstation
capability:
  exposes:
  - type: mcp
    namespace: customs
    port: 8080
    tools:
    - name: generate-customs-docs
      description: Given a shipment order number and destination country, retrieve material data from SAP and update ShipStation with customs information.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The ShipStation order number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: destination_country
        in: body
        type: string
        description: The destination country ISO code.
      - name: declared_value
        in: body
        type: number
        description: The declared customs value.
      steps:
      - name: get-material-details
        type: call
        call: sap.get-material
        with:
          material: '{{material_number}}'
      - name: update-shipment-customs
        type: call
        call: shipstation.update-order
        with:
          order_number: '{{order_number}}'
          customs_country: '{{destination_country}}'
          customs_value: '{{declared_value}}'
          hs_tariff_number: '{{get-material-details.hs_code}}'
          description: '{{get-material-details.description}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: materials
      path: /A_Product('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/createorder
      operations:
      - name: update-order
        method: POST
Open in Framework → View in Fleet → cross-border-customs-documentation-generator.yml

When a new seasonal collection is priced, updates product prices in SFCC, syncs to Algolia search index, and triggers a price-change notification to regional merchandising via Microsoft Teams.

naftiko: '0.5'
info:
  label: Seasonal Collection Pricing Sync
  description: When a new seasonal collection is priced, updates product prices in SFCC, syncs to Algolia search index, and triggers a price-change notification to regional merchandising via Microsoft Teams.
  tags:
  - merchandising
  - pricing
  - salesforce-commerce-cloud
  - algolia
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing
    port: 8080
    tools:
    - name: sync-collection-pricing
      description: Given a product SKU, new price, currency, and merchandising channel, update SFCC, Algolia, and notify the regional team.
      inputParameters:
      - name: sku
        in: body
        type: string
        description: The product SKU.
      - name: new_price
        in: body
        type: number
        description: The new retail price.
      - name: currency
        in: body
        type: string
        description: The currency code (EUR, USD, GBP, etc.).
      - name: region_channel_upn
        in: body
        type: string
        description: The Teams UPN of the regional merchandising lead.
      steps:
      - name: update-sfcc-price
        type: call
        call: sfcc.update-product-price
        with:
          product_id: '{{sku}}'
          price: '{{new_price}}'
          currency: '{{currency}}'
      - name: update-algolia
        type: call
        call: algolia.partial-update
        with:
          objectID: '{{sku}}'
          price: '{{new_price}}'
          currency: '{{currency}}'
      - name: notify-merchandising
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{region_channel_upn}}'
          text: 'Price update: SKU {{sku}} now {{currency}} {{new_price}}. SFCC and search index updated.'
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: products
      path: /products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: update-product-price
        method: PATCH
  - type: http
    namespace: algolia
    baseUri: https://lvmh-app.algolia.net/1/indexes/products
    authentication:
      type: bearer
      token: $secrets.algolia_api_key
    inputParameters:
    - name: X-Algolia-Application-Id
      in: header
      value: $secrets.algolia_app_id
    resources:
    - name: objects
      path: /{{objectID}}/partial
      inputParameters:
      - name: objectID
        in: path
      operations:
      - name: partial-update
        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
Open in Framework → View in Fleet → seasonal-collection-pricing-sync.yml

Queries Google Trends API for luxury brand sentiment and search interest data across markets.

naftiko: '0.5'
info:
  label: Google Trends Luxury Sentiment
  description: Queries Google Trends API for luxury brand sentiment and search interest data across markets.
  tags:
  - market-intelligence
  - google
capability:
  exposes:
  - type: mcp
    namespace: market-intelligence
    port: 8080
    tools:
    - name: google_trends_luxury_sentiment
      description: Queries Google Trends API for luxury brand sentiment and search interest data across markets..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: google.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: google
    baseUri: https://lvmh-google.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → google-trends-luxury-sentiment.yml

After a purchase, waits for delivery confirmation from ShipStation, then triggers a Klaviyo post-purchase survey email and creates a Salesforce follow-up task for the sales associate.

naftiko: '0.5'
info:
  label: Clienteling After-Sales Follow-Up
  description: After a purchase, waits for delivery confirmation from ShipStation, then triggers a Klaviyo post-purchase survey email and creates a Salesforce follow-up task for the sales associate.
  tags:
  - clienteling
  - after-sales
  - shipstation
  - klaviyo
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: after-sales
    port: 8080
    tools:
    - name: trigger-after-sales-followup
      description: Given an order ID and client ID, check delivery status, trigger post-purchase email, and create a CRM follow-up task.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The order ID.
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: associate_id
        in: body
        type: string
        description: The Salesforce user ID of the sales associate.
      steps:
      - name: get-shipment
        type: call
        call: shipstation.get-shipment
        with:
          order_number: '{{order_id}}'
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: send-survey
        type: call
        call: klaviyo.send-event
        with:
          email: '{{get-client.Email}}'
          event: Post_Purchase_Survey
          properties: '{order_id: ''{{order_id}}'', delivery_date: ''{{get-shipment.ship_date}}''}'
      - name: create-followup-task
        type: call
        call: salesforce.create-task
        with:
          WhoId: '{{client_id}}'
          OwnerId: '{{associate_id}}'
          Subject: 'Post-purchase follow-up: Order {{order_id}}'
          Description: Delivered on {{get-shipment.ship_date}}. Survey sent. Follow up with {{get-client.FirstName}} within 7 days.
          ActivityDate: '{{get-shipment.ship_date}}'
  consumes:
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: shipments
      path: /shipments?orderNumber={{order_number}}
      inputParameters:
      - name: order_number
        in: query
      operations:
      - name: get-shipment
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → clienteling-after-sales-follow-up.yml

Enriches client profiles by aggregating purchase history from SAP, social engagement from Instagram, service interactions from Zendesk, and consolidating in Salesforce.

naftiko: '0.5'
info:
  label: Luxury Client 360 Enrichment Pipeline
  description: Enriches client profiles by aggregating purchase history from SAP, social engagement from Instagram, service interactions from Zendesk, and consolidating in Salesforce.
  tags:
  - clienteling
  - client-360
  - sap
  - salesforce
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-client-360-enrichment
      description: Enriches client profiles.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Client 360 Enrichment Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-client-360-enrichment-pipeline.yml

Pulls supplier sustainability metrics from SAP, cross-references with compliance records in ServiceNow, and generates a dashboard update posted to the ESG Slack channel.

naftiko: '0.5'
info:
  label: Sustainability Compliance Tracker
  description: Pulls supplier sustainability metrics from SAP, cross-references with compliance records in ServiceNow, and generates a dashboard update posted to the ESG Slack channel.
  tags:
  - sustainability
  - compliance
  - sap-s4hana
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: track-sustainability-compliance
      description: Given a supplier ID, pull sustainability data from SAP, check compliance status in ServiceNow, and post a summary to the ESG channel.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for ESG/sustainability reporting.
      steps:
      - name: get-supplier-data
        type: call
        call: sap.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: get-compliance-records
        type: call
        call: servicenow.get-compliance
        with:
          supplier_id: '{{supplier_id}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sustainability Report — Supplier {{get-supplier-data.name}} ({{supplier_id}}): Compliance status: {{get-compliance-records.status}}. Last audit: {{get-compliance-records.last_audit_date}}. Certifications: {{get-supplier-data.certifications}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: suppliers
      path: /A_Supplier('{{supplier_id}}')
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance
      path: /table/u_supplier_compliance?sysparm_query=u_supplier_id={{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: query
      operations:
      - name: get-compliance
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sustainability-compliance-tracker.yml

Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences.

naftiko: '0.5'
info:
  label: Contentstack Editorial Content Lookup
  description: Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences.
  tags:
  - content
  - contentstack
capability:
  exposes:
  - type: mcp
    namespace: content
    port: 8080
    tools:
    - name: contentstack_editorial_content_lookup
      description: Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: contentstack.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: contentstack
    baseUri: https://lvmh-contentstack.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.contentstack_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → contentstack-editorial-content-lookup.yml

Validates a product serial number against the SAP master data, checks blockchain provenance records, and logs the authentication event in Salesforce for traceability.

naftiko: '0.5'
info:
  label: Anti-Counterfeit Product Authentication
  description: Validates a product serial number against the SAP master data, checks blockchain provenance records, and logs the authentication event in Salesforce for traceability.
  tags:
  - brand-protection
  - authentication
  - sap-s4hana
  - salesforce
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: brand-protection
    port: 8080
    tools:
    - name: authenticate-product
      description: Given a product serial number, validate against SAP master data, check provenance, and log the authentication event in Salesforce.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The product serial number or NFC tag ID.
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID of the client requesting authentication.
      steps:
      - name: check-sap-master
        type: call
        call: sap.get-serial
        with:
          serial: '{{serial_number}}'
      - name: log-authentication
        type: call
        call: salesforce.create-event
        with:
          WhoId: '{{client_id}}'
          Subject: 'Product Authentication: {{serial_number}}'
          Description: 'Serial {{serial_number}} verified. Material: {{check-sap-master.material_number}}. Production date: {{check-sap-master.production_date}}. Origin: {{check-sap-master.plant}}.'
          Type: Authentication
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SERIALNUMBER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: serials
      path: /A_SerialNumber('{{serial}}')
      inputParameters:
      - name: serial
        in: path
      operations:
      - name: get-serial
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: events
      path: /sobjects/Event
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → anti-counterfeit-product-authentication.yml

Queries SAP S/4HANA for real-time inventory levels of a given material number across LVMH warehouses.

naftiko: '0.5'
info:
  label: Inventory Stock Check
  description: Queries SAP S/4HANA for real-time inventory levels of a given material number across LVMH warehouses.
  tags:
  - supply-chain
  - inventory
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: check-stock
      description: Check real-time inventory levels for a material number across all LVMH distribution centers in SAP S/4HANA.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-material-stock
      with:
        material: '{{material_number}}'
      outputParameters:
      - name: total_stock
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
      - name: plant
        type: string
        mapping: $.d.Plant
      - name: storage_location
        type: string
        mapping: $.d.StorageLocation
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-stock
        method: GET
Open in Framework → View in Fleet → inventory-stock-check.yml

Sources perfume ingredients by checking availability from suppliers in SAP, evaluating quality certificates, placing orders, and tracking shipments.

naftiko: '0.5'
info:
  label: Perfume Ingredient Sourcing Orchestrator
  description: Sources perfume ingredients by checking availability from suppliers in SAP, evaluating quality certificates, placing orders, and tracking shipments.
  tags:
  - sourcing
  - perfume
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: perfume-ops
    port: 8080
    tools:
    - name: perfume-ingredient-sourcing
      description: Sources perfume ingredients.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Perfume Ingredient Sourcing Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → perfume-ingredient-sourcing-orchestrator.yml

Manages influencer collaborations by tracking campaigns in HubSpot, measuring reach via Instagram API, calculating ROI in Snowflake, and reporting to marketing directors.

naftiko: '0.5'
info:
  label: Influencer Collaboration Orchestrator
  description: Manages influencer collaborations by tracking campaigns in HubSpot, measuring reach via Instagram API, calculating ROI in Snowflake, and reporting to marketing directors.
  tags:
  - marketing
  - influencer
  - hubspot
  - instagram
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: influencer-ops
    port: 8080
    tools:
    - name: influencer-collaboration
      description: Manages influencer collaborations.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Influencer Collaboration Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → influencer-collaboration-orchestrator.yml

Plans watch service center capacity by analyzing repair volumes in ServiceNow, forecasting demand in Snowflake, scheduling technicians in Workday, and reporting to management.

naftiko: '0.5'
info:
  label: Watch Service Center Capacity Pipeline
  description: Plans watch service center capacity by analyzing repair volumes in ServiceNow, forecasting demand in Snowflake, scheduling technicians in Workday, and reporting to management.
  tags:
  - watches
  - service-capacity
  - servicenow
  - snowflake
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: watch-ops
    port: 8080
    tools:
    - name: watch-service-center-capacity
      description: Plans watch service center capacity.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Watch Service Center Capacity Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → watch-service-center-capacity-pipeline.yml

Manages fragrance batch quality by pulling lab test results, comparing against specifications in SAP, releasing or holding batches, and notifying production teams.

naftiko: '0.5'
info:
  label: Fragrance Batch Quality Pipeline
  description: Manages fragrance batch quality by pulling lab test results, comparing against specifications in SAP, releasing or holding batches, and notifying production teams.
  tags:
  - fragrance
  - quality
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fragrance-ops
    port: 8080
    tools:
    - name: fragrance-batch-quality
      description: Manages fragrance batch quality.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Fragrance Batch Quality Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fragrance-batch-quality-pipeline.yml

When a Zendesk ticket is escalated, fetches the client profile from Salesforce, retrieves the associated order from SFCC, and sends a resolution notification via Microsoft Teams to the boutique manager.

naftiko: '0.5'
info:
  label: Customer Complaint Resolution Pipeline
  description: When a Zendesk ticket is escalated, fetches the client profile from Salesforce, retrieves the associated order from SFCC, and sends a resolution notification via Microsoft Teams to the boutique manager.
  tags:
  - customer-service
  - zendesk
  - salesforce
  - salesforce-commerce-cloud
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-resolution
    port: 8080
    tools:
    - name: resolve-complaint
      description: Given a Zendesk ticket ID and client email, fetch the ticket, client profile, related order, and notify the boutique manager in Teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: client_email
        in: body
        type: string
        description: The client email address.
      - name: boutique_manager_upn
        in: body
        type: string
        description: The Microsoft Teams UPN of the boutique manager.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: get-client
        type: call
        call: salesforce.get-contact-by-email
        with:
          email: '{{client_email}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{boutique_manager_upn}}'
          text: 'Escalated complaint from {{get-client.Name}} ({{get-client.Loyalty_Tier__c}}). Ticket #{{ticket_id}}: {{get-ticket.ticket.subject}}. Lifetime spend: {{get-client.Lifetime_Spend__c}}. Please review and authorize resolution.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://lvmh.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}.json
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact-by-email
        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
Open in Framework → View in Fleet → customer-complaint-resolution-pipeline.yml

Produces fashion shows by coordinating venue logistics, managing guest lists in Salesforce, scheduling rehearsals, and synchronizing with press teams via Teams.

naftiko: '0.5'
info:
  label: Fashion Show Production Orchestrator
  description: Produces fashion shows by coordinating venue logistics, managing guest lists in Salesforce, scheduling rehearsals, and synchronizing with press teams via Teams.
  tags:
  - events
  - fashion-show
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fashion-ops
    port: 8080
    tools:
    - name: fashion-show-production
      description: Produces fashion shows.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Fashion Show Production Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fashion-show-production-orchestrator.yml

Detects counterfeits by scanning online marketplaces, analyzing listings with AI, creating takedown requests, and reporting to the brand protection team.

naftiko: '0.5'
info:
  label: Brand Protection Counterfeit Detection Pipeline
  description: Detects counterfeits by scanning online marketplaces, analyzing listings with AI, creating takedown requests, and reporting to the brand protection team.
  tags:
  - brand-protection
  - counterfeit
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-ops
    port: 8080
    tools:
    - name: brand-protection-counterfeit-detection
      description: Detects counterfeits.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Brand Protection Counterfeit Detection Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-protection-counterfeit-detection-pipeline.yml

Facilitates talent mobility across maisons by matching profiles in Workday, coordinating transfers in Salesforce, creating onboarding plans in SharePoint, and notifying HR teams.

naftiko: '0.5'
info:
  label: Cross-Maison Talent Mobility Pipeline
  description: Facilitates talent mobility across maisons by matching profiles in Workday, coordinating transfers in Salesforce, creating onboarding plans in SharePoint, and notifying HR teams.
  tags:
  - hr
  - talent-mobility
  - workday
  - salesforce
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cross-ops
    port: 8080
    tools:
    - name: cross-maison-talent-mobility
      description: Facilitates talent mobility across maisons.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Cross-Maison Talent Mobility Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cross-maison-talent-mobility-pipeline.yml

Aggregates daily revenue data from Shopify POS for boutique sales and SFCC for e-commerce, then posts a consolidated summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Multi-Maison Revenue Consolidation
  description: Aggregates daily revenue data from Shopify POS for boutique sales and SFCC for e-commerce, then posts a consolidated summary to the finance Slack channel.
  tags:
  - finance
  - analytics
  - shopify
  - salesforce-commerce-cloud
  - slack
capability:
  exposes:
  - type: mcp
    namespace: revenue-consolidation
    port: 8080
    tools:
    - name: consolidate-daily-revenue
      description: Given a date and Maison, pull POS and e-commerce revenue and post a consolidated summary to Slack.
      inputParameters:
      - name: date
        in: body
        type: string
        description: The date in YYYY-MM-DD format.
      - name: maison
        in: body
        type: string
        description: The Maison brand name.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for finance reporting.
      steps:
      - name: get-pos-revenue
        type: call
        call: shopify.get-orders-by-date
        with:
          created_at_min: '{{date}}T00:00:00Z'
          created_at_max: '{{date}}T23:59:59Z'
      - name: get-ecommerce-revenue
        type: call
        call: sfcc.search-orders
        with:
          created_from: '{{date}}T00:00:00Z'
          created_to: '{{date}}T23:59:59Z'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Daily Revenue — {{maison}} ({{date}}): Boutique POS: {{get-pos-revenue.orders.length}} orders. E-Commerce: {{get-ecommerce-revenue.count}} orders.'
  consumes:
  - type: http
    namespace: shopify
    baseUri: https://lvmh-retail.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: orders
      path: /orders.json?created_at_min={{created_at_min}}&created_at_max={{created_at_max}}
      inputParameters:
      - name: created_at_min
        in: query
      - name: created_at_max
        in: query
      operations:
      - name: get-orders-by-date
        method: GET
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: order-search
      path: /order_search
      operations:
      - name: search-orders
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → multi-maison-revenue-consolidation.yml

Manages luxury repair lifecycles by creating service orders in Zendesk, tracking parts in SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.

naftiko: '0.5'
info:
  label: Luxury Repair Lifecycle Orchestrator
  description: Manages luxury repair lifecycles by creating service orders in Zendesk, tracking parts in SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.
  tags:
  - after-sales
  - repair
  - zendesk
  - sap
  - workday
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-repair-lifecycle
      description: Manages luxury repair lifecycles.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Repair Lifecycle Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-repair-lifecycle-orchestrator.yml

Optimizes travel retail inventory by analyzing passenger flow data, forecasting demand in Snowflake, adjusting allocations in SAP, and notifying travel retail managers.

naftiko: '0.5'
info:
  label: Travel Retail Inventory Optimization Pipeline
  description: Optimizes travel retail inventory by analyzing passenger flow data, forecasting demand in Snowflake, adjusting allocations in SAP, and notifying travel retail managers.
  tags:
  - travel-retail
  - inventory
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-ops
    port: 8080
    tools:
    - name: travel-retail-inventory-optimization
      description: Optimizes travel retail inventory.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Travel Retail Inventory Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → travel-retail-inventory-optimization-pipeline.yml

Schedules a private digital showroom appointment by creating a Salesforce event, sending a calendar invite via Microsoft Graph, and triggering a personalized Klaviyo pre-visit email.

naftiko: '0.5'
info:
  label: Digital Showroom Appointment Scheduler
  description: Schedules a private digital showroom appointment by creating a Salesforce event, sending a calendar invite via Microsoft Graph, and triggering a personalized Klaviyo pre-visit email.
  tags:
  - clienteling
  - crm
  - salesforce
  - microsoft-graph
  - klaviyo
capability:
  exposes:
  - type: mcp
    namespace: showroom
    port: 8080
    tools:
    - name: schedule-showroom-appointment
      description: Given a client ID, date/time, and boutique advisor email, create a CRM event, send calendar invite, and trigger a pre-visit email.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: appointment_datetime
        in: body
        type: string
        description: The appointment date/time in ISO 8601 format.
      - name: advisor_email
        in: body
        type: string
        description: The boutique advisor email.
      - name: maison
        in: body
        type: string
        description: The Maison for the showroom (e.g., Louis Vuitton, Dior).
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: create-crm-event
        type: call
        call: salesforce.create-event
        with:
          WhoId: '{{client_id}}'
          Subject: Digital Showroom — {{maison}}
          StartDateTime: '{{appointment_datetime}}'
          Description: Private showroom for {{get-client.Name}}.
      - name: send-calendar-invite
        type: call
        call: msgraph.create-event
        with:
          organizer: '{{advisor_email}}'
          attendee: '{{get-client.Email}}'
          subject: Your Private {{maison}} Showroom Experience
          start: '{{appointment_datetime}}'
      - name: send-pre-visit-email
        type: call
        call: klaviyo.send-event
        with:
          email: '{{get-client.Email}}'
          event: Showroom_Appointment_Booked
          properties: '{maison: ''{{maison}}'', datetime: ''{{appointment_datetime}}'', advisor: ''{{advisor_email}}''}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
    - name: events
      path: /sobjects/Event
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → digital-showroom-appointment-scheduler.yml

Compares boutique display imagery uploaded to Cloudinary against brand guidelines stored in Contentful, and creates a ServiceNow task for any non-compliant displays.

naftiko: '0.5'
info:
  label: Visual Merchandising Compliance Checker
  description: Compares boutique display imagery uploaded to Cloudinary against brand guidelines stored in Contentful, and creates a ServiceNow task for any non-compliant displays.
  tags:
  - visual-merchandising
  - brand-management
  - cloudinary
  - contentful
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vm-compliance
    port: 8080
    tools:
    - name: check-display-compliance
      description: Given a display image public ID and guidelines entry ID, fetch both assets and create a compliance review task if needed.
      inputParameters:
      - name: image_public_id
        in: body
        type: string
        description: The Cloudinary public ID of the boutique display photo.
      - name: guidelines_entry_id
        in: body
        type: string
        description: The Contentful entry ID for the VM guidelines.
      - name: boutique_name
        in: body
        type: string
        description: The name of the boutique.
      - name: maison
        in: body
        type: string
        description: The Maison brand.
      steps:
      - name: get-display-image
        type: call
        call: cloudinary.get-resource
        with:
          public_id: '{{image_public_id}}'
      - name: get-guidelines
        type: call
        call: contentful.get-entry
        with:
          entry_id: '{{guidelines_entry_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'VM compliance review: {{boutique_name}} — {{maison}}'
          description: 'Display image: {{get-display-image.secure_url}}. Guidelines: {{get-guidelines.fields.title}}. Please verify compliance with current {{maison}} visual merchandising standards.'
          assigned_group: Visual_Merchandising
          category: vm_compliance
  consumes:
  - type: http
    namespace: cloudinary
    baseUri: https://api.cloudinary.com/v1_1/lvmh
    authentication:
      type: basic
      username: $secrets.cloudinary_api_key
      password: $secrets.cloudinary_api_secret
    resources:
    - name: resources
      path: /resources/image/upload/{{public_id}}
      inputParameters:
      - name: public_id
        in: path
      operations:
      - name: get-resource
        method: GET
  - type: http
    namespace: contentful
    baseUri: https://cdn.contentful.com/spaces/lvmh_space_id
    authentication:
      type: bearer
      token: $secrets.contentful_token
    resources:
    - name: entries
      path: /entries/{{entry_id}}
      inputParameters:
      - name: entry_id
        in: path
      operations:
      - name: get-entry
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → visual-merchandising-compliance-checker.yml

Retrieves product images and marketing assets from the digital asset management system for campaign use.

naftiko: '0.5'
info:
  label: DAM Product Asset Retrieval
  description: Retrieves product images and marketing assets from the digital asset management system for campaign use.
  tags:
  - marketing
  - dam
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: dam_product_asset_retrieval
      description: Retrieves product images and marketing assets from the digital asset management system for campaign use..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: dam.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: dam
    baseUri: https://lvmh-dam.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.dam_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → dam-product-asset-retrieval.yml

Checks intercompany stock transfer status between LVMH maisons in SAP.

naftiko: '0.5'
info:
  label: SAP Intercompany Transfer Status
  description: Checks intercompany stock transfer status between LVMH maisons in SAP.
  tags:
  - supply-chain
  - sap
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: sap_intercompany_transfer_status
      description: Checks intercompany stock transfer status between LVMH maisons in SAP..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: sap.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-sap.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-intercompany-transfer-status.yml

Retrieves Instagram engagement metrics for LVMH brand accounts including reach, impressions, and engagement rate.

naftiko: '0.5'
info:
  label: Instagram Brand Engagement Metrics
  description: Retrieves Instagram engagement metrics for LVMH brand accounts including reach, impressions, and engagement rate.
  tags:
  - social-media
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: social-media
    port: 8080
    tools:
    - name: instagram_brand_engagement_metrics
      description: Retrieves Instagram engagement metrics for LVMH brand accounts including reach.
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: instagram.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://lvmh-instagram.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → instagram-brand-engagement-metrics.yml

Fetches a VIC (Very Important Client) profile from Salesforce CRM by client ID, returning contact details, purchase history summary, and loyalty tier.

naftiko: '0.5'
info:
  label: Client Profile Lookup
  description: Fetches a VIC (Very Important Client) profile from Salesforce CRM by client ID, returning contact details, purchase history summary, and loyalty tier.
  tags:
  - crm
  - clienteling
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-client
    port: 8080
    tools:
    - name: get-client-profile
      description: Retrieve a client profile from Salesforce by client ID. Returns name, email, loyalty tier, lifetime spend, and preferred Maison.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID for the client.
      call: salesforce.get-contact
      with:
        contact_id: '{{client_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.Name
      - name: email
        type: string
        mapping: $.Email
      - name: loyalty_tier
        type: string
        mapping: $.Loyalty_Tier__c
      - name: lifetime_spend
        type: string
        mapping: $.Lifetime_Spend__c
      - name: preferred_maison
        type: string
        mapping: $.Preferred_Maison__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → client-profile-lookup.yml

Retrieves an order from Salesforce Commerce Cloud by order number and returns status, shipping method, and line items.

naftiko: '0.5'
info:
  label: E-Commerce Order Status
  description: Retrieves an order from Salesforce Commerce Cloud by order number and returns status, shipping method, and line items.
  tags:
  - e-commerce
  - order-management
  - salesforce-commerce-cloud
capability:
  exposes:
  - type: mcp
    namespace: orders
    port: 8080
    tools:
    - name: get-order-status
      description: Look up an e-commerce order by order number. Returns current status, shipping carrier, tracking number, and line item summary.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SFCC order number.
      call: sfcc.get-order
      with:
        order_no: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: shipping_status
        type: string
        mapping: $.shipping_status
      - name: total
        type: string
        mapping: $.order_total
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: orders
      path: /orders/{{order_no}}
      inputParameters:
      - name: order_no
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → e-commerce-order-status.yml

Traces leather goods provenance by pulling tannery certificates from SAP, logging in the blockchain ledger, and providing digital product passports to clients.

naftiko: '0.5'
info:
  label: Leather Goods Traceability Pipeline
  description: Traces leather goods provenance by pulling tannery certificates from SAP, logging in the blockchain ledger, and providing digital product passports to clients.
  tags:
  - traceability
  - leather
  - sap
  - blockchain
capability:
  exposes:
  - type: mcp
    namespace: leather-ops
    port: 8080
    tools:
    - name: leather-goods-traceability
      description: Traces leather goods provenance.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Leather Goods Traceability Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → leather-goods-traceability-pipeline.yml

Creates digital product passports for EU compliance by pulling product data from SAP, generating QR codes, recording in the blockchain, and distributing to retail.

naftiko: '0.5'
info:
  label: Digital Product Passport Pipeline
  description: Creates digital product passports for EU compliance by pulling product data from SAP, generating QR codes, recording in the blockchain, and distributing to retail.
  tags:
  - compliance
  - product-passport
  - sap
  - blockchain
capability:
  exposes:
  - type: mcp
    namespace: digital-ops
    port: 8080
    tools:
    - name: digital-product-passport
      description: Creates digital product passports for EU compliance.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Digital Product Passport Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-product-passport-pipeline.yml

For a VIC gifting request, looks up the client in Salesforce, searches available products in SFCC, creates a personalized gift order, and schedules white-glove delivery via ShipStation.

naftiko: '0.5'
info:
  label: Luxury Gifting Concierge Orchestrator
  description: For a VIC gifting request, looks up the client in Salesforce, searches available products in SFCC, creates a personalized gift order, and schedules white-glove delivery via ShipStation.
  tags:
  - clienteling
  - e-commerce
  - gifting
  - salesforce
  - salesforce-commerce-cloud
  - shipstation
capability:
  exposes:
  - type: mcp
    namespace: gifting
    port: 8080
    tools:
    - name: create-gift-order
      description: Given a VIC client ID, product SKU, gift message, and recipient address, create a personalized gift order with white-glove delivery.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID of the VIC.
      - name: product_sku
        in: body
        type: string
        description: The SKU of the gift product.
      - name: gift_message
        in: body
        type: string
        description: The personalized gift message.
      - name: recipient_name
        in: body
        type: string
        description: The gift recipient name.
      - name: recipient_address
        in: body
        type: string
        description: The delivery address.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: get-product
        type: call
        call: sfcc.get-product
        with:
          product_id: '{{product_sku}}'
      - name: create-order
        type: call
        call: sfcc.create-order
        with:
          customer_email: '{{get-client.Email}}'
          product_id: '{{product_sku}}'
          gift_message: '{{gift_message}}'
          shipping_address: '{{recipient_address}}'
      - name: schedule-delivery
        type: call
        call: shipstation.create-order
        with:
          orderNumber: '{{create-order.order_no}}'
          shipTo_name: '{{recipient_name}}'
          shipTo_address: '{{recipient_address}}'
          serviceCode: white_glove
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: products
      path: /products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/createorder
      operations:
      - name: create-order
        method: POST
Open in Framework → View in Fleet → luxury-gifting-concierge-orchestrator.yml

Manages raw material price hedging by monitoring commodity prices, analyzing exposure in Snowflake, recommending hedging strategies, and notifying the treasury team.

naftiko: '0.5'
info:
  label: Raw Material Price Hedging Pipeline
  description: Manages raw material price hedging by monitoring commodity prices, analyzing exposure in Snowflake, recommending hedging strategies, and notifying the treasury team.
  tags:
  - treasury
  - hedging
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: raw-ops
    port: 8080
    tools:
    - name: raw-material-price-hedging
      description: Manages raw material price hedging.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Raw Material Price Hedging Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → raw-material-price-hedging-pipeline.yml

Tracks luxury goods production order status in SAP including completion percentage and quality holds.

naftiko: '0.5'
info:
  label: SAP Production Order Tracking
  description: Tracks luxury goods production order status in SAP including completion percentage and quality holds.
  tags:
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: sap_production_order_tracking
      description: Tracks luxury goods production order status in SAP including completion percentage and quality holds..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: sap.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-sap.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-production-order-tracking.yml

Orchestrates luxury pop-up store launches by sourcing inventory from SAP, coordinating logistics, creating event pages, and notifying the experiential marketing team.

naftiko: '0.5'
info:
  label: Luxury Pop-Up Store Orchestrator
  description: Orchestrates luxury pop-up store launches by sourcing inventory from SAP, coordinating logistics, creating event pages, and notifying the experiential marketing team.
  tags:
  - retail
  - pop-up
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-pop-up-store
      description: Orchestrates luxury pop-up store launches.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Pop-Up Store Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-pop-up-store-orchestrator.yml

Optimizes seasonal markdowns by analyzing sell-through rates in Snowflake, recommending mark-down levels, updating pricing in SAP, and notifying merchandising teams.

naftiko: '0.5'
info:
  label: Seasonal Markdown Optimization Pipeline
  description: Optimizes seasonal markdowns by analyzing sell-through rates in Snowflake, recommending mark-down levels, updating pricing in SAP, and notifying merchandising teams.
  tags:
  - merchandising
  - markdowns
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: seasonal-ops
    port: 8080
    tools:
    - name: seasonal-markdown-optimization
      description: Optimizes seasonal markdowns.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Seasonal Markdown Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seasonal-markdown-optimization-pipeline.yml

Plans artisan succession by analyzing skill matrices in Workday, identifying succession gaps in Snowflake, creating training plans in SharePoint, and notifying atelier directors.

naftiko: '0.5'
info:
  label: Artisan Succession Planning Pipeline
  description: Plans artisan succession by analyzing skill matrices in Workday, identifying succession gaps in Snowflake, creating training plans in SharePoint, and notifying atelier directors.
  tags:
  - hr
  - succession
  - workday
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: artisan-ops
    port: 8080
    tools:
    - name: artisan-succession-planning
      description: Plans artisan succession.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Artisan Succession Planning Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → artisan-succession-planning-pipeline.yml

Orchestrates luxury concierge services by pulling client preferences from Salesforce, arranging reservations, coordinating deliveries, and confirming via WhatsApp.

naftiko: '0.5'
info:
  label: Luxury Concierge Service Orchestrator
  description: Orchestrates luxury concierge services by pulling client preferences from Salesforce, arranging reservations, coordinating deliveries, and confirming via WhatsApp.
  tags:
  - concierge
  - luxury-service
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-concierge-service
      description: Orchestrates luxury concierge services.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Concierge Service Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-concierge-service-orchestrator.yml

Optimizes duty-free product allocations by analyzing travel hub performance in Snowflake, adjusting stock levels in SAP, and notifying regional managers.

naftiko: '0.5'
info:
  label: Duty Free Allocation Optimizer Pipeline
  description: Optimizes duty-free product allocations by analyzing travel hub performance in Snowflake, adjusting stock levels in SAP, and notifying regional managers.
  tags:
  - duty-free
  - allocation
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: duty-ops
    port: 8080
    tools:
    - name: duty-free-allocation-optimizer
      description: Optimizes duty-free product allocations.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Duty Free Allocation Optimizer Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → duty-free-allocation-optimizer-pipeline.yml

Aggregates historical sales from SFCC, current inventory from SAP, and search trend data from Algolia analytics to feed into demand forecasting models.

naftiko: '0.5'
info:
  label: Demand Forecasting Data Aggregator
  description: Aggregates historical sales from SFCC, current inventory from SAP, and search trend data from Algolia analytics to feed into demand forecasting models.
  tags:
  - supply-chain
  - demand-planning
  - salesforce-commerce-cloud
  - sap-s4hana
  - algolia
capability:
  exposes:
  - type: mcp
    namespace: demand-forecasting
    port: 8080
    tools:
    - name: aggregate-forecast-data
      description: Given a product SKU and date range, aggregate sales history, current stock, and search trends for demand forecasting.
      inputParameters:
      - name: sku
        in: body
        type: string
        description: The product SKU.
      - name: start_date
        in: body
        type: string
        description: The start of the historical period YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: The end of the historical period YYYY-MM-DD.
      steps:
      - name: get-sales-history
        type: call
        call: sfcc.search-orders
        with:
          product_id: '{{sku}}'
          created_from: '{{start_date}}'
          created_to: '{{end_date}}'
      - name: get-current-stock
        type: call
        call: sap.get-material-stock
        with:
          material: '{{sku}}'
      - name: get-search-trends
        type: call
        call: algolia.get-analytics
        with:
          index: products
          search: '{{sku}}'
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: order-search
      path: /order_search
      operations:
      - name: search-orders
        method: POST
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-stock
        method: GET
  - type: http
    namespace: algolia
    baseUri: https://analytics.algolia.com/2
    authentication:
      type: bearer
      token: $secrets.algolia_api_key
    inputParameters:
    - name: X-Algolia-Application-Id
      in: header
      value: $secrets.algolia_app_id
    resources:
    - name: analytics
      path: /searches?index={{index}}&search={{search}}&startDate={{startDate}}&endDate={{endDate}}
      inputParameters:
      - name: index
        in: query
      - name: search
        in: query
      - name: startDate
        in: query
      - name: endDate
        in: query
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → demand-forecasting-data-aggregator.yml

Retrieves point-of-sale transaction details from the Cegid retail system used across LVMH boutiques.

naftiko: '0.5'
info:
  label: Cegid POS Transaction Lookup
  description: Retrieves point-of-sale transaction details from the Cegid retail system used across LVMH boutiques.
  tags:
  - retail
  - cegid
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: cegid_pos_transaction_lookup
      description: Retrieves point-of-sale transaction details from the Cegid retail system used across LVMH boutiques..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: cegid.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: cegid
    baseUri: https://lvmh-cegid.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cegid_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → cegid-pos-transaction-lookup.yml

Aggregates a customer's profile from Salesforce CRM, purchase history from SFCC, behavioral events from Segment, and email engagement from Klaviyo to build a unified client 360 view.

naftiko: '0.5'
info:
  label: Cross-Maison Customer 360 Builder
  description: Aggregates a customer's profile from Salesforce CRM, purchase history from SFCC, behavioral events from Segment, and email engagement from Klaviyo to build a unified client 360 view.
  tags:
  - crm
  - clienteling
  - customer-data
  - salesforce
  - salesforce-commerce-cloud
  - segment
  - klaviyo
capability:
  exposes:
  - type: mcp
    namespace: customer-360
    port: 8080
    tools:
    - name: build-customer-360
      description: Given a client email, aggregate CRM profile, order history, behavioral events, and email engagement into a unified customer 360 view.
      inputParameters:
      - name: client_email
        in: body
        type: string
        description: The client's email address.
      - name: segment_user_id
        in: body
        type: string
        description: The Segment user ID.
      steps:
      - name: get-crm-profile
        type: call
        call: salesforce.search-contact
        with:
          email: '{{client_email}}'
      - name: get-order-history
        type: call
        call: sfcc.search-orders
        with:
          customer_email: '{{client_email}}'
      - name: get-behavior
        type: call
        call: segment.get-events
        with:
          user_id: '{{segment_user_id}}'
      - name: get-email-engagement
        type: call
        call: klaviyo.get-profile
        with:
          email: '{{client_email}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch/?q={{email}}&sobject=Contact
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contact
        method: GET
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: order-search
      path: /order_search
      operations:
      - name: search-orders
        method: POST
  - type: http
    namespace: segment
    baseUri: https://profiles.segment.com/v1/spaces/lvmh_space
    authentication:
      type: bearer
      token: $secrets.segment_token
    resources:
    - name: events
      path: /collections/users/{{user_id}}/events
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-events
        method: GET
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: profiles
      path: /profiles/?filter=equals(email,'{{email}}')
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-profile
        method: GET
Open in Framework → View in Fleet → cross-maison-customer-360-builder.yml

Analyzes press coverage by collecting clippings, running sentiment analysis in Snowflake, generating media reports in SharePoint, and briefing the communications team.

naftiko: '0.5'
info:
  label: Press Clipping Analysis Pipeline
  description: Analyzes press coverage by collecting clippings, running sentiment analysis in Snowflake, generating media reports in SharePoint, and briefing the communications team.
  tags:
  - communications
  - press
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: press-ops
    port: 8080
    tools:
    - name: press-clipping-analysis
      description: Analyzes press coverage.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Press Clipping Analysis Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → press-clipping-analysis-pipeline.yml

Generates authentication certificates for luxury goods by pulling product data from SAP, creating digital certificates, recording in the blockchain, and delivering to clients.

naftiko: '0.5'
info:
  label: Luxury Authentication Certificate Pipeline
  description: Generates authentication certificates for luxury goods by pulling product data from SAP, creating digital certificates, recording in the blockchain, and delivering to clients.
  tags:
  - authentication
  - certificates
  - sap
  - blockchain
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-authentication-certificate
      description: Generates authentication certificates for luxury goods.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Authentication Certificate Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-authentication-certificate-pipeline.yml

Audits visual merchandising across boutiques by collecting photos, analyzing display compliance via AI, creating audit reports in SharePoint, and alerting visual teams.

naftiko: '0.5'
info:
  label: Visual Merchandising Audit Pipeline
  description: Audits visual merchandising across boutiques by collecting photos, analyzing display compliance via AI, creating audit reports in SharePoint, and alerting visual teams.
  tags:
  - visual-merchandising
  - audit
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: visual-ops
    port: 8080
    tools:
    - name: visual-merchandising-audit
      description: Audits visual merchandising across boutiques.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Visual Merchandising Audit Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → visual-merchandising-audit-pipeline.yml

Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment.

naftiko: '0.5'
info:
  label: Manhattan WMS Inventory Position
  description: Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment.
  tags:
  - warehouse
  - manhattan-wms
capability:
  exposes:
  - type: mcp
    namespace: warehouse
    port: 8080
    tools:
    - name: manhattan_wms_inventory_position
      description: Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: manhattan-wms.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: manhattan-wms
    baseUri: https://lvmh-manhattan-wms.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.manhattan_wms_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → manhattan-wms-inventory-position.yml

Allocates wine and spirits vintages by analyzing demand in SAP, optimizing allocation across markets, creating distribution plans, and notifying commercial teams.

naftiko: '0.5'
info:
  label: Wine Spirits Vintage Allocation Orchestrator
  description: Allocates wine and spirits vintages by analyzing demand in SAP, optimizing allocation across markets, creating distribution plans, and notifying commercial teams.
  tags:
  - wine-spirits
  - allocation
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wine-ops
    port: 8080
    tools:
    - name: wine-spirits-vintage-allocation
      description: Allocates wine and spirits vintages.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Wine Spirits Vintage Allocation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wine-spirits-vintage-allocation-orchestrator.yml

Manages custom jewelry orders by capturing designs in the PLM, sourcing stones from SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.

naftiko: '0.5'
info:
  label: Jewelry Custom Order Orchestrator
  description: Manages custom jewelry orders by capturing designs in the PLM, sourcing stones from SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.
  tags:
  - jewelry
  - custom-orders
  - sap
  - workday
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: jewelry-ops
    port: 8080
    tools:
    - name: jewelry-custom-order
      description: Manages custom jewelry orders.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Jewelry Custom Order Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jewelry-custom-order-orchestrator.yml

When a client's lifetime spend crosses a tier threshold, upgrades their Salesforce loyalty tier, triggers a congratulatory Klaviyo email, and notifies the assigned sales associate in Microsoft Teams.

naftiko: '0.5'
info:
  label: Loyalty Tier Upgrade Orchestrator
  description: When a client's lifetime spend crosses a tier threshold, upgrades their Salesforce loyalty tier, triggers a congratulatory Klaviyo email, and notifies the assigned sales associate in Microsoft Teams.
  tags:
  - crm
  - loyalty
  - salesforce
  - klaviyo
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: loyalty
    port: 8080
    tools:
    - name: upgrade-loyalty-tier
      description: Given a client ID and new tier, update Salesforce, send congratulatory email via Klaviyo, and notify the sales associate.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: new_tier
        in: body
        type: string
        description: The new loyalty tier (Silver, Gold, Platinum, VIC).
      - name: associate_upn
        in: body
        type: string
        description: The Microsoft Teams UPN of the assigned sales associate.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: update-tier
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{client_id}}'
          Loyalty_Tier__c: '{{new_tier}}'
      - name: send-congratulations
        type: call
        call: klaviyo.send-event
        with:
          email: '{{get-client.Email}}'
          event: Loyalty_Tier_Upgrade
          properties: '{new_tier: ''{{new_tier}}'', client_name: ''{{get-client.FirstName}}''}'
      - name: notify-associate
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{associate_upn}}'
          text: 'Loyalty upgrade: {{get-client.Name}} promoted to {{new_tier}}. Lifetime spend: {{get-client.Lifetime_Spend__c}}. Consider a personalized outreach.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
      - name: update-contact
        method: PATCH
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → loyalty-tier-upgrade-orchestrator.yml

Coordinates fashion show logistics by creating a Salesforce event, provisioning a SharePoint collaboration site, sending invitations via Microsoft Graph, and posting announcements in Slack.

naftiko: '0.5'
info:
  label: Fashion Show Event Logistics Coordinator
  description: Coordinates fashion show logistics by creating a Salesforce event, provisioning a SharePoint collaboration site, sending invitations via Microsoft Graph, and posting announcements in Slack.
  tags:
  - events
  - brand-management
  - salesforce
  - sharepoint
  - microsoft-graph
  - slack
capability:
  exposes:
  - type: mcp
    namespace: event-logistics
    port: 8080
    tools:
    - name: coordinate-fashion-show
      description: Given event details, create CRM records, provision collaboration space, send invitations, and announce in Slack.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: The fashion show event name.
      - name: event_date
        in: body
        type: string
        description: The event date in ISO 8601 format.
      - name: maison
        in: body
        type: string
        description: The Maison hosting the show.
      - name: venue
        in: body
        type: string
        description: The venue name and location.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for event coordination.
      steps:
      - name: create-event-record
        type: call
        call: salesforce.create-event
        with:
          Subject: '{{event_name}} — {{maison}}'
          StartDateTime: '{{event_date}}'
          Location: '{{venue}}'
          Description: Fashion show for {{maison}} at {{venue}}.
      - name: create-collab-site
        type: call
        call: sharepoint.create-folder
        with:
          site_id: events_site
          folder_path: FashionShows/{{maison}}/{{event_name}}
      - name: announce-event
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Fashion Show Announced: {{event_name}} by {{maison}} on {{event_date}} at {{venue}}. Collaboration space: {{create-collab-site.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: events
      path: /sobjects/Event
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → fashion-show-event-logistics-coordinator.yml

Processes wholesale buyer orders by capturing orders in Salesforce, checking inventory in SAP, confirming delivery dates, and sending order confirmations.

naftiko: '0.5'
info:
  label: Wholesale Buyer Order Pipeline
  description: Processes wholesale buyer orders by capturing orders in Salesforce, checking inventory in SAP, confirming delivery dates, and sending order confirmations.
  tags:
  - wholesale
  - orders
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wholesale-ops
    port: 8080
    tools:
    - name: wholesale-buyer-order
      description: Processes wholesale buyer orders.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Wholesale Buyer Order Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wholesale-buyer-order-pipeline.yml

Aggregates boutique sales from Shopify POS, foot traffic from Google Analytics, and staffing data from Workday to build a daily boutique performance snapshot.

naftiko: '0.5'
info:
  label: Boutique Performance Dashboard Builder
  description: Aggregates boutique sales from Shopify POS, foot traffic from Google Analytics, and staffing data from Workday to build a daily boutique performance snapshot.
  tags:
  - retail
  - analytics
  - shopify
  - google-analytics
  - workday
capability:
  exposes:
  - type: mcp
    namespace: boutique-performance
    port: 8080
    tools:
    - name: build-boutique-snapshot
      description: Given a boutique location ID and date, aggregate POS sales, foot traffic analytics, and staffing levels into a daily performance snapshot.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Shopify location ID for the boutique.
      - name: date
        in: body
        type: string
        description: The date for the snapshot in YYYY-MM-DD format.
      - name: ga_property_id
        in: body
        type: string
        description: The GA4 property ID for the boutique.
      steps:
      - name: get-pos-sales
        type: call
        call: shopify.get-orders-by-location
        with:
          location_id: '{{location_id}}'
          created_at_min: '{{date}}T00:00:00Z'
          created_at_max: '{{date}}T23:59:59Z'
      - name: get-foot-traffic
        type: call
        call: ga.run-report
        with:
          property: '{{ga_property_id}}'
          dateRanges: '[{startDate: ''{{date}}'', endDate: ''{{date}}''}]'
      - name: get-staffing
        type: call
        call: workday.get-workers-by-location
        with:
          location: '{{location_id}}'
  consumes:
  - type: http
    namespace: shopify
    baseUri: https://lvmh-retail.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: orders
      path: /orders.json?location_id={{location_id}}&created_at_min={{created_at_min}}&created_at_max={{created_at_max}}
      inputParameters:
      - name: location_id
        in: query
      - name: created_at_min
        in: query
      - name: created_at_max
        in: query
      operations:
      - name: get-orders-by-location
        method: GET
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property}}:runReport
      inputParameters:
      - name: property
        in: path
      operations:
      - name: run-report
        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: /workers?location={{location}}
      inputParameters:
      - name: location
        in: query
      operations:
      - name: get-workers-by-location
        method: GET
Open in Framework → View in Fleet → boutique-performance-dashboard-builder.yml

Retrieves luxury raw material details from SAP including origin, quality grade, and current stock levels.

naftiko: '0.5'
info:
  label: SAP Luxury Material Lookup
  description: Retrieves luxury raw material details from SAP including origin, quality grade, and current stock levels.
  tags:
  - materials
  - sap
capability:
  exposes:
  - type: mcp
    namespace: materials
    port: 8080
    tools:
    - name: sap_luxury_material_lookup
      description: Retrieves luxury raw material details from SAP including origin.
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: sap.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-sap.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-luxury-material-lookup.yml

Retrieves customer event history from Segment by user ID, returning recent track events for behavioral analysis and clienteling insights.

naftiko: '0.5'
info:
  label: Segment Customer Event Lookup
  description: Retrieves customer event history from Segment by user ID, returning recent track events for behavioral analysis and clienteling insights.
  tags:
  - customer-data
  - analytics
  - segment
capability:
  exposes:
  - type: mcp
    namespace: cdp
    port: 8080
    tools:
    - name: get-customer-events
      description: Fetch recent Segment track events for a user ID. Returns event names, timestamps, and properties.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Segment user ID.
      call: segment.get-events
      with:
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: segment
    baseUri: https://profiles.segment.com/v1/spaces/lvmh_space
    authentication:
      type: bearer
      token: $secrets.segment_token
    resources:
    - name: events
      path: /collections/users/{{user_id}}/events
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-events
        method: GET
Open in Framework → View in Fleet → segment-customer-event-lookup.yml

When an employee submits an IT request via ServiceNow, resolves their identity in Workday, provisions access in Azure AD via Microsoft Graph, and sends confirmation in Teams.

naftiko: '0.5'
info:
  label: IT Service Request Handler
  description: When an employee submits an IT request via ServiceNow, resolves their identity in Workday, provisions access in Azure AD via Microsoft Graph, and sends confirmation in Teams.
  tags:
  - it
  - servicenow
  - workday
  - microsoft-graph
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-service
    port: 8080
    tools:
    - name: handle-it-request
      description: Given a ServiceNow ticket ID and employee ID, resolve identity, provision access, and confirm via Teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The ServiceNow incident ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: application_name
        in: body
        type: string
        description: The application to provision access to.
      steps:
      - name: get-ticket
        type: call
        call: servicenow.get-incident
        with:
          ticket_id: '{{ticket_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: provision-access
        type: call
        call: msgraph.add-app-role
        with:
          user_upn: '{{get-employee.work_email}}'
          app_name: '{{application_name}}'
      - name: confirm-provision
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Your IT request ({{ticket_id}}) for {{application_name}} has been provisioned. You should now have access.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: app-roles
      path: /users/{{user_upn}}/appRoleAssignments
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: add-app-role
        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
Open in Framework → View in Fleet → it-service-request-handler.yml

When a wholesale partner places a bulk order, creates the SAP sales order, generates an invoice draft, and sends order confirmation to the partner via email through Microsoft Graph.

naftiko: '0.5'
info:
  label: Wholesale Order Pipeline
  description: When a wholesale partner places a bulk order, creates the SAP sales order, generates an invoice draft, and sends order confirmation to the partner via email through Microsoft Graph.
  tags:
  - wholesale
  - erp
  - sap-s4hana
  - microsoft-graph
capability:
  exposes:
  - type: mcp
    namespace: wholesale
    port: 8080
    tools:
    - name: process-wholesale-order
      description: Given a partner ID, material list, and quantities, create a SAP sales order and send confirmation to the wholesale partner.
      inputParameters:
      - name: partner_id
        in: body
        type: string
        description: The SAP business partner ID.
      - name: materials
        in: body
        type: string
        description: JSON array of material numbers and quantities.
      - name: partner_email
        in: body
        type: string
        description: The partner contact email.
      steps:
      - name: create-sales-order
        type: call
        call: sap.create-sales-order
        with:
          sold_to_party: '{{partner_id}}'
          items: '{{materials}}'
      - name: send-confirmation
        type: call
        call: msgraph.send-mail
        with:
          recipient: '{{partner_email}}'
          subject: LVMH Wholesale Order Confirmation — {{create-sales-order.sales_order_id}}
          body: 'Your order {{create-sales-order.sales_order_id}} has been created. Estimated delivery: {{create-sales-order.delivery_date}}. Total: {{create-sales-order.net_value}} EUR.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: sales-orders
      path: /A_SalesOrder
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/wholesale@lvmh.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → wholesale-order-pipeline.yml

Tracks influencer campaign performance by pulling engagement data from Google Analytics, matching it to the campaign in Salesforce Marketing, and sending a summary report to the brand team via Slack.

naftiko: '0.5'
info:
  label: Influencer Campaign Tracking Pipeline
  description: Tracks influencer campaign performance by pulling engagement data from Google Analytics, matching it to the campaign in Salesforce Marketing, and sending a summary report to the brand team via Slack.
  tags:
  - marketing
  - influencer
  - google-analytics
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: influencer-tracking
    port: 8080
    tools:
    - name: track-influencer-campaign
      description: Given a campaign ID and GA property, pull engagement metrics, update the Salesforce campaign record, and send a summary to the brand team Slack channel.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      - name: ga_property_id
        in: body
        type: string
        description: The GA4 property ID.
      - name: start_date
        in: body
        type: string
        description: Campaign start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: Campaign end date YYYY-MM-DD.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the brand team.
      steps:
      - name: get-ga-report
        type: call
        call: ga.run-report
        with:
          property: '{{ga_property_id}}'
          dateRanges: '[{startDate: ''{{start_date}}'', endDate: ''{{end_date}}''}]'
      - name: update-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{campaign_id}}'
          NumberOfResponses: '{{get-ga-report.rows[0].metricValues[0].value}}'
      - name: notify-brand-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Influencer Campaign Report ({{start_date}} to {{end_date}}): Sessions: {{get-ga-report.rows[0].metricValues[0].value}}, Conversions: {{get-ga-report.rows[0].metricValues[1].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}}:runReport
      inputParameters:
      - name: property
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → influencer-campaign-tracking-pipeline.yml

Audits supply chain sustainability by collecting supplier certifications from SAP, analyzing ESG scores in Snowflake, generating audit reports, and notifying CSR teams.

naftiko: '0.5'
info:
  label: Sustainability Supply Chain Audit Orchestrator
  description: Audits supply chain sustainability by collecting supplier certifications from SAP, analyzing ESG scores in Snowflake, generating audit reports, and notifying CSR teams.
  tags:
  - sustainability
  - audit
  - sap
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainability-ops
    port: 8080
    tools:
    - name: sustainability-supply-chain-audit
      description: Audits supply chain sustainability.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Sustainability Supply Chain Audit Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainability-supply-chain-audit-orchestrator.yml

On a high-value purchase event, enriches the client profile in Salesforce, triggers a personalized thank-you email via Klaviyo, and logs the interaction in the clienteling app.

naftiko: '0.5'
info:
  label: VIC Clienteling Orchestrator
  description: On a high-value purchase event, enriches the client profile in Salesforce, triggers a personalized thank-you email via Klaviyo, and logs the interaction in the clienteling app.
  tags:
  - clienteling
  - crm
  - salesforce
  - klaviyo
  - luxury-retail
capability:
  exposes:
  - type: mcp
    namespace: clienteling
    port: 8080
    tools:
    - name: process-vic-purchase
      description: Given a client ID and order ID, enrich the Salesforce profile, send a personalized Klaviyo thank-you, and log the clienteling interaction.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: order_id
        in: body
        type: string
        description: The e-commerce order ID.
      - name: sales_associate_id
        in: body
        type: string
        description: The ID of the sales associate who assisted.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: get-order
        type: call
        call: sfcc.get-order
        with:
          order_no: '{{order_id}}'
      - name: update-client-spend
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{client_id}}'
          Last_Purchase_Date__c: '{{get-order.creation_date}}'
          Last_Purchase_Amount__c: '{{get-order.order_total}}'
      - name: send-thank-you
        type: call
        call: klaviyo.send-event
        with:
          email: '{{get-client.Email}}'
          event: VIC_Purchase_Thank_You
          properties: '{amount: ''{{get-order.order_total}}'', associate: ''{{sales_associate_id}}''}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
      - name: update-contact
        method: PATCH
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: orders
      path: /orders/{{order_no}}
      inputParameters:
      - name: order_no
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → vic-clienteling-orchestrator.yml

Builds personalized product recommendations by fetching client preferences from Salesforce, recent browse history from Segment, and searching matching products in Algolia.

naftiko: '0.5'
info:
  label: Personalized Product Recommendation Engine
  description: Builds personalized product recommendations by fetching client preferences from Salesforce, recent browse history from Segment, and searching matching products in Algolia.
  tags:
  - e-commerce
  - personalization
  - salesforce
  - segment
  - algolia
capability:
  exposes:
  - type: mcp
    namespace: recommendations
    port: 8080
    tools:
    - name: get-recommendations
      description: Given a client ID and Segment user ID, generate personalized product recommendations based on CRM preferences and browsing behavior.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: segment_user_id
        in: body
        type: string
        description: The Segment user ID.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{client_id}}'
      - name: get-browse-history
        type: call
        call: segment.get-events
        with:
          user_id: '{{segment_user_id}}'
      - name: search-products
        type: call
        call: algolia.search
        with:
          query: '{{get-client.Preferred_Maison__c}} {{get-browse-history.data[0].properties.category}}'
          facetFilters: brand:{{get-client.Preferred_Maison__c}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: segment
    baseUri: https://profiles.segment.com/v1/spaces/lvmh_space
    authentication:
      type: bearer
      token: $secrets.segment_token
    resources:
    - name: events
      path: /collections/users/{{user_id}}/events
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-events
        method: GET
  - type: http
    namespace: algolia
    baseUri: https://lvmh-app.algolia.net/1/indexes/products
    authentication:
      type: bearer
      token: $secrets.algolia_api_key
    inputParameters:
    - name: X-Algolia-Application-Id
      in: header
      value: $secrets.algolia_app_id
    resources:
    - name: search
      path: /query
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → personalized-product-recommendation-engine.yml

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

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestrator
  description: On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for brand training materials, 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: Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: maison
        in: body
        type: string
        description: The Maison the new hire is joining (e.g., Louis Vuitton, Dior).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}} — {{maison}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} at {{maison}}.
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding_site
          folder_path: OnboardingDocs/{{maison}}/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to LVMH and {{maison}}, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Training materials are at {{provision-folder.url}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.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
Open in Framework → View in Fleet → new-employee-onboarding-orchestrator.yml

Manages VIP event invitations by selecting guests from Salesforce, generating personalized invitations, tracking RSVPs, and coordinating logistics via Teams.

naftiko: '0.5'
info:
  label: VIP Event Invitation Orchestrator
  description: Manages VIP event invitations by selecting guests from Salesforce, generating personalized invitations, tracking RSVPs, and coordinating logistics via Teams.
  tags:
  - events
  - vip
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vip-ops
    port: 8080
    tools:
    - name: vip-event-invitation
      description: Manages VIP event invitations.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'VIP Event Invitation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vip-event-invitation-orchestrator.yml

Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions.

naftiko: '0.5'
info:
  label: Adyen Payment Reconciliation Lookup
  description: Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions.
  tags:
  - payments
  - adyen
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: adyen_payment_reconciliation_lookup
      description: Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: adyen.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: adyen
    baseUri: https://lvmh-adyen.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.adyen_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → adyen-payment-reconciliation-lookup.yml

When a quality issue is reported, creates a SAP quality notification, opens a ServiceNow incident for the supply chain team, and alerts the supplier manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Quality Incident Pipeline
  description: When a quality issue is reported, creates a SAP quality notification, opens a ServiceNow incident for the supply chain team, and alerts the supplier manager in Microsoft Teams.
  tags:
  - supply-chain
  - quality
  - sap-s4hana
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-incident
    port: 8080
    tools:
    - name: report-quality-incident
      description: Given a material number, supplier ID, and defect description, create a SAP quality notification, open a ServiceNow incident, and alert the supply chain manager.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number of the affected product.
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier/vendor ID.
      - name: defect_description
        in: body
        type: string
        description: Description of the quality defect.
      - name: manager_upn
        in: body
        type: string
        description: The Teams UPN of the supply chain manager.
      steps:
      - name: create-quality-notification
        type: call
        call: sap.create-quality-notification
        with:
          material: '{{material_number}}'
          supplier: '{{supplier_id}}'
          defect_text: '{{defect_description}}'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Quality defect: Material {{material_number}} from supplier {{supplier_id}}'
          description: '{{defect_description}}. SAP QN: {{create-quality-notification.notification_id}}.'
          category: supply_chain_quality
          assigned_group: Quality_Assurance
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'Quality Alert: Material {{material_number}} — {{defect_description}}. SAP QN {{create-quality-notification.notification_id}}, ServiceNow {{open-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: quality-notifications
      path: /A_QualityNotification
      operations:
      - name: create-quality-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-quality-incident-pipeline.yml

Coordinates cross-maison product collaborations by syncing design specs in Confluence, aligning production in SAP, creating marketing plans, and launching via e-commerce.

naftiko: '0.5'
info:
  label: Maison Collaboration Product Pipeline
  description: Coordinates cross-maison product collaborations by syncing design specs in Confluence, aligning production in SAP, creating marketing plans, and launching via e-commerce.
  tags:
  - collaboration
  - cross-maison
  - confluence
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: maison-ops
    port: 8080
    tools:
    - name: maison-collaboration-product
      description: Coordinates cross-maison product collaborations.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Maison Collaboration Product Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → maison-collaboration-product-pipeline.yml

When a new e-commerce order is placed, checks SAP inventory across warehouses and boutiques, selects optimal fulfillment location, and creates a shipping request in ShipStation.

naftiko: '0.5'
info:
  label: Omnichannel Order Fulfillment Router
  description: When a new e-commerce order is placed, checks SAP inventory across warehouses and boutiques, selects optimal fulfillment location, and creates a shipping request in ShipStation.
  tags:
  - supply-chain
  - e-commerce
  - order-management
  - sap-s4hana
  - shipstation
  - salesforce-commerce-cloud
capability:
  exposes:
  - type: mcp
    namespace: fulfillment
    port: 8080
    tools:
    - name: route-order-fulfillment
      description: Given an order ID, check inventory across locations, select the optimal fulfillment center, and create a ShipStation shipping label.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The SFCC order ID.
      - name: destination_country
        in: body
        type: string
        description: The destination country ISO code.
      steps:
      - name: get-order
        type: call
        call: sfcc.get-order
        with:
          order_no: '{{order_id}}'
      - name: check-warehouse-stock
        type: call
        call: sap.get-material-stock
        with:
          material: '{{get-order.product_items[0].product_id}}'
      - name: create-shipment
        type: call
        call: shipstation.create-order
        with:
          orderNumber: '{{order_id}}'
          shipTo_country: '{{destination_country}}'
          shipTo_name: '{{get-order.billing_address.full_name}}'
          items: '{{get-order.product_items}}'
          warehouseId: '{{check-warehouse-stock.plant}}'
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: orders
      path: /orders/{{order_no}}
      inputParameters:
      - name: order_no
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-stock
        method: GET
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/createorder
      operations:
      - name: create-order
        method: POST
Open in Framework → View in Fleet → omnichannel-order-fulfillment-router.yml

Supports global retail expansion by analyzing market data in Snowflake, identifying locations via Google Maps, creating business cases in SharePoint, and presenting to leadership.

naftiko: '0.5'
info:
  label: Global Retail Expansion Pipeline
  description: Supports global retail expansion by analyzing market data in Snowflake, identifying locations via Google Maps, creating business cases in SharePoint, and presenting to leadership.
  tags:
  - retail-expansion
  - global
  - snowflake
  - google-maps
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: global-ops
    port: 8080
    tools:
    - name: global-retail-expansion
      description: Supports global retail expansion.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Global Retail Expansion Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → global-retail-expansion-pipeline.yml

Manages luxury rental programs by checking item availability in SAP, processing reservations in Salesforce, scheduling cleaning in ServiceNow, and notifying boutique teams.

naftiko: '0.5'
info:
  label: Luxury Rental Program Orchestrator
  description: Manages luxury rental programs by checking item availability in SAP, processing reservations in Salesforce, scheduling cleaning in ServiceNow, and notifying boutique teams.
  tags:
  - rental
  - luxury-program
  - sap
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: luxury-ops
    port: 8080
    tools:
    - name: luxury-rental-program
      description: Manages luxury rental programs.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          entity_id: '{{entity_id}}'
      - name: process-data
        type: call
        call: analytics.process
        with:
          entity_id: '{{entity_id}}'
          input: '{{gather-data.results}}'
      - name: execute-action
        type: call
        call: action.execute
        with:
          entity_id: '{{entity_id}}'
          recommendations: '{{process-data.output}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Luxury Rental Program Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://lvmh-api.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lvmh_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://lvmh-analytics.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: processing
      path: /process
      operations:
      - name: process
        method: POST
  - type: http
    namespace: action
    baseUri: https://lvmh-ops.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → luxury-rental-program-orchestrator.yml

Retrieves boutique key performance indicators from Tableau dashboards including traffic, conversion, and average transaction.

naftiko: '0.5'
info:
  label: Tableau Boutique KPI Dashboard
  description: Retrieves boutique key performance indicators from Tableau dashboards including traffic, conversion, and average transaction.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: tableau_boutique_kpi_dashboard
      description: Retrieves boutique key performance indicators from Tableau dashboards including traffic.
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: tableau.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://lvmh-tableau.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → tableau-boutique-kpi-dashboard.yml

Initiates an inter-warehouse stock transfer in SAP, creates a ServiceNow logistics task, and notifies the warehouse manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Transfer Request
  description: Initiates an inter-warehouse stock transfer in SAP, creates a ServiceNow logistics task, and notifies the warehouse manager in Microsoft Teams.
  tags:
  - supply-chain
  - logistics
  - sap-s4hana
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-transfer
    port: 8080
    tools:
    - name: request-stock-transfer
      description: Given a material number, source plant, destination plant, and quantity, create a SAP transfer order, log a ServiceNow task, and notify the warehouse manager.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: source_plant
        in: body
        type: string
        description: The source warehouse/plant code.
      - name: destination_plant
        in: body
        type: string
        description: The destination warehouse/plant code.
      - name: quantity
        in: body
        type: number
        description: The quantity to transfer.
      - name: manager_upn
        in: body
        type: string
        description: The Teams UPN of the warehouse manager.
      steps:
      - name: create-transfer
        type: call
        call: sap.create-stock-transfer
        with:
          material: '{{material_number}}'
          source: '{{source_plant}}'
          destination: '{{destination_plant}}'
          quantity: '{{quantity}}'
      - name: create-logistics-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Stock transfer: {{material_number}} from {{source_plant}} to {{destination_plant}}'
          description: 'Transfer order {{create-transfer.transfer_order_id}}: {{quantity}} units of {{material_number}}.'
          assigned_group: Logistics
          category: warehouse_transfer
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'Stock transfer initiated: {{quantity}} units of {{material_number}} from {{source_plant}} to {{destination_plant}}. SAP TO: {{create-transfer.transfer_order_id}}. ServiceNow: {{create-logistics-task.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://lvmh-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: transfers
      path: /A_StockTransfer
      operations:
      - name: create-stock-transfer
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://lvmh.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → warehouse-transfer-request.yml

When a high-value cart is abandoned in SFCC, fetches the cart contents, enriches with Salesforce client data, and triggers a personalized Klaviyo recovery email with product recommendations.

naftiko: '0.5'
info:
  label: E-Commerce Abandoned Cart Recovery
  description: When a high-value cart is abandoned in SFCC, fetches the cart contents, enriches with Salesforce client data, and triggers a personalized Klaviyo recovery email with product recommendations.
  tags:
  - e-commerce
  - marketing
  - cart-recovery
  - salesforce-commerce-cloud
  - salesforce
  - klaviyo
capability:
  exposes:
  - type: mcp
    namespace: cart-recovery
    port: 8080
    tools:
    - name: recover-abandoned-cart
      description: Given a basket ID and client email, fetch cart contents, enrich with CRM data, and trigger a personalized recovery email.
      inputParameters:
      - name: basket_id
        in: body
        type: string
        description: The SFCC basket ID.
      - name: client_email
        in: body
        type: string
        description: The client email address.
      steps:
      - name: get-basket
        type: call
        call: sfcc.get-basket
        with:
          basket_id: '{{basket_id}}'
      - name: get-client
        type: call
        call: salesforce.search-contact
        with:
          email: '{{client_email}}'
      - name: trigger-recovery-email
        type: call
        call: klaviyo.send-event
        with:
          email: '{{client_email}}'
          event: Abandoned_Cart_Recovery
          properties: '{cart_total: ''{{get-basket.order_total}}'', items: ''{{get-basket.product_items}}'', loyalty_tier: ''{{get-client.Loyalty_Tier__c}}''}'
  consumes:
  - type: http
    namespace: sfcc
    baseUri: https://lvmh.demandware.net/s/-/dw/data/v21_10
    authentication:
      type: bearer
      token: $secrets.sfcc_token
    resources:
    - name: baskets
      path: /baskets/{{basket_id}}
      inputParameters:
      - name: basket_id
        in: path
      operations:
      - name: get-basket
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://lvmh.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch/?q={{email}}&sobject=Contact
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contact
        method: GET
  - type: http
    namespace: klaviyo
    baseUri: https://a.klaviyo.com/api
    authentication:
      type: bearer
      token: $secrets.klaviyo_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → e-commerce-abandoned-cart-recovery.yml

Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking.

naftiko: '0.5'
info:
  label: Shopify Plus Order Status
  description: Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking.
  tags:
  - e-commerce
  - shopify
capability:
  exposes:
  - type: mcp
    namespace: e-commerce
    port: 8080
    tools:
    - name: shopify_plus_order_status
      description: Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking..
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The record identifier.
      call: shopify.get-record
      with:
        record_id: '{{record_id}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: shopify
    baseUri: https://lvmh-shopify.lvmh.com/api/v1
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → shopify-plus-order-status.yml

When a SAP Concur travel expense is submitted, resolves the employee in Workday to determine their Maison and cost center, updates the expense category, and notifies the finance approver in Microsoft Teams.

naftiko: '0.5'
info:
  label: Concur Travel Expense Auto-Categorizer
  description: When a SAP Concur travel expense is submitted, resolves the employee in Workday to determine their Maison and cost center, updates the expense category, and notifies the finance approver in Microsoft Teams.
  tags:
  - finance
  - travel
  - sap-concur
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-expense
    port: 8080
    tools:
    - name: categorize-travel-expense
      description: Given a Concur expense report ID and employee ID, resolve the cost center from Workday, update the expense category, and notify the approver.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: approver_upn
        in: body
        type: string
        description: The Teams UPN of the finance approver.
      steps:
      - name: get-expense
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Travel expense pending: {{get-employee.full_name}} ({{get-employee.department}}) submitted report {{expense_report_id}} for {{get-expense.total_amount}} {{get-expense.currency}}. Cost center: {{get-employee.cost_center}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: 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
Open in Framework → View in Fleet → concur-travel-expense-auto-categorizer.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 10
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-10.yml

Monitors GitHub Actions CI workflows for Mars digital and data science repositories, alerting on failures via Slack.

naftiko: '0.5'
info:
  label: GitHub Actions CI Monitor
  description: Monitors GitHub Actions CI workflows for Mars digital and data science repositories, alerting on failures via Slack.
  tags:
  - devops
  - github-actions
  - slack
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: ci-monitor
    port: 8080
    tools:
    - name: monitor-ci
      description: Check GitHub Actions workflow status and alert on failures.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository (org/repo).
      - name: workflow_name
        in: body
        type: string
        description: Workflow file name.
      steps:
      - name: get-runs
        type: call
        call: github.get-workflow-runs
        with:
          repo: '{{repo_name}}'
          workflow: '{{workflow_name}}'
      - name: notify-failure
        type: call
        call: slack.post-message
        with:
          channel: ci-alerts
          text: CI {{get-runs.latest_run.conclusion}} for {{repo_name}}/{{workflow_name}}.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/runs
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-monitor.yml

Creates Zendesk support tickets for consumer complaints and inquiries about Mars products.

naftiko: '0.5'
info:
  label: Zendesk Consumer Support Ticket
  description: Creates Zendesk support tickets for consumer complaints and inquiries about Mars products.
  tags:
  - customer-support
  - zendesk
  - consumer-care
capability:
  exposes:
  - type: mcp
    namespace: consumer-support
    port: 8080
    tools:
    - name: create-consumer-ticket
      description: Create a Zendesk support ticket for a consumer inquiry.
      inputParameters:
      - name: consumer_email
        in: body
        type: string
        description: Consumer email address.
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: issue_type
        in: body
        type: string
        description: Issue type (quality, ingredients, allergens, packaging).
      - name: description
        in: body
        type: string
        description: Issue description.
      call: zendesk.create-ticket
      with:
        requester_email: '{{consumer_email}}'
        subject: 'Consumer inquiry: {{product_name}} - {{issue_type}}'
        description: '{{description}}'
        tags: consumer-care,{{issue_type}}
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://mars.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → zendesk-consumer-support-ticket.yml

Creates and tracks food safety audit records in ServiceNow, stores audit reports in SharePoint, and notifies the food safety team via Slack.

naftiko: '0.5'
info:
  label: Food Safety Audit Tracker
  description: Creates and tracks food safety audit records in ServiceNow, stores audit reports in SharePoint, and notifies the food safety team via Slack.
  tags:
  - food-safety
  - audit
  - servicenow
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-safety-audit
    port: 8080
    tools:
    - name: log-audit
      description: Log a food safety audit across ServiceNow, SharePoint, and Slack.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: Manufacturing plant code.
      - name: audit_type
        in: body
        type: string
        description: Audit type (GFSI, FSMA, internal, supplier).
      - name: findings
        in: body
        type: string
        description: Audit findings summary.
      - name: score
        in: body
        type: string
        description: Audit score.
      steps:
      - name: create-audit-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Food safety audit: {{audit_type}} at {{plant_code}}'
          category: food_safety
          description: 'Score: {{score}}. Findings: {{findings}}.'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: food_safety
          folder_path: Audits/{{plant_code}}/{{audit_type}}
          content: 'Plant: {{plant_code}}. Type: {{audit_type}}. Score: {{score}}. Findings: {{findings}}.'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: food-safety-audits
          text: 'Audit completed: {{audit_type}} at {{plant_code}}. Score: {{score}}. ServiceNow: {{create-audit-record.number}}. Report: {{store-report.url}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://mars.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: upload-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → food-safety-audit-tracker.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 11
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-11.yml

Generates Microsoft Excel financial reports for Mars division performance, pulling data from SAP HANA and distributing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Excel Financial Report Generator
  description: Generates Microsoft Excel financial reports for Mars division performance, pulling data from SAP HANA and distributing via Microsoft Outlook.
  tags:
  - finance
  - microsoft-excel
  - sap-hana
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: financial-reports
    port: 8080
    tools:
    - name: generate-financial-report
      description: Generate financial report from SAP HANA and email to stakeholders.
      inputParameters:
      - name: division
        in: body
        type: string
        description: Mars division (confectionery, petcare, food, wrigley).
      - name: period
        in: body
        type: string
        description: Reporting period.
      - name: recipient_email
        in: body
        type: string
        description: Recipient email address.
      steps:
      - name: get-data
        type: call
        call: sap-hana.get-financial-data
        with:
          division: '{{division}}'
          period: '{{period}}'
      - name: send-report
        type: call
        call: outlook.send-email
        with:
          to: '{{recipient_email}}'
          subject: 'Financial Report: {{division}} - {{period}}'
          body: '{{division}} division financial summary for {{period}}. Revenue: {{get-data.revenue}}. EBITDA: {{get-data.ebitda}}. Margin: {{get-data.margin}}%.'
  consumes:
  - type: http
    namespace: sap-hana
    baseUri: https://mars-hana.sap.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: financial
      path: /FIN_REPORTING_SRV/DivisionPerformance
      inputParameters:
      - name: division
        in: query
      - name: period
        in: query
      operations:
      - name: get-financial-data
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → microsoft-excel-financial-report-generator.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 13
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-13.yml

Synchronizes payroll data between Workday and ADP for Mars associates, ensuring accurate compensation processing.

naftiko: '0.5'
info:
  label: ADP Payroll Data Sync
  description: Synchronizes payroll data between Workday and ADP for Mars associates, ensuring accurate compensation processing.
  tags:
  - hr
  - payroll
  - adp
  - workday
capability:
  exposes:
  - type: mcp
    namespace: payroll-sync
    port: 8080
    tools:
    - name: sync-payroll
      description: Sync payroll data between Workday and ADP.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier.
      steps:
      - name: get-workday-data
        type: call
        call: workday.get-payroll
        with:
          period: '{{pay_period}}'
      - name: push-to-adp
        type: call
        call: adp.submit-payroll
        with:
          period: '{{pay_period}}'
          data: '{{get-workday-data.payroll_records}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll
      path: /payroll/periods/{{period}}
      inputParameters:
      - name: period
        in: path
      operations:
      - name: get-payroll
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /pay-distributions
      operations:
      - name: submit-payroll
        method: POST
Open in Framework → View in Fleet → adp-payroll-data-sync.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 12
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-12.yml

Pulls website traffic metrics from Google Analytics for Mars brand websites including page views, sessions, and conversion rates.

naftiko: '0.5'
info:
  label: Google Analytics Web Traffic Reporter
  description: Pulls website traffic metrics from Google Analytics for Mars brand websites including page views, sessions, and conversion rates.
  tags:
  - marketing
  - google-analytics
  - web-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-traffic-report
      description: Retrieve web traffic from Google Analytics for a date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.get-report
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  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
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-web-traffic-reporter.yml

Retrieves Google Tag Manager configurations for Mars brand websites to validate marketing and analytics tag implementations.

naftiko: '0.5'
info:
  label: Google Tag Manager Configuration Audit
  description: Retrieves Google Tag Manager configurations for Mars brand websites to validate marketing and analytics tag implementations.
  tags:
  - marketing
  - google-tag-manager
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: gtm-audit
    port: 8080
    tools:
    - name: audit-tags
      description: Retrieve GTM container tags for a Mars brand website.
      inputParameters:
      - name: container_id
        in: body
        type: string
        description: GTM container ID.
      call: gtm.get-tags
      with:
        container_id: '{{container_id}}'
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_gtm_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/default/tags
      inputParameters:
      - name: container_id
        in: path
      operations:
      - name: get-tags
        method: GET
Open in Framework → View in Fleet → google-tag-manager-configuration-audit.yml

Retrieves travel expense reports from SAP Concur for Mars associates, enabling finance review and approval tracking.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Reporter
  description: Retrieves travel expense reports from SAP Concur for Mars associates, enabling finance review and approval tracking.
  tags:
  - travel
  - expenses
  - sap-concur
  - finance
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Retrieve a SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
  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-report
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-expense-reporter.yml

When a supplier quality issue is detected, creates a SAP quality notification, opens a ServiceNow ticket, and alerts the supplier management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Quality Incident Processor
  description: When a supplier quality issue is detected, creates a SAP quality notification, opens a ServiceNow ticket, and alerts the supplier management team via Microsoft Teams.
  tags:
  - quality-control
  - supplier-management
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-quality
    port: 8080
    tools:
    - name: report-supplier-issue
      description: Process a supplier quality issue across SAP, ServiceNow, and Teams.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: SAP vendor/supplier ID.
      - name: material_number
        in: body
        type: string
        description: Affected material number.
      - name: defect_type
        in: body
        type: string
        description: Type of defect (contamination, packaging, specification, foreign-body).
      - name: description
        in: body
        type: string
        description: Detailed description of the issue.
      steps:
      - name: create-notification
        type: call
        call: sap.create-quality-notification
        with:
          supplier: '{{supplier_id}}'
          material: '{{material_number}}'
          defect_type: '{{defect_type}}'
          description: '{{description}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supplier quality: {{defect_type}} - Material {{material_number}}'
          category: quality
          priority: '2'
          description: 'Supplier: {{supplier_id}}. Material: {{material_number}}. Defect: {{defect_type}}. SAP notification: {{create-notification.notification_number}}. {{description}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supplier-quality-alerts
          text: 'Supplier quality issue: {{defect_type}} from supplier {{supplier_id}} on material {{material_number}}. SAP: {{create-notification.notification_number}}. ServiceNow: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mars-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_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: servicenow
    baseUri: https://mars.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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-quality-incident-processor.yml

Runs Informatica data quality jobs on product and supplier master data to ensure consistency across Mars global operations.

naftiko: '0.5'
info:
  label: Informatica Master Data Pipeline
  description: Runs Informatica data quality jobs on product and supplier master data to ensure consistency across Mars global operations.
  tags:
  - data-quality
  - informatica
  - master-data
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-mdm-pipeline
      description: Execute Informatica master data management pipeline.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Informatica job name.
      - name: data_domain
        in: body
        type: string
        description: Data domain (product, supplier, customer, material).
      call: informatica.run-job
      with:
        job_name: '{{job_name}}'
        domain: '{{data_domain}}'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://mars-iics.informatica.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → informatica-master-data-pipeline.yml

Retrieves consumer engagement analytics from Mixpanel for Mars consumer-facing mobile apps and digital platforms.

naftiko: '0.5'
info:
  label: Mixpanel Consumer App Analytics
  description: Retrieves consumer engagement analytics from Mixpanel for Mars consumer-facing mobile apps and digital platforms.
  tags:
  - analytics
  - mixpanel
  - consumer-engagement
capability:
  exposes:
  - type: mcp
    namespace: app-analytics
    port: 8080
    tools:
    - name: get-app-metrics
      description: Retrieve Mixpanel consumer app engagement metrics.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: Mixpanel event name to query.
      - name: from_date
        in: body
        type: string
        description: Start date.
      - name: to_date
        in: body
        type: string
        description: End date.
      call: mixpanel.get-event-data
      with:
        event: '{{event_name}}'
        from_date: '{{from_date}}'
        to_date: '{{to_date}}'
  consumes:
  - type: http
    namespace: mixpanel
    baseUri: https://mixpanel.com/api/2.0
    authentication:
      type: basic
      username: $secrets.mixpanel_api_secret
      password: ''
    resources:
    - name: events
      path: /events
      inputParameters:
      - name: event
        in: query
      - name: from_date
        in: query
      - name: to_date
        in: query
      operations:
      - name: get-event-data
        method: GET
Open in Framework → View in Fleet → mixpanel-consumer-app-analytics.yml

Retrieves production analytics from Oracle APEX dashboards for Mars manufacturing facilities, including OEE, throughput, and downtime.

naftiko: '0.5'
info:
  label: Oracle APEX Production Dashboard
  description: Retrieves production analytics from Oracle APEX dashboards for Mars manufacturing facilities, including OEE, throughput, and downtime.
  tags:
  - manufacturing
  - oracle-apex
  - production-analytics
capability:
  exposes:
  - type: mcp
    namespace: production-dashboard
    port: 8080
    tools:
    - name: get-production-metrics
      description: Retrieve production metrics from Oracle APEX.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: Manufacturing plant code.
      - name: date
        in: body
        type: string
        description: Date for metrics in YYYY-MM-DD format.
      call: oracle-apex.get-metrics
      with:
        plant: '{{plant_code}}'
        date: '{{date}}'
  consumes:
  - type: http
    namespace: oracle-apex
    baseUri: https://mars-apex.oraclecloud.com/ords/prod/api
    authentication:
      type: bearer
      token: $secrets.oracle_apex_token
    resources:
    - name: production-metrics
      path: /production/metrics
      inputParameters:
      - name: plant
        in: query
      - name: date
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → oracle-apex-production-dashboard.yml

Creates and manages R&D knowledge articles in Notion for Mars product development teams, documenting formulations and testing protocols.

naftiko: '0.5'
info:
  label: Notion R&D Knowledge Base
  description: Creates and manages R&D knowledge articles in Notion for Mars product development teams, documenting formulations and testing protocols.
  tags:
  - research-development
  - notion
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: rd-knowledge
    port: 8080
    tools:
    - name: create-knowledge-article
      description: Create a knowledge article in Notion for R&D documentation.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Article title.
      - name: content
        in: body
        type: string
        description: Article content.
      - name: database_id
        in: body
        type: string
        description: Notion database ID.
      call: notion.create-page
      with:
        database_id: '{{database_id}}'
        title: '{{title}}'
        content: '{{content}}'
  consumes:
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → notion-r-d-knowledge-base.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 15
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-15.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 9
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-9.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 8
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-8
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mars-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mars-workflow-8.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 9
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-9
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mars-workflow-9.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 8
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-8.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 14
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-14.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 19
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-19
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-19.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 25
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-25
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mars.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mars-workflow-25.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 31
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-31
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-31.yml

Monitors Palo Alto Networks firewall configurations at Mars manufacturing plants and data centers for security compliance.

naftiko: '0.5'
info:
  label: Palo Alto Network Security Monitor
  description: Monitors Palo Alto Networks firewall configurations at Mars manufacturing plants and data centers for security compliance.
  tags:
  - security
  - palo-alto-networks
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Audit Palo Alto firewall rules for a Mars facility.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: Palo Alto device group name.
      call: paloalto.get-security-rules
      with:
        device_group: '{{device_group}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://mars-panorama.paloaltonetworks.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      inputParameters:
      - name: device_group
        in: query
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-network-security-monitor.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 30
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-30
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mars.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mars-workflow-30.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 24
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-24
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: food-manufacturing.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mars-workflow-24.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 18
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-18
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mars.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mars-workflow-18.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 32
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-32
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mars-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mars-workflow-32.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 26
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-26
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mars.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mars-workflow-26.yml

Logs R&D experiment results in SharePoint, tracks formulation iterations, and updates the Jira project board for product development teams.

naftiko: '0.5'
info:
  label: R&D Experiment Tracker
  description: Logs R&D experiment results in SharePoint, tracks formulation iterations, and updates the Jira project board for product development teams.
  tags:
  - research-development
  - sharepoint
  - jira
  - innovation
capability:
  exposes:
  - type: mcp
    namespace: rd-experiments
    port: 8080
    tools:
    - name: log-experiment
      description: Log an R&D experiment and update project tracking.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Experiment identifier.
      - name: formulation
        in: body
        type: string
        description: Formulation details.
      - name: results
        in: body
        type: string
        description: Experiment results summary.
      - name: jira_issue_key
        in: body
        type: string
        description: Associated Jira issue key.
      steps:
      - name: store-results
        type: call
        call: sharepoint.upload-file
        with:
          site_id: rd_experiments
          folder_path: Experiments/{{experiment_id}}
          content: 'Formulation: {{formulation}}. Results: {{results}}.'
      - name: update-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{jira_issue_key}}'
          comment: 'Experiment {{experiment_id}} completed. Results: {{results}}. Full report: {{store-results.url}}.'
  consumes:
  - 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: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://mars.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
Open in Framework → View in Fleet → r-d-experiment-tracker.yml

Pulls market share and competitive data from Circana for Mars brands, storing insights in SharePoint for brand management teams.

naftiko: '0.5'
info:
  label: Circana Market Share Tracker
  description: Pulls market share and competitive data from Circana for Mars brands, storing insights in SharePoint for brand management teams.
  tags:
  - market-intelligence
  - circana
  - sharepoint
  - brand-management
capability:
  exposes:
  - type: mcp
    namespace: market-share
    port: 8080
    tools:
    - name: track-market-share
      description: Fetch market share data from Circana and store in SharePoint.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: Mars brand name.
      - name: category
        in: body
        type: string
        description: Product category.
      - name: region
        in: body
        type: string
        description: Geographic region.
      steps:
      - name: get-data
        type: call
        call: circana.get-market-share
        with:
          brand: '{{brand}}'
          category: '{{category}}'
          region: '{{region}}'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: market_intelligence
          folder_path: MarketShare/{{brand}}/{{region}}
          content: '{{get-data.report}}'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: market-share
      path: /market-share
      inputParameters:
      - name: brand
        in: query
      - name: category
        in: query
      - name: region
        in: query
      operations:
      - name: get-market-share
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → circana-market-share-tracker.yml

Publishes Mars brand marketing content across Instagram, Facebook, and Twitter with creative assets from Adobe Creative Cloud.

naftiko: '0.5'
info:
  label: Social Media Brand Campaign Publisher
  description: Publishes Mars brand marketing content across Instagram, Facebook, and Twitter with creative assets from Adobe Creative Cloud.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - twitter
  - adobe-creative-cloud
capability:
  exposes:
  - type: mcp
    namespace: social-campaigns
    port: 8080
    tools:
    - name: publish-campaign
      description: Pull creative asset and publish across social media platforms.
      inputParameters:
      - name: asset_id
        in: body
        type: string
        description: Adobe Creative Cloud asset ID.
      - name: caption
        in: body
        type: string
        description: Social media caption.
      - name: brand
        in: body
        type: string
        description: Mars brand name.
      steps:
      - name: get-asset
        type: call
        call: adobe-cc.get-asset
        with:
          asset_id: '{{asset_id}}'
      - name: post-instagram
        type: call
        call: instagram.create-media
        with:
          image_url: '{{get-asset.download_url}}'
          caption: '{{caption}} #{{brand}}'
      - name: post-facebook
        type: call
        call: facebook.create-post
        with:
          message: '{{caption}}'
          image_url: '{{get-asset.download_url}}'
      - name: post-twitter
        type: call
        call: twitter.create-tweet
        with:
          text: '{{caption}} #{{brand}}'
          media_url: '{{get-asset.download_url}}'
  consumes:
  - type: http
    namespace: adobe-cc
    baseUri: https://cc-api-storage.adobe.io/v1
    authentication:
      type: bearer
      token: $secrets.adobe_cc_token
    resources:
    - name: assets
      path: /assets/{{asset_id}}
      inputParameters:
      - name: asset_id
        in: path
      operations:
      - name: get-asset
        method: GET
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      operations:
      - name: create-media
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: posts
      path: /{{page_id}}/feed
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
Open in Framework → View in Fleet → social-media-brand-campaign-publisher.yml

Archives Mars regulatory and food safety compliance documents from SharePoint to Box with retention policies.

naftiko: '0.5'
info:
  label: Box Compliance Document Archive
  description: Archives Mars regulatory and food safety compliance documents from SharePoint to Box with retention policies.
  tags:
  - compliance
  - box
  - sharepoint
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: compliance-archive
    port: 8080
    tools:
    - name: archive-compliance-docs
      description: Archive compliance documents from SharePoint to Box.
      inputParameters:
      - name: document_category
        in: body
        type: string
        description: Category (food-safety, environmental, regulatory, gmp).
      - name: year
        in: body
        type: string
        description: Document year.
      steps:
      - name: get-docs
        type: call
        call: sharepoint.list-files
        with:
          site_id: compliance_docs
          folder_path: '{{document_category}}/{{year}}'
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: compliance_archive
          file_name: '{{document_category}}_{{year}}_archive.zip'
          metadata: category:{{document_category}},year:{{year}},retention:10years
  consumes:
  - 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}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: list-files
        method: GET
  - 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
Open in Framework → View in Fleet → box-compliance-document-archive.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 27
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-27
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-27.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 33
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-33
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mars-workflow-33.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 23
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-23
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mars-workflow-23.yml

Monitors Azure Data Factory pipeline runs for Mars data warehouse ETL processes, alerting on failures via Slack.

naftiko: '0.5'
info:
  label: Azure Data Factory ETL Monitor
  description: Monitors Azure Data Factory pipeline runs for Mars data warehouse ETL processes, alerting on failures via Slack.
  tags:
  - data-engineering
  - azure-data-factory
  - slack
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: etl-monitor
    port: 8080
    tools:
    - name: check-etl-status
      description: Check Azure Data Factory pipeline run status and alert on failures.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: ADF pipeline name.
      - name: run_id
        in: body
        type: string
        description: Pipeline run ID.
      steps:
      - name: get-run-status
        type: call
        call: adf.get-pipeline-run
        with:
          pipeline: '{{pipeline_name}}'
          run_id: '{{run_id}}'
      - name: alert-failure
        type: call
        call: slack.post-message
        with:
          channel: data-engineering-alerts
          text: 'ADF pipeline {{pipeline_name}} run {{run_id}}: {{get-run-status.status}}. Duration: {{get-run-status.duration}}.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{rg}}/providers/Microsoft.DataFactory/factories/{{factory}}
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /pipelineruns/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-etl-monitor.yml

Monitors Mars consumer-facing digital platforms via New Relic for performance, availability, and error tracking.

naftiko: '0.5'
info:
  label: New Relic Digital Platform Monitor
  description: Monitors Mars consumer-facing digital platforms via New Relic for performance, availability, and error tracking.
  tags:
  - monitoring
  - new-relic
  - digital-platforms
capability:
  exposes:
  - type: mcp
    namespace: digital-monitoring
    port: 8080
    tools:
    - name: get-platform-health
      description: Retrieve New Relic APM metrics for a Mars digital platform.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: New Relic application name.
      call: newrelic.get-app-metrics
      with:
        app_name: '{{app_name}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json
      inputParameters:
      - name: app_name
        in: query
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-digital-platform-monitor.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 22
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-22
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mars.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mars-workflow-22.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 20
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-20
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mars-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mars-workflow-20.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 34
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-34
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mars.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mars-workflow-34.yml

Monitors Azure DevOps build pipelines for Mars digital platforms, checking build status and deployment health.

naftiko: '0.5'
info:
  label: Azure DevOps Build Pipeline Monitor
  description: Monitors Azure DevOps build pipelines for Mars digital platforms, checking build status and deployment health.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: get-build-status
      description: Check the latest build status for an Azure DevOps pipeline.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline definition ID.
      call: azuredevops.get-latest-build
      with:
        project: '{{project_name}}'
        definition_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/mars
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: definition_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-pipeline-monitor.yml

Creates and manages production tasks in Microsoft Planner for plant operations, including maintenance schedules and changeover planning.

naftiko: '0.5'
info:
  label: Microsoft Planner Production Task Manager
  description: Creates and manages production tasks in Microsoft Planner for plant operations, including maintenance schedules and changeover planning.
  tags:
  - manufacturing
  - microsoft-planner
  - task-management
capability:
  exposes:
  - type: mcp
    namespace: production-tasks
    port: 8080
    tools:
    - name: create-production-task
      description: Create a production operations task in Microsoft Planner.
      inputParameters:
      - name: task_title
        in: body
        type: string
        description: Task title.
      - name: plan_id
        in: body
        type: string
        description: Planner plan ID.
      - name: due_date
        in: body
        type: string
        description: Due date.
      - name: plant_code
        in: body
        type: string
        description: Plant code.
      call: planner.create-task
      with:
        plan_id: '{{plan_id}}'
        title: '[{{plant_code}}] {{task_title}}'
        due_date: '{{due_date}}'
  consumes:
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → microsoft-planner-production-task-manager.yml

Monitors Mars manufacturing execution system applications via Dynatrace, tracking uptime, response times, and error rates.

naftiko: '0.5'
info:
  label: Dynatrace Manufacturing App Monitor
  description: Monitors Mars manufacturing execution system applications via Dynatrace, tracking uptime, response times, and error rates.
  tags:
  - monitoring
  - dynatrace
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: mes-monitoring
    port: 8080
    tools:
    - name: check-mes-health
      description: Check Dynatrace health metrics for manufacturing execution systems.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: Dynatrace application entity ID.
      call: dynatrace.get-metrics
      with:
        entity_id: '{{application_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://mars.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query
      inputParameters:
      - name: entity_id
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-manufacturing-app-monitor.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 35
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-35
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mars-workflow-35.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 21
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-21
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mars-workflow-21.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 10
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-10
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mars.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mars-workflow-10.yml

Pulls campaign performance from Google Marketing Platform for Mars brand advertising, analyzing ROI and audience reach.

naftiko: '0.5'
info:
  label: Google Marketing Platform Campaign Optimizer
  description: Pulls campaign performance from Google Marketing Platform for Mars brand advertising, analyzing ROI and audience reach.
  tags:
  - marketing
  - google-marketing-platform
  - advertising
capability:
  exposes:
  - type: mcp
    namespace: ad-campaigns
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Retrieve Google Marketing Platform campaign performance metrics.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Campaign ID.
      - name: date_range
        in: body
        type: string
        description: Date range for reporting.
      call: gmp.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
        date_range: '{{date_range}}'
  consumes:
  - type: http
    namespace: gmp
    baseUri: https://www.googleapis.com/dfareporting/v4
    authentication:
      type: bearer
      token: $secrets.google_marketing_token
    resources:
    - name: reports
      path: /userprofiles/{{profile_id}}/reports
      operations:
      - name: get-campaign-report
        method: POST
Open in Framework → View in Fleet → google-marketing-platform-campaign-optimizer.yml

Manages a pet care product recall by updating SAP batch status, creating ServiceNow case, notifying retailers via Salesforce, and alerting the public via social media.

naftiko: '0.5'
info:
  label: Pet Care Product Recall Manager
  description: Manages a pet care product recall by updating SAP batch status, creating ServiceNow case, notifying retailers via Salesforce, and alerting the public via social media.
  tags:
  - pet-care
  - recall
  - sap
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: initiate-recall
      description: Initiate a product recall process across all systems.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The batch number to recall.
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: reason
        in: body
        type: string
        description: Recall reason.
      - name: severity
        in: body
        type: string
        description: Recall severity (voluntary, mandatory, class-1, class-2).
      steps:
      - name: block-batch
        type: call
        call: sap.block-batch
        with:
          batch: '{{batch_number}}'
          status: blocked
          reason: '{{reason}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Product recall: {{product_name}} - Batch {{batch_number}}'
          category: recall
          priority: '1'
          description: 'Reason: {{reason}}. Severity: {{severity}}.'
      - name: notify-retailers
        type: call
        call: salesforce.create-mass-notification
        with:
          subject: 'Recall: {{product_name}} Batch {{batch_number}}'
          message: 'Please remove {{product_name}} batch {{batch_number}} from shelves. Reason: {{reason}}.'
      - name: alert-crisis-team
        type: call
        call: msteams.send-message
        with:
          channel_id: crisis-management
          text: 'RECALL INITIATED: {{product_name}} batch {{batch_number}}. Severity: {{severity}}. Reason: {{reason}}. ServiceNow: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mars-s4.sap.com/sap/opu/odata/sap/QM_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch
      operations:
      - name: block-batch
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://mars.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://mars.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notifications
      path: /sobjects/Mass_Notification__c
      operations:
      - name: create-mass-notification
        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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pet-care-product-recall-manager.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 11
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-11
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mars-workflow-11.yml

Creates and manages R&D knowledge articles in Confluence for Mars food science, pet nutrition, and manufacturing process documentation.

naftiko: '0.5'
info:
  label: Confluence R&D Knowledge Base
  description: Creates and manages R&D knowledge articles in Confluence for Mars food science, pet nutrition, and manufacturing process documentation.
  tags:
  - research-development
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: rd-knowledge
    port: 8080
    tools:
    - name: create-rd-article
      description: Create an R&D knowledge article in Confluence.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Article title.
      - name: content
        in: body
        type: string
        description: Article content.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      call: confluence.create-page
      with:
        space_key: '{{space_key}}'
        title: '{{title}}'
        content: '{{content}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mars.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-r-d-knowledge-base.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 13
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-13
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mars.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mars-workflow-13.yml

Monitors Jira sprint progress for Mars product development and digital teams, tracking velocity and blockers.

naftiko: '0.5'
info:
  label: Jira Product Development Sprint Tracker
  description: Monitors Jira sprint progress for Mars product development and digital teams, tracking velocity and blockers.
  tags:
  - development
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: sprint-tracking
    port: 8080
    tools:
    - name: get-sprint-status
      description: Retrieve Jira sprint status and metrics.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: Sprint ID.
      call: jira.get-sprint
      with:
        board_id: '{{board_id}}'
        sprint_id: '{{sprint_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://mars.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint/{{sprint_id}}
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
Open in Framework → View in Fleet → jira-product-development-sprint-tracker.yml

Checks the status of a procurement requisition in SAP Ariba, returning approval stage, requestor, and estimated delivery.

naftiko: '0.5'
info:
  label: SAP Ariba Requisition Status
  description: Checks the status of a procurement requisition in SAP Ariba, returning approval stage, requestor, and estimated delivery.
  tags:
  - procurement
  - sap-ariba
  - requisitions
capability:
  exposes:
  - type: mcp
    namespace: ariba-procurement
    port: 8080
    tools:
    - name: get-requisition-status
      description: Look up a SAP Ariba requisition by ID.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Ariba requisition ID.
      call: ariba.get-requisition
      with:
        req_id: '{{requisition_id}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → sap-ariba-requisition-status.yml

Runs Alteryx analytics workflows for Mars supply chain optimization, analyzing sourcing patterns and logistics costs.

naftiko: '0.5'
info:
  label: Alteryx Supply Chain Analytics Pipeline
  description: Runs Alteryx analytics workflows for Mars supply chain optimization, analyzing sourcing patterns and logistics costs.
  tags:
  - supply-chain
  - alteryx
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: supply-analytics
    port: 8080
    tools:
    - name: run-analytics-workflow
      description: Execute an Alteryx analytics workflow for supply chain analysis.
      inputParameters:
      - name: workflow_name
        in: body
        type: string
        description: Alteryx workflow name.
      - name: parameters
        in: body
        type: string
        description: Workflow parameters.
      call: alteryx.run-workflow
      with:
        workflow: '{{workflow_name}}'
        params: '{{parameters}}'
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://mars-alteryx.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow}}/run
      inputParameters:
      - name: workflow
        in: path
      operations:
      - name: run-workflow
        method: POST
Open in Framework → View in Fleet → alteryx-supply-chain-analytics-pipeline.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 12
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-12
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: food-manufacturing.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mars-workflow-12.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 16
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-16
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mars.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mars-workflow-16.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 17
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-17
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mars-workflow-17.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 15
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-15
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-15.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 29
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-29
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mars-workflow-29.yml

Looks up a production order in SAP S/4HANA by order number, returning status, material, quantity, planned start/end dates, and batch information.

naftiko: '0.5'
info:
  label: SAP S/4HANA Production Order Status
  description: Looks up a production order in SAP S/4HANA by order number, returning status, material, quantity, planned start/end dates, and batch information.
  tags:
  - manufacturing
  - erp
  - sap-s4hana
  - production
capability:
  exposes:
  - type: mcp
    namespace: production-orders
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP S/4HANA production order by order number.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-production-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: material
        type: string
        mapping: $.d.Material
      - name: quantity
        type: string
        mapping: $.d.TotalQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mars-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-production-order-status.yml

Synchronizes distributor orders from BigCommerce to SAP Sales and Distribution, ensuring inventory allocation and delivery scheduling.

naftiko: '0.5'
info:
  label: Retail Distributor Order Sync
  description: Synchronizes distributor orders from BigCommerce to SAP Sales and Distribution, ensuring inventory allocation and delivery scheduling.
  tags:
  - retail
  - bigcommerce
  - sap
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: order-sync
    port: 8080
    tools:
    - name: sync-distributor-orders
      description: Pull BigCommerce orders and create SAP sales orders for fulfillment.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date for order retrieval.
      - name: date_to
        in: body
        type: string
        description: End date for order retrieval.
      steps:
      - name: get-orders
        type: call
        call: bigcommerce.get-orders
        with:
          min_date: '{{date_from}}'
          max_date: '{{date_to}}'
      - name: create-sap-orders
        type: call
        call: sap.create-sales-orders
        with:
          orders: '{{get-orders.orders}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: get-orders
        method: GET
  - type: http
    namespace: sap
    baseUri: https://mars-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /A_SalesOrder
      operations:
      - name: create-sales-orders
        method: POST
Open in Framework → View in Fleet → retail-distributor-order-sync.yml

Publishes Mars employer brand content to LinkedIn, highlighting culture, innovation, and career opportunities.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Publisher
  description: Publishes Mars employer brand content to LinkedIn, highlighting culture, innovation, and career opportunities.
  tags:
  - employer-branding
  - linkedin
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: publish-employer-content
      description: Publish employer brand content to the Mars LinkedIn page.
      inputParameters:
      - name: content_text
        in: body
        type: string
        description: Post content text.
      - name: image_url
        in: body
        type: string
        description: Image URL for the post.
      call: linkedin.create-post
      with:
        text: '{{content_text}}'
        image_url: '{{image_url}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-publisher.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 28
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-28
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mars.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mars-workflow-28.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 14
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-14
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mars.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mars-workflow-14.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 5
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-5.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 4
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-4
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mars.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mars-workflow-4.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 5
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-5
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mars-workflow-5.yml

Creates ServiceNow incidents for IT issues at Mars manufacturing plants, offices, and R&D facilities.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Creator
  description: Creates ServiceNow incidents for IT issues at Mars manufacturing plants, offices, and R&D facilities.
  tags:
  - it-support
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: it-incidents
    port: 8080
    tools:
    - name: create-incident
      description: Create a new ServiceNow incident for IT support.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief summary of the incident.
      - name: category
        in: body
        type: string
        description: Incident category.
      - name: location
        in: body
        type: string
        description: Facility or office location.
      call: servicenow.create-incident
      with:
        short_description: '{{short_description}}'
        category: '{{category}}'
        location: '{{location}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://mars.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
Open in Framework → View in Fleet → servicenow-it-incident-creator.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 4
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-4.yml

Pulls historical sales data from SAP BW, runs demand forecasting in Azure Databricks, and publishes results to a Tableau dashboard for supply planning.

naftiko: '0.5'
info:
  label: Supply Chain Demand Forecast Pipeline
  description: Pulls historical sales data from SAP BW, runs demand forecasting in Azure Databricks, and publishes results to a Tableau dashboard for supply planning.
  tags:
  - supply-chain
  - forecasting
  - sap-bw
  - azure-databricks
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: demand-forecast
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Execute a demand forecast pipeline from SAP BW to Databricks to Tableau.
      inputParameters:
      - name: product_category
        in: body
        type: string
        description: Product category (confectionery, petcare, food).
      - name: forecast_horizon
        in: body
        type: string
        description: Forecast horizon (e.g., 12-weeks, 6-months).
      steps:
      - name: get-sales-data
        type: call
        call: sap-bw.get-sales-history
        with:
          category: '{{product_category}}'
      - name: run-forecast
        type: call
        call: databricks.run-job
        with:
          job_name: demand_forecast
          parameters: category={{product_category}}&horizon={{forecast_horizon}}
      - name: publish-results
        type: call
        call: tableau.publish-datasource
        with:
          project_id: supply_planning
          datasource_name: DemandForecast_{{product_category}}
          data: '{{run-forecast.output}}'
  consumes:
  - type: http
    namespace: sap-bw
    baseUri: https://mars-bw.sap.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: sales-history
      path: /SALES_HISTORY_SRV/SalesData
      inputParameters:
      - name: category
        in: query
      operations:
      - name: get-sales-history
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-mars.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mars-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-forecast-pipeline.yml

Sends targeted consumer newsletters via MailChimp for Mars brands, pulling audience segments from Salesforce.

naftiko: '0.5'
info:
  label: MailChimp Consumer Newsletter
  description: Sends targeted consumer newsletters via MailChimp for Mars brands, pulling audience segments from Salesforce.
  tags:
  - marketing
  - mailchimp
  - salesforce
  - newsletters
capability:
  exposes:
  - type: mcp
    namespace: consumer-newsletters
    port: 8080
    tools:
    - name: send-newsletter
      description: Send a MailChimp newsletter to a Salesforce consumer segment.
      inputParameters:
      - name: segment_name
        in: body
        type: string
        description: Salesforce consumer segment.
      - name: brand
        in: body
        type: string
        description: Mars brand name.
      - name: subject_line
        in: body
        type: string
        description: Email subject line.
      steps:
      - name: get-segment
        type: call
        call: salesforce.get-segment
        with:
          segment: '{{segment_name}}'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_name: '{{brand}}_newsletter'
          subject: '{{subject_line}}'
          recipients: '{{get-segment.emails}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mars.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: get-segment
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-consumer-newsletter.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 6
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-6.yml

Triggers a Tableau dashboard refresh for supply chain analytics covering inventory levels, production throughput, and logistics KPIs.

naftiko: '0.5'
info:
  label: Tableau Supply Chain Dashboard Refresh
  description: Triggers a Tableau dashboard refresh for supply chain analytics covering inventory levels, production throughput, and logistics KPIs.
  tags:
  - supply-chain
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-bi
    port: 8080
    tools:
    - name: refresh-dashboard
      description: Trigger a Tableau dataset refresh for supply chain analytics.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Tableau dataset ID.
      call: tableau.refresh-datasource
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://mars-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources/{{dataset_id}}/refresh
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → tableau-supply-chain-dashboard-refresh.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 7
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-7
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-7.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 6
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-6
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mars.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mars-workflow-6.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 7
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-7.yml

Reconciles warehouse inventory between SAP and physical counts, generating variance reports in SharePoint for logistics teams.

naftiko: '0.5'
info:
  label: Warehouse Inventory Reconciliation
  description: Reconciles warehouse inventory between SAP and physical counts, generating variance reports in SharePoint for logistics teams.
  tags:
  - warehouse
  - inventory
  - sap
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: inventory-recon
    port: 8080
    tools:
    - name: reconcile-inventory
      description: Compare SAP inventory records with physical counts and generate variance report.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: SAP warehouse/storage location ID.
      - name: count_date
        in: body
        type: string
        description: Physical count date.
      steps:
      - name: get-sap-inventory
        type: call
        call: sap.get-inventory
        with:
          warehouse: '{{warehouse_id}}'
      - name: store-variance-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: warehouse_ops
          folder_path: InventoryRecon/{{warehouse_id}}/{{count_date}}
          content: 'SAP inventory for {{warehouse_id}} as of {{count_date}}. Total SKUs: {{get-sap-inventory.sku_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mars-s4.sap.com/sap/opu/odata/sap/MM_INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /A_MaterialStock
      inputParameters:
      - name: warehouse
        in: query
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → warehouse-inventory-reconciliation.yml

Retrieves commodity prices from Reuters for key Mars ingredients including cocoa, sugar, and palm oil for procurement cost management.

naftiko: '0.5'
info:
  label: Reuters Commodity Price Tracker
  description: Retrieves commodity prices from Reuters for key Mars ingredients including cocoa, sugar, and palm oil for procurement cost management.
  tags:
  - procurement
  - commodities
  - reuters
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: commodity-prices
    port: 8080
    tools:
    - name: get-commodity-price
      description: Retrieve current commodity prices from Reuters.
      inputParameters:
      - name: commodity
        in: body
        type: string
        description: Commodity name (cocoa, sugar, palm-oil, wheat, rice).
      call: reuters.get-price
      with:
        commodity: '{{commodity}}'
  consumes:
  - type: http
    namespace: reuters
    baseUri: https://api.refinitiv.com/data/v1
    authentication:
      type: bearer
      token: $secrets.reuters_token
    resources:
    - name: pricing
      path: /pricing/snapshots/{{commodity}}
      inputParameters:
      - name: commodity
        in: path
      operations:
      - name: get-price
        method: GET
Open in Framework → View in Fleet → reuters-commodity-price-tracker.yml

Manages Mars brand marketing campaign tasks in Asana, tracking creative development, media buys, and launch milestones.

naftiko: '0.5'
info:
  label: Asana Brand Campaign Manager
  description: Manages Mars brand marketing campaign tasks in Asana, tracking creative development, media buys, and launch milestones.
  tags:
  - marketing
  - asana
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: campaign-tasks
    port: 8080
    tools:
    - name: create-campaign-task
      description: Create a marketing campaign task in Asana.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Asana project ID.
      - name: task_name
        in: body
        type: string
        description: Task name.
      - name: due_date
        in: body
        type: string
        description: Due date.
      call: asana.create-task
      with:
        project_id: '{{project_id}}'
        name: '{{task_name}}'
        due_on: '{{due_date}}'
  consumes:
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → asana-brand-campaign-manager.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 3
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-3.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 2
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-2
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mars.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mars-workflow-2.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 3
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-3
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mars-workflow-3.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 2
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-2.yml

Calculates sales tax for Mars product orders using Avalara, ensuring tax compliance across jurisdictions.

naftiko: '0.5'
info:
  label: Avalara Tax Compliance Calculator
  description: Calculates sales tax for Mars product orders using Avalara, ensuring tax compliance across jurisdictions.
  tags:
  - tax
  - avalara
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-compliance
    port: 8080
    tools:
    - name: calculate-tax
      description: Calculate sales tax for an order using Avalara.
      inputParameters:
      - name: order_amount
        in: body
        type: number
        description: Order total amount.
      - name: ship_to_state
        in: body
        type: string
        description: Shipping destination state/province.
      - name: product_tax_code
        in: body
        type: string
        description: Product tax code.
      call: avalara.calculate-tax
      with:
        amount: '{{order_amount}}'
        destination: '{{ship_to_state}}'
        tax_code: '{{product_tax_code}}'
  consumes:
  - type: http
    namespace: avalara
    baseUri: https://rest.avatax.com/api/v2
    authentication:
      type: basic
      username: $secrets.avalara_account_id
      password: $secrets.avalara_license_key
    resources:
    - name: transactions
      path: /transactions/create
      operations:
      - name: calculate-tax
        method: POST
Open in Framework → View in Fleet → avalara-tax-compliance-calculator.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.

naftiko: '0.5'
info:
  label: Mars Workflow 1
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: mars-workflow-1
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Mars.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mars-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mars-ops
    baseUri: https://api.mars.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mars.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mars-workflow-1.yml

Retrieves operational data for Mars food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Mars Data Lookup 1
  description: Retrieves operational data for Mars food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mars-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Mars food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mars-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mars-data
    baseUri: https://api.mars.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mars_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → mars-data-lookup-1.yml

Monitors Mattel e-commerce platform health via Dynatrace, tracking response times, error rates, and cart conversion metrics.

naftiko: '0.5'
info:
  label: Dynatrace E-Commerce Platform Monitor
  description: Monitors Mattel e-commerce platform health via Dynatrace, tracking response times, error rates, and cart conversion metrics.
  tags:
  - monitoring
  - dynatrace
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-monitoring
    port: 8080
    tools:
    - name: check-ecommerce-health
      description: Check Dynatrace health metrics for the Mattel e-commerce platform.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: Dynatrace application entity ID.
      call: dynatrace.get-metrics
      with:
        entity_id: '{{application_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://mattel.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query
      inputParameters:
      - name: entity_id
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-e-commerce-platform-monitor.yml

Uses Google Maps API to calculate shipping distances and transit times from Mattel distribution centers to retail partner locations.

naftiko: '0.5'
info:
  label: Google Maps Distribution Center Locator
  description: Uses Google Maps API to calculate shipping distances and transit times from Mattel distribution centers to retail partner locations.
  tags:
  - logistics
  - google-maps
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: distribution-routing
    port: 8080
    tools:
    - name: calculate-shipping-distance
      description: Calculate distance and transit time from a distribution center to a retailer.
      inputParameters:
      - name: dc_address
        in: body
        type: string
        description: Distribution center address.
      - name: retailer_address
        in: body
        type: string
        description: Retailer location address.
      call: google-maps.get-distance
      with:
        origin: '{{dc_address}}'
        destination: '{{retailer_address}}'
  consumes:
  - type: http
    namespace: google-maps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      key: $secrets.google_maps_key
    resources:
    - name: distance
      path: /distancematrix/json
      inputParameters:
      - name: origin
        in: query
      - name: destination
        in: query
      operations:
      - name: get-distance
        method: GET
Open in Framework → View in Fleet → google-maps-distribution-center-locator.yml

Pulls content performance metrics from Adobe Analytics for Mattel brand websites, identifying top products and conversion paths.

naftiko: '0.5'
info:
  label: Adobe Analytics Brand Website Performance
  description: Pulls content performance metrics from Adobe Analytics for Mattel brand websites, identifying top products and conversion paths.
  tags:
  - analytics
  - adobe-analytics
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: get-brand-performance
      description: Retrieve brand website performance from Adobe Analytics.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: 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}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{company_id}}/reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-brand-website-performance.yml

Posts daily retail sales summaries to Slack channels, aggregating sell-through data by brand and top retailers.

naftiko: '0.5'
info:
  label: Slack Daily Retail Sales Alert
  description: Posts daily retail sales summaries to Slack channels, aggregating sell-through data by brand and top retailers.
  tags:
  - retail
  - slack
  - daily-reporting
  - sales
capability:
  exposes:
  - type: mcp
    namespace: daily-sales
    port: 8080
    tools:
    - name: post-daily-sales
      description: Post daily retail sales summary to Slack.
      inputParameters:
      - name: date
        in: body
        type: string
        description: Reporting date in YYYY-MM-DD format.
      steps:
      - name: get-sales-data
        type: call
        call: salesforce.get-daily-sales
        with:
          date: '{{date}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: retail-sales-daily
          text: 'Daily Sales ({{date}}): Total revenue: {{get-sales-data.total_revenue}}. Top brand: {{get-sales-data.top_brand}}. Top retailer: {{get-sales-data.top_retailer}}. Units: {{get-sales-data.total_units}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sales
      path: /sobjects/Daily_Sales__c
      operations:
      - name: get-daily-sales
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-daily-retail-sales-alert.yml

Pulls toy market share and competitive data from Circana, storing insights in SharePoint for brand management analysis.

naftiko: '0.5'
info:
  label: Circana Market Share Intelligence
  description: Pulls toy market share and competitive data from Circana, storing insights in SharePoint for brand management analysis.
  tags:
  - market-intelligence
  - circana
  - sharepoint
  - competitive-analysis
capability:
  exposes:
  - type: mcp
    namespace: market-intel
    port: 8080
    tools:
    - name: get-market-share
      description: Fetch toy market share data from Circana and store in SharePoint.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: Mattel brand name.
      - name: category
        in: body
        type: string
        description: Toy category (dolls, vehicles, games, preschool).
      - name: region
        in: body
        type: string
        description: Geographic region.
      steps:
      - name: get-data
        type: call
        call: circana.get-market-share
        with:
          brand: '{{brand}}'
          category: '{{category}}'
          region: '{{region}}'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: market_intelligence
          folder_path: MarketShare/{{brand}}/{{region}}
          content: '{{get-data.report}}'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: market-share
      path: /market-share
      inputParameters:
      - name: brand
        in: query
      - name: category
        in: query
      - name: region
        in: query
      operations:
      - name: get-market-share
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → circana-market-share-intelligence.yml

Checks F5 Networks load balancer health for Mattel e-commerce and web application pools.

naftiko: '0.5'
info:
  label: F5 Load Balancer Health Check
  description: Checks F5 Networks load balancer health for Mattel e-commerce and web application pools.
  tags:
  - infrastructure
  - f5-networks
  - load-balancing
capability:
  exposes:
  - type: mcp
    namespace: lb-health
    port: 8080
    tools:
    - name: check-pool-health
      description: Check F5 load balancer pool health.
      inputParameters:
      - name: pool_name
        in: body
        type: string
        description: F5 pool name.
      call: f5.get-pool-status
      with:
        pool: '{{pool_name}}'
  consumes:
  - type: http
    namespace: f5
    baseUri: https://mattel-f5.com/mgmt/tm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pools
      path: /ltm/pool/{{pool}}/members
      inputParameters:
      - name: pool
        in: path
      operations:
      - name: get-pool-status
        method: GET
Open in Framework → View in Fleet → f5-load-balancer-health-check.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 10
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-10.yml

Monitors SolarWinds network health at Mattel manufacturing plants, distribution centers, and corporate offices.

naftiko: '0.5'
info:
  label: SolarWinds Network Health Monitor
  description: Monitors SolarWinds network health at Mattel manufacturing plants, distribution centers, and corporate offices.
  tags:
  - network
  - solarwinds
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: network-health
    port: 8080
    tools:
    - name: get-network-status
      description: Check SolarWinds network health at a Mattel location.
      inputParameters:
      - name: location
        in: body
        type: string
        description: Facility or office location.
      call: solarwinds.get-nodes
      with:
        location: '{{location}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://mattel-solarwinds.com/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query
      operations:
      - name: get-nodes
        method: POST
Open in Framework → View in Fleet → solarwinds-network-health-monitor.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 3
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-3
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#toys'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-3.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 16
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-16
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: TOYS
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mattel.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mattel-workflow-16.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 17
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-17
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mattel-workflow-17.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 2
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-2
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mattel.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mattel-workflow-2.yml

Synchronizes e-commerce orders from BigCommerce to SAP for fulfillment, ensuring inventory allocation and shipping scheduling.

naftiko: '0.5'
info:
  label: E-Commerce Order Fulfillment Sync
  description: Synchronizes e-commerce orders from BigCommerce to SAP for fulfillment, ensuring inventory allocation and shipping scheduling.
  tags:
  - e-commerce
  - bigcommerce
  - sap
  - order-fulfillment
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-sync
    port: 8080
    tools:
    - name: sync-ecommerce-orders
      description: Pull BigCommerce orders and create SAP sales orders for fulfillment.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date for order retrieval.
      - name: date_to
        in: body
        type: string
        description: End date for order retrieval.
      steps:
      - name: get-orders
        type: call
        call: bigcommerce.get-orders
        with:
          min_date: '{{date_from}}'
          max_date: '{{date_to}}'
      - name: create-sap-orders
        type: call
        call: sap.create-sales-orders
        with:
          orders: '{{get-orders.orders}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: get-orders
        method: GET
  - type: http
    namespace: sap
    baseUri: https://mattel-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /A_SalesOrder
      operations:
      - name: create-sales-orders
        method: POST
Open in Framework → View in Fleet → e-commerce-order-fulfillment-sync.yml

Manages a toy product recall by updating SAP inventory status, creating a ServiceNow crisis case, notifying retailers via Salesforce, and alerting the crisis team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Safety Recall Manager
  description: Manages a toy product recall by updating SAP inventory status, creating a ServiceNow crisis case, notifying retailers via Salesforce, and alerting the crisis team via Microsoft Teams.
  tags:
  - product-safety
  - recall
  - sap
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Initiate a product recall across all systems and notify stakeholders.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: SAP material/product ID.
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: reason
        in: body
        type: string
        description: Recall reason.
      - name: batch_numbers
        in: body
        type: string
        description: Comma-separated batch numbers affected.
      steps:
      - name: block-inventory
        type: call
        call: sap.block-material
        with:
          material_id: '{{product_id}}'
          batches: '{{batch_numbers}}'
          status: blocked
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Product recall: {{product_name}}'
          category: recall
          priority: '1'
          description: 'Product: {{product_name}} ({{product_id}}). Batches: {{batch_numbers}}. Reason: {{reason}}.'
      - name: notify-retailers
        type: call
        call: salesforce.create-mass-notification
        with:
          subject: 'Recall: {{product_name}}'
          message: 'Please remove {{product_name}} (batches: {{batch_numbers}}) from shelves. Reason: {{reason}}.'
      - name: alert-crisis-team
        type: call
        call: msteams.send-message
        with:
          channel_id: crisis-management
          text: 'RECALL INITIATED: {{product_name}} ({{product_id}}). Batches: {{batch_numbers}}. Reason: {{reason}}. ServiceNow: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mattel-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material
      operations:
      - name: block-material
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://mattel.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://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notifications
      path: /sobjects/Mass_Notification__c
      operations:
      - name: create-mass-notification
        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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-safety-recall-manager.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 11
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-11.yml

Manages toy safety compliance documents by storing test reports in SharePoint, logging certifications in ServiceNow, and archiving to Box.

naftiko: '0.5'
info:
  label: Toy Safety Compliance Document Manager
  description: Manages toy safety compliance documents by storing test reports in SharePoint, logging certifications in ServiceNow, and archiving to Box.
  tags:
  - compliance
  - toy-safety
  - sharepoint
  - servicenow
  - box
capability:
  exposes:
  - type: mcp
    namespace: safety-compliance
    port: 8080
    tools:
    - name: file-safety-report
      description: File a toy safety test report across SharePoint, ServiceNow, and Box.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: test_standard
        in: body
        type: string
        description: Safety standard (ASTM-F963, EN-71, CPSIA).
      - name: test_result
        in: body
        type: string
        description: Test result (pass, fail, conditional).
      - name: report_content
        in: body
        type: string
        description: Test report content summary.
      steps:
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: product_safety
          folder_path: TestReports/{{product_name}}/{{test_standard}}
          content: '{{report_content}}'
      - name: log-certification
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Safety cert: {{product_name}} - {{test_standard}}'
          category: product_safety
          description: 'Standard: {{test_standard}}. Result: {{test_result}}. Report: {{store-report.url}}.'
      - name: archive-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: safety_archive
          file_name: '{{product_name}}_{{test_standard}}_report'
          metadata: standard:{{test_standard}},result:{{test_result}},retention:10years
  consumes:
  - 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: upload-file
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://mattel.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: 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
Open in Framework → View in Fleet → toy-safety-compliance-document-manager.yml

Pulls website traffic metrics from Google Analytics for Mattel brand websites including Barbie, Hot Wheels, and Fisher-Price.

naftiko: '0.5'
info:
  label: Google Analytics Brand Website Tracker
  description: Pulls website traffic metrics from Google Analytics for Mattel brand websites including Barbie, Hot Wheels, and Fisher-Price.
  tags:
  - marketing
  - google-analytics
  - web-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-brand-traffic
      description: Retrieve web traffic from Google Analytics for a Mattel brand website.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.get-report
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  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
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-brand-website-tracker.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 13
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-13.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 15
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-15
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#toys'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-15.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 29
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-29
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mattel-workflow-29.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 28
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-28
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: TOYS
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mattel.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mattel-workflow-28.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 14
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-14
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mattel.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mattel-workflow-14.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 1
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-1
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mattel-workflow-1.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 12
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-12.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 9
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-9.yml

Manages virtual toy fair events and retailer presentations via Zoom, creating meetings and sending invitations through Microsoft Outlook.

naftiko: '0.5'
info:
  label: Zoom Toy Fair Virtual Event Manager
  description: Manages virtual toy fair events and retailer presentations via Zoom, creating meetings and sending invitations through Microsoft Outlook.
  tags:
  - events
  - zoom
  - microsoft-outlook
  - retail
capability:
  exposes:
  - type: mcp
    namespace: virtual-events
    port: 8080
    tools:
    - name: create-toy-fair-event
      description: Create a Zoom meeting for a virtual toy fair event and send invitations.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: Event name.
      - name: date_time
        in: body
        type: string
        description: Event date/time in ISO 8601 format.
      - name: duration_minutes
        in: body
        type: integer
        description: Event duration in minutes.
      - name: invitee_emails
        in: body
        type: string
        description: Comma-separated invitee emails.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{event_name}}'
          start_time: '{{date_time}}'
          duration: '{{duration_minutes}}'
      - name: send-invitations
        type: call
        call: outlook.send-email
        with:
          to: '{{invitee_emails}}'
          subject: 'Invitation: {{event_name}}'
          body: 'You are invited to {{event_name}} on {{date_time}}. Join via Zoom: {{create-meeting.join_url}}.'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → zoom-toy-fair-virtual-event-manager.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 5
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-5
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mattel-workflow-5.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 10
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-10
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mattel.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mattel-workflow-10.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 11
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-11
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mattel-workflow-11.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 4
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-4
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: TOYS
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mattel.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mattel-workflow-4.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 8
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-8.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 15
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-15.yml

Manages intellectual property licensing deals in Salesforce, tracking deal stages, royalty terms, and partner activations with Microsoft Teams notifications.

naftiko: '0.5'
info:
  label: Licensing Deal Tracker
  description: Manages intellectual property licensing deals in Salesforce, tracking deal stages, royalty terms, and partner activations with Microsoft Teams notifications.
  tags:
  - licensing
  - intellectual-property
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: licensing-deals
    port: 8080
    tools:
    - name: update-licensing-deal
      description: Update a licensing deal stage in Salesforce and notify the IP team.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: Salesforce opportunity ID for the licensing deal.
      - name: new_stage
        in: body
        type: string
        description: New deal stage.
      - name: royalty_rate
        in: body
        type: string
        description: Agreed royalty rate percentage.
      - name: notes
        in: body
        type: string
        description: Deal notes.
      steps:
      - name: update-deal
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{deal_id}}'
          stage: '{{new_stage}}'
          description: 'Royalty: {{royalty_rate}}%. {{notes}}'
      - name: notify-ip-team
        type: call
        call: msteams.send-message
        with:
          channel_id: ip-licensing
          text: 'Licensing deal {{deal_id}} moved to {{new_stage}}. Royalty rate: {{royalty_rate}}%. Notes: {{notes}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → licensing-deal-tracker.yml

Monitors Mattel e-commerce application performance via New Relic, tracking response times, throughput, and error rates.

naftiko: '0.5'
info:
  label: New Relic E-Commerce Performance Monitor
  description: Monitors Mattel e-commerce application performance via New Relic, tracking response times, throughput, and error rates.
  tags:
  - monitoring
  - new-relic
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-apm
    port: 8080
    tools:
    - name: get-ecommerce-health
      description: Retrieve New Relic APM metrics for the e-commerce platform.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: New Relic application name.
      call: newrelic.get-app-metrics
      with:
        app_name: '{{app_name}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json
      inputParameters:
      - name: app_name
        in: query
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-e-commerce-performance-monitor.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 6
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-6
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: TOYS
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mattel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mattel-workflow-6.yml

Sends brand newsletters via MailChimp to consumer segments from Salesforce for Mattel product updates and promotions.

naftiko: '0.5'
info:
  label: MailChimp Brand Newsletter Manager
  description: Sends brand newsletters via MailChimp to consumer segments from Salesforce for Mattel product updates and promotions.
  tags:
  - marketing
  - mailchimp
  - salesforce
  - newsletters
capability:
  exposes:
  - type: mcp
    namespace: brand-newsletters
    port: 8080
    tools:
    - name: send-brand-newsletter
      description: Send a brand newsletter using Salesforce segments and MailChimp.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      - name: segment_name
        in: body
        type: string
        description: Salesforce consumer segment.
      - name: subject_line
        in: body
        type: string
        description: Email subject line.
      steps:
      - name: get-segment
        type: call
        call: salesforce.get-segment
        with:
          segment: '{{segment_name}}'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_name: '{{brand}}_newsletter'
          subject: '{{subject_line}}'
          recipients: '{{get-segment.emails}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: get-segment
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-brand-newsletter-manager.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 13
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-13
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mattel-workflow-13.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 12
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-12
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: toys.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mattel-workflow-12.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 7
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-7
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: toys
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-7.yml

Creates and manages product development tasks in Microsoft Planner for toy design, prototyping, and production milestones.

naftiko: '0.5'
info:
  label: Microsoft Planner Product Development Tracker
  description: Creates and manages product development tasks in Microsoft Planner for toy design, prototyping, and production milestones.
  tags:
  - product-development
  - microsoft-planner
  - task-management
capability:
  exposes:
  - type: mcp
    namespace: product-dev-tasks
    port: 8080
    tools:
    - name: create-development-task
      description: Create a product development task in Microsoft Planner.
      inputParameters:
      - name: task_title
        in: body
        type: string
        description: Task title.
      - name: plan_id
        in: body
        type: string
        description: Planner plan ID.
      - name: due_date
        in: body
        type: string
        description: Due date.
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      call: planner.create-task
      with:
        plan_id: '{{plan_id}}'
        title: '[{{brand}}] {{task_title}}'
        due_date: '{{due_date}}'
  consumes:
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → microsoft-planner-product-development-tracker.yml

Monitors Mattel application performance via Datadog, tracking API latency, error rates, and resource utilization.

naftiko: '0.5'
info:
  label: Datadog Application Performance Monitor
  description: Monitors Mattel application performance via Datadog, tracking API latency, error rates, and resource utilization.
  tags:
  - monitoring
  - datadog
  - application-performance
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: get-app-metrics
      description: Retrieve application metrics from Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name to monitor.
      - name: timeframe
        in: body
        type: string
        description: Time range.
      call: datadog.get-metrics
      with:
        service: '{{service_name}}'
        from: '{{timeframe}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-application-performance-monitor.yml

Retrieves a SAP sales order by order number for Mattel retail fulfillment, returning customer, products, quantities, and delivery status.

naftiko: '0.5'
info:
  label: SAP Sales Order Lookup
  description: Retrieves a SAP sales order by order number for Mattel retail fulfillment, returning customer, products, quantities, and delivery status.
  tags:
  - retail
  - erp
  - sap
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: sales-orders
    port: 8080
    tools:
    - name: get-sales-order
      description: Look up a SAP sales order by order number.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP sales order number.
      call: sap.get-sales-order
      with:
        order_number: '{{order_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mattel-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /A_SalesOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-sales-order
        method: GET
Open in Framework → View in Fleet → sap-sales-order-lookup.yml

Runs demand forecasting for Mattel products using Azure Databricks, pulling sales history from SAP BW and publishing to Tableau.

naftiko: '0.5'
info:
  label: Inventory Demand Forecast Pipeline
  description: Runs demand forecasting for Mattel products using Azure Databricks, pulling sales history from SAP BW and publishing to Tableau.
  tags:
  - supply-chain
  - forecasting
  - azure-databricks
  - sap-bw
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: demand-forecast
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Execute a demand forecast for a product category.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      - name: category
        in: body
        type: string
        description: Product category.
      - name: horizon
        in: body
        type: string
        description: Forecast horizon (e.g., 12-weeks).
      steps:
      - name: get-history
        type: call
        call: sap-bw.get-sales-history
        with:
          brand: '{{brand}}'
          category: '{{category}}'
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          job_name: demand_forecast
          parameters: brand={{brand}}&category={{category}}&horizon={{horizon}}
      - name: publish-results
        type: call
        call: tableau.publish-datasource
        with:
          project_id: demand_planning
          datasource_name: Forecast_{{brand}}_{{category}}
          data: '{{run-model.output}}'
  consumes:
  - type: http
    namespace: sap-bw
    baseUri: https://mattel-bw.sap.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: sales-history
      path: /SALES_HISTORY_SRV/SalesData
      operations:
      - name: get-sales-history
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-mattel.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mattel-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → inventory-demand-forecast-pipeline.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 14
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-14.yml

Monitors Cloudflare CDN performance for Mattel e-commerce and brand websites, checking cache hit ratios and page load metrics.

naftiko: '0.5'
info:
  label: Cloudflare E-Commerce CDN Monitor
  description: Monitors Cloudflare CDN performance for Mattel e-commerce and brand websites, checking cache hit ratios and page load metrics.
  tags:
  - infrastructure
  - cloudflare
  - e-commerce
  - cdn
capability:
  exposes:
  - type: mcp
    namespace: cdn-monitor
    port: 8080
    tools:
    - name: get-cdn-performance
      description: Retrieve CDN performance metrics from Cloudflare.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      call: cloudflare.get-analytics
      with:
        zone_id: '{{zone_id}}'
  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
Open in Framework → View in Fleet → cloudflare-e-commerce-cdn-monitor.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 6
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-6.yml

Manages Mattel brand marketing campaign tasks in Asana, tracking creative development, retail activations, and media placements.

naftiko: '0.5'
info:
  label: Asana Brand Marketing Tracker
  description: Manages Mattel brand marketing campaign tasks in Asana, tracking creative development, retail activations, and media placements.
  tags:
  - marketing
  - asana
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: marketing-tasks
    port: 8080
    tools:
    - name: create-marketing-task
      description: Create a marketing task in Asana.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Asana project ID.
      - name: task_name
        in: body
        type: string
        description: Task name.
      - name: due_date
        in: body
        type: string
        description: Due date.
      call: asana.create-task
      with:
        project_id: '{{project_id}}'
        name: '{{task_name}}'
        due_on: '{{due_date}}'
  consumes:
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → asana-brand-marketing-tracker.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 23
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-23
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mattel-workflow-23.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 22
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-22
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mattel.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mattel-workflow-22.yml

Generates Microsoft Excel financial reports for Mattel brand performance, pulling data from SAP and distributing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Excel Financial Report Builder
  description: Generates Microsoft Excel financial reports for Mattel brand performance, pulling data from SAP and distributing via Microsoft Outlook.
  tags:
  - finance
  - microsoft-excel
  - sap
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: financial-reports
    port: 8080
    tools:
    - name: generate-financial-report
      description: Generate a brand financial report and email to stakeholders.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      - name: period
        in: body
        type: string
        description: Reporting period.
      - name: recipient_email
        in: body
        type: string
        description: Recipient email.
      steps:
      - name: get-data
        type: call
        call: sap.get-financial-data
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: send-report
        type: call
        call: outlook.send-email
        with:
          to: '{{recipient_email}}'
          subject: 'Financial Report: {{brand}} - {{period}}'
          body: '{{brand}} financial summary for {{period}}. Revenue: {{get-data.revenue}}. Gross margin: {{get-data.margin}}%. Units sold: {{get-data.units}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mattel-s4.sap.com/sap/opu/odata/sap/FIN_REPORTING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financial
      path: /BrandPerformance
      inputParameters:
      - name: brand
        in: query
      - name: period
        in: query
      operations:
      - name: get-financial-data
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → microsoft-excel-financial-report-builder.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 7
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-7.yml

Retrieves approved brand design assets from Canva for Mattel marketing teams to use in campaigns and retail materials.

naftiko: '0.5'
info:
  label: Canva Brand Design Asset Manager
  description: Retrieves approved brand design assets from Canva for Mattel marketing teams to use in campaigns and retail materials.
  tags:
  - brand-management
  - canva
  - design
capability:
  exposes:
  - type: mcp
    namespace: brand-assets
    port: 8080
    tools:
    - name: get-design-asset
      description: Retrieve an approved design asset from Canva.
      inputParameters:
      - name: design_id
        in: body
        type: string
        description: Canva design ID.
      call: canva.get-design
      with:
        design_id: '{{design_id}}'
  consumes:
  - type: http
    namespace: canva
    baseUri: https://api.canva.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.canva_token
    resources:
    - name: designs
      path: /designs/{{design_id}}
      inputParameters:
      - name: design_id
        in: path
      operations:
      - name: get-design
        method: GET
Open in Framework → View in Fleet → canva-brand-design-asset-manager.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 5
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-5.yml

Retrieves Google Tag Manager configurations for Mattel brand e-commerce sites to validate analytics and marketing tag implementations.

naftiko: '0.5'
info:
  label: Google Tag Manager Tracking Validator
  description: Retrieves Google Tag Manager configurations for Mattel brand e-commerce sites to validate analytics and marketing tag implementations.
  tags:
  - marketing
  - google-tag-manager
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: gtm-validation
    port: 8080
    tools:
    - name: validate-tags
      description: Retrieve GTM container tags for validation.
      inputParameters:
      - name: container_id
        in: body
        type: string
        description: GTM container ID.
      call: gtm.get-tags
      with:
        container_id: '{{container_id}}'
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_gtm_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/default/tags
      inputParameters:
      - name: container_id
        in: path
      operations:
      - name: get-tags
        method: GET
Open in Framework → View in Fleet → google-tag-manager-tracking-validator.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 9
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-9
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mattel-workflow-9.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 34
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-34
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mattel.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mattel-workflow-34.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 20
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-20
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mattel-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mattel-workflow-20.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 21
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-21
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mattel-workflow-21.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 35
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-35
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mattel-workflow-35.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 8
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-8
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mattel-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mattel-workflow-8.yml

Manages 3D design asset versioning in Perforce for Mattel toy designers, tracking iterations and approvals.

naftiko: '0.5'
info:
  label: Perforce Design Asset Version Control
  description: Manages 3D design asset versioning in Perforce for Mattel toy designers, tracking iterations and approvals.
  tags:
  - product-design
  - perforce
  - version-control
  - 3d-design
capability:
  exposes:
  - type: mcp
    namespace: design-versioning
    port: 8080
    tools:
    - name: get-asset-history
      description: Retrieve version history for a design asset in Perforce.
      inputParameters:
      - name: depot_path
        in: body
        type: string
        description: Perforce depot path of the design asset.
      call: perforce.get-filelog
      with:
        path: '{{depot_path}}'
  consumes:
  - type: http
    namespace: perforce
    baseUri: https://mattel-perforce.com/api/v1
    authentication:
      type: bearer
      token: $secrets.perforce_token
    resources:
    - name: files
      path: /files/{{path}}/history
      inputParameters:
      - name: path
        in: path
      operations:
      - name: get-filelog
        method: GET
Open in Framework → View in Fleet → perforce-design-asset-version-control.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 4
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-4.yml

Tracks vendor quality audits by creating ServiceNow audit records, uploading inspection reports to SharePoint, and notifying procurement via Slack.

naftiko: '0.5'
info:
  label: Vendor Quality Audit Pipeline
  description: Tracks vendor quality audits by creating ServiceNow audit records, uploading inspection reports to SharePoint, and notifying procurement via Slack.
  tags:
  - manufacturing
  - vendor-management
  - servicenow
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vendor-audits
    port: 8080
    tools:
    - name: log-vendor-audit
      description: Log a vendor quality audit across ServiceNow, SharePoint, and Slack.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Vendor name.
      - name: audit_type
        in: body
        type: string
        description: Audit type (safety, quality, environmental, social-compliance).
      - name: score
        in: body
        type: string
        description: Audit score.
      - name: findings
        in: body
        type: string
        description: Audit findings summary.
      steps:
      - name: create-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor audit: {{vendor_name}} - {{audit_type}}'
          category: vendor_audit
          description: 'Score: {{score}}. Findings: {{findings}}.'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: vendor_management
          folder_path: Audits/{{vendor_name}}/{{audit_type}}
          content: 'Vendor: {{vendor_name}}. Type: {{audit_type}}. Score: {{score}}. Findings: {{findings}}.'
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: vendor-audits
          text: 'Vendor audit completed: {{vendor_name}} ({{audit_type}}). Score: {{score}}. ServiceNow: {{create-record.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://mattel.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: upload-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → vendor-quality-audit-pipeline.yml

Creates and manages product knowledge articles in Confluence for Mattel retail partners, documenting product features, assembly instructions, and FAQs.

naftiko: '0.5'
info:
  label: Confluence Product Knowledge Base
  description: Creates and manages product knowledge articles in Confluence for Mattel retail partners, documenting product features, assembly instructions, and FAQs.
  tags:
  - knowledge-management
  - confluence
  - retail-enablement
capability:
  exposes:
  - type: mcp
    namespace: product-knowledge
    port: 8080
    tools:
    - name: create-product-article
      description: Create a product knowledge article in Confluence.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      - name: content
        in: body
        type: string
        description: Article content.
      call: confluence.create-page
      with:
        space_key: PRODUCTS
        title: '{{brand}} - {{product_name}}'
        content: '{{content}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mattel.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-product-knowledge-base.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 19
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-19
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: toys
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-19.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 31
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-31
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: toys
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-31.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 25
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-25
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mattel.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mattel-workflow-25.yml

Manages product design reviews by uploading 3D models and concepts to SharePoint, creating Jira review tickets, and notifying the design team via Slack.

naftiko: '0.5'
info:
  label: Product Design Review Pipeline
  description: Manages product design reviews by uploading 3D models and concepts to SharePoint, creating Jira review tickets, and notifying the design team via Slack.
  tags:
  - product-design
  - design-review
  - sharepoint
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: design-review
    port: 8080
    tools:
    - name: submit-design-review
      description: Submit a toy design for team review across SharePoint, Jira, and Slack.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: brand
        in: body
        type: string
        description: Mattel brand.
      - name: designer_name
        in: body
        type: string
        description: Designer name.
      - name: design_description
        in: body
        type: string
        description: Design description and key features.
      steps:
      - name: upload-design
        type: call
        call: sharepoint.upload-file
        with:
          site_id: product_design
          folder_path: Designs/{{brand}}/{{product_name}}
          content: '{{design_description}}'
      - name: create-review-ticket
        type: call
        call: jira.create-issue
        with:
          project: DESIGN
          summary: 'Design review: {{product_name}} ({{brand}})'
          description: 'Designer: {{designer_name}}. {{design_description}}. Files: {{upload-design.url}}'
          issue_type: Task
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: design-reviews-{{brand}}
          text: 'New design review: {{product_name}} by {{designer_name}}. Jira: {{create-review-ticket.key}}. Files: {{upload-design.url}}.'
  consumes:
  - 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: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://mattel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → product-design-review-pipeline.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 24
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-24
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: toys.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mattel-workflow-24.yml

Retrieves a SAP Concur expense report for Mattel associates by report ID, returning line items, approvals, and reimbursement status.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Lookup
  description: Retrieves a SAP Concur expense report for Mattel associates by report ID, returning line items, approvals, and reimbursement status.
  tags:
  - travel
  - expenses
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: expense-reports
    port: 8080
    tools:
    - name: get-expense-report
      description: Retrieve a Concur expense report by ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
  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-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-lookup.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 30
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-30
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: TOYS
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mattel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mattel-workflow-30.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 18
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-18
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: TOYS
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mattel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mattel-workflow-18.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 1
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-1.yml

Monitors Azure DevOps build pipelines for Mattel digital platforms and e-commerce applications.

naftiko: '0.5'
info:
  label: Azure DevOps CI Pipeline Monitor
  description: Monitors Azure DevOps build pipelines for Mattel digital platforms and e-commerce applications.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: get-build-status
      description: Check latest build status for an Azure DevOps pipeline.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline definition ID.
      call: azuredevops.get-latest-build
      with:
        project: '{{project_name}}'
        definition_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/mattel
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: definition_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-ci-pipeline-monitor.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 3
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-3.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 26
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-26
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mattel.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mattel-workflow-26.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 32
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-32
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mattel-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mattel-workflow-32.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 33
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-33
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mattel-workflow-33.yml

Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.

naftiko: '0.5'
info:
  label: Mattel Workflow 27
  description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
  tags:
  - toys
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: toys
    port: 8080
    tools:
    - name: mattel-workflow-27
      description: Orchestrates toys operations including data retrieval, processing, and automated notification for Mattel.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mattel-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#toys'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: mattel-ops
    baseUri: https://api.mattel.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mattel-workflow-27.yml

Monitors GitHub Actions CI workflows for Mattel digital repositories, alerting developers via Slack on build failures.

naftiko: '0.5'
info:
  label: GitHub Actions CI Pipeline Monitor
  description: Monitors GitHub Actions CI workflows for Mattel digital repositories, alerting developers via Slack on build failures.
  tags:
  - devops
  - github-actions
  - slack
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: ci-monitor
    port: 8080
    tools:
    - name: monitor-ci
      description: Check GitHub Actions workflow status and alert on failures.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository (org/repo).
      - name: workflow_name
        in: body
        type: string
        description: Workflow file name.
      steps:
      - name: get-runs
        type: call
        call: github.get-workflow-runs
        with:
          repo: '{{repo_name}}'
          workflow: '{{workflow_name}}'
      - name: notify-failure
        type: call
        call: slack.post-message
        with:
          channel: ci-alerts
          text: CI {{get-runs.latest_run.conclusion}} for {{repo_name}}/{{workflow_name}}.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/runs
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-pipeline-monitor.yml

Manages consumer marketing campaigns in HubSpot for Mattel brands, tracking engagement and conversion metrics.

naftiko: '0.5'
info:
  label: HubSpot Consumer Marketing Campaign
  description: Manages consumer marketing campaigns in HubSpot for Mattel brands, tracking engagement and conversion metrics.
  tags:
  - marketing
  - hubspot
  - campaigns
capability:
  exposes:
  - type: mcp
    namespace: marketing-campaigns
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Retrieve HubSpot campaign performance metrics.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: HubSpot campaign ID.
      call: hubspot.get-campaign
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /marketing/v3/campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
Open in Framework → View in Fleet → hubspot-consumer-marketing-campaign.yml

Retrieves operational data for Mattel toys workflows.

naftiko: '0.5'
info:
  label: Mattel Data Lookup 2
  description: Retrieves operational data for Mattel toys workflows.
  tags:
  - toys
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mattel-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Mattel toys workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mattel-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mattel-data
    baseUri: https://api.mattel.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mattel_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → mattel-data-lookup-2.yml

Tracks Mattel gaming integrations on Microsoft Xbox platform, monitoring engagement metrics for Hot Wheels and other brand game tie-ins.

naftiko: '0.5'
info:
  label: Xbox Gaming Integration Tracker
  description: Tracks Mattel gaming integrations on Microsoft Xbox platform, monitoring engagement metrics for Hot Wheels and other brand game tie-ins.
  tags:
  - gaming
  - microsoft-xbox
  - brand-partnerships
capability:
  exposes:
  - type: mcp
    namespace: gaming-integrations
    port: 8080
    tools:
    - name: get-xbox-metrics
      description: Retrieve Xbox gaming engagement metrics for a Mattel brand game integration.
      inputParameters:
      - name: game_title
        in: body
        type: string
        description: Game title.
      - name: integration_id
        in: body
        type: string
        description: Integration identifier.
      call: xbox.get-engagement
      with:
        title: '{{game_title}}'
        integration: '{{integration_id}}'
  consumes:
  - type: http
    namespace: xbox
    baseUri: https://xapi.xboxlive.com/v1
    authentication:
      type: bearer
      token: $secrets.xbox_token
    resources:
    - name: engagement
      path: /titles/{{title}}/analytics
      inputParameters:
      - name: title
        in: path
      operations:
      - name: get-engagement
        method: GET
Open in Framework → View in Fleet → xbox-gaming-integration-tracker.yml

Runs Informatica data quality jobs on Mattel product master data to ensure consistency across global retail and e-commerce channels.

naftiko: '0.5'
info:
  label: Informatica Product Master Data Pipeline
  description: Runs Informatica data quality jobs on Mattel product master data to ensure consistency across global retail and e-commerce channels.
  tags:
  - data-quality
  - informatica
  - master-data
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-mdm-pipeline
      description: Execute Informatica master data management pipeline.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Informatica job name.
      - name: data_domain
        in: body
        type: string
        description: Data domain (product, vendor, customer).
      call: informatica.run-job
      with:
        job_name: '{{job_name}}'
        domain: '{{data_domain}}'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://mattel-iics.informatica.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → informatica-product-master-data-pipeline.yml

Uploads Mattel brand video content to YouTube channels for Barbie, Hot Wheels, and other brands with metadata and scheduling.

naftiko: '0.5'
info:
  label: YouTube Brand Content Uploader
  description: Uploads Mattel brand video content to YouTube channels for Barbie, Hot Wheels, and other brands with metadata and scheduling.
  tags:
  - marketing
  - youtube
  - video
  - brand-content
capability:
  exposes:
  - type: mcp
    namespace: youtube-content
    port: 8080
    tools:
    - name: upload-brand-video
      description: Upload a video to a Mattel brand YouTube channel.
      inputParameters:
      - name: video_url
        in: body
        type: string
        description: URL of the video file.
      - name: title
        in: body
        type: string
        description: Video title.
      - name: description
        in: body
        type: string
        description: Video description.
      - name: brand
        in: body
        type: string
        description: Mattel brand name.
      call: youtube.upload-video
      with:
        video_url: '{{video_url}}'
        title: '{{title}}'
        description: '{{description}}'
        channel: '{{brand}}'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/upload/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: videos
      path: /videos?part=snippet,status
      operations:
      - name: upload-video
        method: POST
Open in Framework → View in Fleet → youtube-brand-content-uploader.yml

Triggers Microsoft Power Automate flows for automated order routing based on retailer priority, product availability, and warehouse proximity.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Order Routing
  description: Triggers Microsoft Power Automate flows for automated order routing based on retailer priority, product availability, and warehouse proximity.
  tags:
  - automation
  - microsoft-power-automate
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: order-routing
    port: 8080
    tools:
    - name: trigger-order-routing
      description: Trigger a Power Automate flow for order routing.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: Order ID.
      - name: retailer_id
        in: body
        type: string
        description: Retailer identifier.
      call: powerautomate.trigger-flow
      with:
        order_id: '{{order_id}}'
        retailer: '{{retailer_id}}'
  consumes:
  - type: http
    namespace: powerautomate
    baseUri: https://prod-123.westus.logic.azure.com/workflows
    authentication:
      type: apiKey
      key: $secrets.power_automate_key
    resources:
    - name: flows
      path: /order-routing/triggers/manual/paths/invoke
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-order-routing.yml

Coordinates a new toy product launch by creating Salesforce opportunities for retail partners, uploading product assets to SharePoint, publishing social media teasers, and notifying the brand team via Slack.

naftiko: '0.5'
info:
  label: New Toy Launch Orchestrator
  description: Coordinates a new toy product launch by creating Salesforce opportunities for retail partners, uploading product assets to SharePoint, publishing social media teasers, and notifying the brand team via Slack.
  tags:
  - product-launch
  - marketing
  - salesforce
  - sharepoint
  - slack
  - social-media
capability:
  exposes:
  - type: mcp
    namespace: toy-launch
    port: 8080
    tools:
    - name: launch-toy-product
      description: Orchestrate a new toy product launch across CRM, content, and notification channels.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Name of the new toy product.
      - name: brand
        in: body
        type: string
        description: Mattel brand (Barbie, Hot Wheels, Fisher-Price, American Girl, UNO).
      - name: launch_date
        in: body
        type: string
        description: Launch date in YYYY-MM-DD format.
      - name: target_age_group
        in: body
        type: string
        description: Target age group.
      steps:
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Launch: {{product_name}} ({{brand}})'
          stage: Launch Preparation
          close_date: '{{launch_date}}'
      - name: create-asset-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: product_assets
          folder_path: Launches/{{brand}}/{{product_name}}
      - name: notify-brand-team
        type: call
        call: slack.post-message
        with:
          channel: brand-{{brand}}-launches
          text: 'New product launch: {{product_name}} ({{brand}}). Target age: {{target_age_group}}. Launch date: {{launch_date}}. SFDC: {{create-opportunity.id}}. Assets: {{create-asset-folder.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mattel.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
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-toy-launch-orchestrator.yml

Posts open Mattel positions to LinkedIn from Workday requisitions for creative, engineering, and manufacturing roles.

naftiko: '0.5'
info:
  label: Workday Recruiting Pipeline
  description: Posts open Mattel positions to LinkedIn from Workday requisitions for creative, engineering, and manufacturing roles.
  tags:
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: publish-job
      description: Pull a Workday requisition and publish to LinkedIn.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday job requisition ID.
      steps:
      - name: get-req
        type: call
        call: workday.get-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: post-job
        type: call
        call: linkedin.create-job-post
        with:
          title: '{{get-req.title}}'
          description: '{{get-req.description}}'
          location: '{{get-req.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: requisitions
      path: /recruiting/requisitions/{{req_id}}
      inputParameters:
      - name: req_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: job-posts
      path: /jobPosts
      operations:
      - name: create-job-post
        method: POST
Open in Framework → View in Fleet → workday-recruiting-pipeline.yml

Retrieves campaign performance metrics from Google Analytics including sessions, conversion rate, and revenue for a specified date range and campaign.

naftiko: '0.5'
info:
  label: Google Analytics Campaign Performance
  description: Retrieves campaign performance metrics from Google Analytics including sessions, conversion rate, and revenue for a specified date range and campaign.
  tags:
  - marketing
  - google-analytics
  - digital
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Query Google Analytics for campaign performance metrics by campaign name and date range.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The marketing campaign name.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.get-report
      with:
        campaign_name: '{{campaign_name}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  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
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-campaign-performance.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 14
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-14
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-14.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 28
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-28
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: SNACKS
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mondelez.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-28.yml

Handles production quality incidents by pulling batch details from SAP, creating a quality case in ServiceNow, uploading test results to SharePoint, and alerting the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Production Quality Incident Pipeline
  description: Handles production quality incidents by pulling batch details from SAP, creating a quality case in ServiceNow, uploading test results to SharePoint, and alerting the quality team via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-incidents
    port: 8080
    tools:
    - name: report-quality-incident
      description: Given a production batch and defect type, pull batch data, create quality case, and alert team.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP production batch number.
      - name: defect_type
        in: body
        type: string
        description: Type of quality defect.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: get-batch-details
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
          plant: '{{plant}}'
      - name: create-quality-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Quality incident: {{defect_type}} - Batch {{batch_number}}'
          category: quality
          description: 'Batch {{batch_number}} at plant {{plant}}. Product: {{get-batch-details.MaterialDescription}}. Defect: {{defect_type}}.'
      - name: upload-results
        type: call
        call: sharepoint.create-folder
        with:
          site_id: quality_site
          folder_path: Incidents/{{batch_number}}_{{defect_type}}
      - name: alert-quality-team
        type: call
        call: msteams.post-message
        with:
          team_id: quality-team
          channel_id: incidents
          message: 'QUALITY ALERT: {{defect_type}} in batch {{batch_number}} at plant {{plant}}. Product: {{get-batch-details.MaterialDescription}}. Case: {{create-quality-case.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Batch='{{batch_number}}',Plant='{{plant}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.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: folders
      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: 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
Open in Framework → View in Fleet → production-quality-incident-pipeline.yml

Checks the status of a SAP Concur expense report by report ID, returning approval state, total amount, and submission date.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Status
  description: Checks the status of a SAP Concur expense report by report ID, returning approval state, total amount, and submission date.
  tags:
  - finance
  - sap-concur
  - expense
capability:
  exposes:
  - type: mcp
    namespace: expense-mgmt
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up a SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
  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-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-status.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 29
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-29
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-29.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 15
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-15
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#snacks'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-15.yml

Queries Snowflake for planogram compliance scores by retailer and category, returning compliance percentage, out-of-stock rate, and facing count accuracy.

naftiko: '0.5'
info:
  label: Retailer Planogram Compliance Check
  description: Queries Snowflake for planogram compliance scores by retailer and category, returning compliance percentage, out-of-stock rate, and facing count accuracy.
  tags:
  - retail
  - planogram
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: planogram-compliance
    port: 8080
    tools:
    - name: check-planogram-compliance
      description: Query planogram compliance data by retailer and product category.
      inputParameters:
      - name: retailer_id
        in: body
        type: string
        description: The retailer account ID.
      - name: category
        in: body
        type: string
        description: Product category (e.g., biscuits, chocolate, gum).
      call: snowflake.execute-query
      with:
        retailer_id: '{{retailer_id}}'
        category: '{{category}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → retailer-planogram-compliance-check.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 17
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-17
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-17.yml

Plans retail promotions by creating a promotion record in Salesforce, generating a SAP pricing condition, uploading promotional materials to SharePoint, and notifying the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Promotion Planning Workflow
  description: Plans retail promotions by creating a promotion record in Salesforce, generating a SAP pricing condition, uploading promotional materials to SharePoint, and notifying the sales team via Microsoft Teams.
  tags:
  - sales
  - promotions
  - salesforce
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: promotion-planning
    port: 8080
    tools:
    - name: plan-retail-promotion
      description: Given promotion details, create records across Salesforce, SAP, and SharePoint, then notify sales.
      inputParameters:
      - name: promotion_name
        in: body
        type: string
        description: Name of the promotion.
      - name: retailer_account_id
        in: body
        type: string
        description: The Salesforce retailer account ID.
      - name: discount_percentage
        in: body
        type: string
        description: Discount percentage.
      - name: start_date
        in: body
        type: string
        description: Promotion start date.
      - name: end_date
        in: body
        type: string
        description: Promotion end date.
      steps:
      - name: create-promotion
        type: call
        call: salesforce.create-promotion
        with:
          name: '{{promotion_name}}'
          account_id: '{{retailer_account_id}}'
          discount: '{{discount_percentage}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: create-pricing-condition
        type: call
        call: sap.create-pricing
        with:
          promotion_id: '{{create-promotion.id}}'
          discount: '{{discount_percentage}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: upload-materials
        type: call
        call: sharepoint.create-folder
        with:
          site_id: sales_site
          folder_path: Promotions/{{promotion_name}}
      - name: notify-sales
        type: call
        call: msteams.post-message
        with:
          team_id: sales-team
          channel_id: promotions
          message: 'Promotion ''{{promotion_name}}'' created. {{discount_percentage}}% off from {{start_date}} to {{end_date}}. Salesforce: {{create-promotion.id}}. Materials: {{upload-materials.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: promotions
      path: /sobjects/Promotion__c
      operations:
      - name: create-promotion
        method: POST
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/SD_PRICING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing-conditions
      path: /A_PricingCondition
      operations:
      - name: create-pricing
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → retail-promotion-planning-workflow.yml

Retrieves campaign performance metrics from Google Analytics for a specified brand and date range, returning impressions, clicks, conversion rate, and cost per acquisition.

naftiko: '0.5'
info:
  label: Google Analytics Brand Campaign Performance
  description: Retrieves campaign performance metrics from Google Analytics for a specified brand and date range, returning impressions, clicks, conversion rate, and cost per acquisition.
  tags:
  - marketing
  - google-analytics
  - brand
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Query Google Analytics for brand campaign metrics by brand name and date range.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand name (e.g., Oreo, Cadbury, Toblerone).
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: google-analytics.run-report
      with:
        brand: '{{brand}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.ga_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-brand-campaign-performance.yml

Generates vendor scorecards by pulling delivery performance from SAP, quality metrics from ServiceNow, and cost data from Snowflake, then uploading the scorecard to SharePoint and notifying procurement.

naftiko: '0.5'
info:
  label: Vendor Scorecard Generator
  description: Generates vendor scorecards by pulling delivery performance from SAP, quality metrics from ServiceNow, and cost data from Snowflake, then uploading the scorecard to SharePoint and notifying procurement.
  tags:
  - procurement
  - vendor-management
  - sap
  - servicenow
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: vendor-scorecards
    port: 8080
    tools:
    - name: generate-vendor-scorecard
      description: Given a vendor ID and period, compile delivery, quality, and cost metrics into a scorecard.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor ID.
      - name: period
        in: body
        type: string
        description: The evaluation period (e.g., Q1-2026).
      steps:
      - name: get-delivery-metrics
        type: call
        call: sap.get-vendor-deliveries
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{period}}'
      - name: get-quality-metrics
        type: call
        call: servicenow.query-vendor-incidents
        with:
          vendor_id: '{{vendor_id}}'
      - name: get-cost-metrics
        type: call
        call: snowflake.execute-query
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{period}}'
      - name: upload-scorecard
        type: call
        call: sharepoint.create-folder
        with:
          site_id: procurement_site
          folder_path: Scorecards/{{vendor_id}}/{{period}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-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: vendor-deliveries
      path: /A_PurchaseOrder?$filter=Supplier eq '{{vendor_id}}'
      inputParameters:
      - name: vendor_id
        in: query
      operations:
      - name: get-vendor-deliveries
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: vendor-incidents
      path: /table/incident?sysparm_query=vendor={{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: query
      operations:
      - name: query-vendor-incidents
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
Open in Framework → View in Fleet → vendor-scorecard-generator.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 16
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-16
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: SNACKS
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mondelez.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-16.yml

Retrieves demand forecast data from SAP APO for a material and planning horizon, returning forecast quantities by period for supply planning.

naftiko: '0.5'
info:
  label: SAP Demand Forecast Retrieval
  description: Retrieves demand forecast data from SAP APO for a material and planning horizon, returning forecast quantities by period for supply planning.
  tags:
  - supply-chain
  - demand-planning
  - sap
capability:
  exposes:
  - type: mcp
    namespace: demand-forecast
    port: 8080
    tools:
    - name: get-demand-forecast
      description: Look up demand forecast for a material over a planning horizon. Returns forecast quantities by period.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: planning_horizon_weeks
        in: body
        type: string
        description: Number of weeks in the planning horizon.
      call: sap.get-forecast
      with:
        material_number: '{{material_number}}'
        planning_horizon_weeks: '{{planning_horizon_weeks}}'
      outputParameters:
      - name: forecast_periods
        type: string
        mapping: $.d.results
      - name: total_forecast_qty
        type: string
        mapping: $.d.TotalForecastQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/APO_FORECAST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: forecasts
      path: /A_DemandForecast(Material='{{material_number}}',Horizon='{{planning_horizon_weeks}}')
      inputParameters:
      - name: material_number
        in: path
      - name: planning_horizon_weeks
        in: path
      operations:
      - name: get-forecast
        method: GET
Open in Framework → View in Fleet → sap-demand-forecast-retrieval.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 12
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-12
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: snacks.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-12.yml

Compiles brand performance data by pulling sales metrics from Snowflake, market share data from Salesforce, campaign ROI from Google Analytics, and distributing the review package via SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Brand Performance Review Pipeline
  description: Compiles brand performance data by pulling sales metrics from Snowflake, market share data from Salesforce, campaign ROI from Google Analytics, and distributing the review package via SharePoint and Microsoft Teams.
  tags:
  - marketing
  - brand-performance
  - snowflake
  - salesforce
  - google-analytics
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-performance
    port: 8080
    tools:
    - name: generate-brand-review
      description: Given a brand and period, compile a comprehensive brand performance review.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand name.
      - name: period
        in: body
        type: string
        description: The review period.
      steps:
      - name: get-sales-metrics
        type: call
        call: snowflake.execute-query
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: get-market-share
        type: call
        call: salesforce.get-market-data
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: get-campaign-roi
        type: call
        call: ga.get-report
        with:
          campaign_name: '{{brand}}'
          period: '{{period}}'
      - name: upload-review
        type: call
        call: sharepoint.create-folder
        with:
          site_id: brand_site
          folder_path: Reviews/{{brand}}/{{period}}
      - name: notify-brand-team
        type: call
        call: msteams.post-message
        with:
          team_id: brand-{{brand}}-team
          channel_id: performance
          message: 'Brand performance review for {{brand}} ({{period}}) ready. Sales data: {{get-sales-metrics.rowCount}} records. Review: {{upload-review.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: market-data
      path: /query/?q=SELECT+Market_Share__c,Growth_Rate__c+FROM+Market_Data__c+WHERE+Brand__c='{{brand}}'+AND+Period__c='{{period}}'
      inputParameters:
      - name: brand
        in: query
      - name: period
        in: query
      operations:
      - name: get-market-data
        method: GET
  - 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
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → brand-performance-review-pipeline.yml

Processes a travel expense approval by retrieving the Concur report, validating against Snowflake budget data, creating a Jira approval task, and notifying the finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Concur Travel Expense Approval Workflow
  description: Processes a travel expense approval by retrieving the Concur report, validating against Snowflake budget data, creating a Jira approval task, and notifying the finance team via Microsoft Teams.
  tags:
  - finance
  - travel
  - concur
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-expense-approval
    port: 8080
    tools:
    - name: process-travel-expense
      description: Given a Concur report ID and cost center, validate budget and route for approval.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Concur expense report ID.
      - name: cost_center
        in: body
        type: string
        description: The cost center code.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: check-budget
        type: call
        call: snowflake.execute-query
        with:
          cost_center: '{{cost_center}}'
          amount: '{{get-expense-report.Total}}'
      - name: create-approval-task
        type: call
        call: jira.create-issue
        with:
          project: FIN
          summary: 'Expense Approval: {{report_id}} - ${{get-expense-report.Total}}'
          description: 'Concur report {{report_id}} for cost center {{cost_center}}. Total: ${{get-expense-report.Total}}. Budget remaining: ${{check-budget.remaining}}.'
          issuetype: Task
      - name: notify-finance
        type: call
        call: msteams.post-message
        with:
          team_id: finance-team
          channel_id: expense-approvals
          message: 'Expense report {{report_id}} pending approval. Amount: ${{get-expense-report.Total}}. Cost center: {{cost_center}}. Jira: {{create-approval-task.key}}.'
  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-report
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: post-message
        method: POST
Open in Framework → View in Fleet → concur-travel-expense-approval-workflow.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 13
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-13
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-13.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 11
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-11
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-11.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 9
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-9.yml

Queries Snowflake for Overall Equipment Effectiveness metrics for a manufacturing line and shift, returning availability, performance rate, quality rate, and calculated OEE percentage.

naftiko: '0.5'
info:
  label: Manufacturing Line OEE Query
  description: Queries Snowflake for Overall Equipment Effectiveness metrics for a manufacturing line and shift, returning availability, performance rate, quality rate, and calculated OEE percentage.
  tags:
  - manufacturing
  - oee
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-oee
    port: 8080
    tools:
    - name: get-line-oee
      description: Query OEE metrics for a manufacturing line and shift from Snowflake.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The manufacturing line identifier.
      - name: shift_date
        in: body
        type: string
        description: The shift date in YYYY-MM-DD format.
      - name: shift_number
        in: body
        type: string
        description: The shift number (1, 2, or 3).
      call: snowflake.execute-query
      with:
        line_id: '{{line_id}}'
        shift_date: '{{shift_date}}'
        shift_number: '{{shift_number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → manufacturing-line-oee-query.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 8
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-8.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 10
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-10
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mondelez.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-10.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 11
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-11.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 9
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-9
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-9.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 8
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-8
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mondelez-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-8.yml

Manages product recalls by identifying affected batches in SAP, pulling distribution data from Snowflake, creating a recall case in ServiceNow, notifying retailers via Salesforce, and alerting leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Recall Management Pipeline
  description: Manages product recalls by identifying affected batches in SAP, pulling distribution data from Snowflake, creating a recall case in ServiceNow, notifying retailers via Salesforce, and alerting leadership via Microsoft Teams.
  tags:
  - food-safety
  - recall
  - sap
  - snowflake
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: initiate-recall
      description: Given a material and batch range, initiate a product recall across all systems.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: batch_range_start
        in: body
        type: string
        description: Start of affected batch range.
      - name: batch_range_end
        in: body
        type: string
        description: End of affected batch range.
      - name: recall_reason
        in: body
        type: string
        description: Reason for the recall.
      steps:
      - name: identify-batches
        type: call
        call: sap.query-batches
        with:
          material: '{{material_number}}'
          batch_start: '{{batch_range_start}}'
          batch_end: '{{batch_range_end}}'
      - name: get-distribution
        type: call
        call: snowflake.execute-query
        with:
          material: '{{material_number}}'
          batch_start: '{{batch_range_start}}'
          batch_end: '{{batch_range_end}}'
      - name: create-recall-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'RECALL: {{material_number}} batches {{batch_range_start}}-{{batch_range_end}}'
          category: product_recall
          priority: '1'
          description: '{{recall_reason}}. Affected batches: {{identify-batches.count}}. Distribution points: {{get-distribution.rowCount}}.'
      - name: notify-retailers
        type: call
        call: salesforce.create-recall-notification
        with:
          material: '{{material_number}}'
          recall_reason: '{{recall_reason}}'
          case_number: '{{create-recall-case.number}}'
      - name: alert-leadership
        type: call
        call: msteams.post-message
        with:
          team_id: executive-team
          channel_id: urgent
          message: 'PRODUCT RECALL: {{material_number}} (batches {{batch_range_start}}-{{batch_range_end}}). Reason: {{recall_reason}}. {{identify-batches.count}} batches, {{get-distribution.rowCount}} distribution points. Case: {{create-recall-case.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch?$filter=Material eq '{{material}}' and Batch ge '{{batch_start}}' and Batch le '{{batch_end}}'
      inputParameters:
      - name: material
        in: query
      - name: batch_start
        in: query
      - name: batch_end
        in: query
      operations:
      - name: query-batches
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.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://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: recall-notifications
      path: /sobjects/Recall_Notification__c
      operations:
      - name: create-recall-notification
        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: post-message
        method: POST
Open in Framework → View in Fleet → recall-management-pipeline.yml

Tracks distribution order fulfillment by querying SAP for delivery status, pulling customer data from Salesforce, and sending delivery updates to the distribution team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Distribution Order Fulfillment Tracker
  description: Tracks distribution order fulfillment by querying SAP for delivery status, pulling customer data from Salesforce, and sending delivery updates to the distribution team via Microsoft Teams.
  tags:
  - distribution
  - fulfillment
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: distribution-tracking
    port: 8080
    tools:
    - name: track-distribution-order
      description: Given a sales order number, pull delivery status from SAP, get customer details from Salesforce, and report status.
      inputParameters:
      - name: sales_order
        in: body
        type: string
        description: The SAP sales order number.
      steps:
      - name: get-delivery-status
        type: call
        call: sap.get-delivery
        with:
          sales_order: '{{sales_order}}'
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{get-delivery-status.SoldToParty}}'
      - name: notify-distribution
        type: call
        call: msteams.post-message
        with:
          team_id: distribution-team
          channel_id: fulfillment
          message: 'Order {{sales_order}} for {{get-customer.Name}}: Status {{get-delivery-status.DeliveryStatus}}. Shipped: {{get-delivery-status.ShipDate}}. Tracking: {{get-delivery-status.TrackingNumber}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_OutbDeliveryHeader?$filter=SalesOrder eq '{{sales_order}}'
      inputParameters:
      - name: sales_order
        in: query
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: 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
Open in Framework → View in Fleet → distribution-order-fulfillment-tracker.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 10
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-10.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 12
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-12.yml

Retrieves the latest build pipeline run status from Azure DevOps for a specified project and pipeline, returning build number, status, result, and duration.

naftiko: '0.5'
info:
  label: Azure DevOps Build Pipeline Status
  description: Retrieves the latest build pipeline run status from Azure DevOps for a specified project and pipeline, returning build number, status, result, and duration.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: build-pipelines
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Look up the latest Azure DevOps pipeline run for a project. Returns build number, status, result, and duration.
      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: azuredevops.get-pipeline-run
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/mondelez
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
Open in Framework → View in Fleet → azure-devops-build-pipeline-status.yml

Coordinates a new product launch by creating a SAP material master record, setting up a Salesforce campaign, creating a Jira epic for marketing tasks, uploading brand assets to SharePoint, and notifying cross-functional teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Launch Coordination
  description: Coordinates a new product launch by creating a SAP material master record, setting up a Salesforce campaign, creating a Jira epic for marketing tasks, uploading brand assets to SharePoint, and notifying cross-functional teams via Microsoft Teams.
  tags:
  - product-launch
  - sap
  - salesforce
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: coordinate-product-launch
      description: Given new product details, create records in SAP, Salesforce, Jira, and SharePoint, then notify teams.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The new product name.
      - name: brand
        in: body
        type: string
        description: The brand (e.g., Oreo, Cadbury).
      - name: category
        in: body
        type: string
        description: Product category (e.g., biscuits, chocolate, gum).
      - name: launch_date
        in: body
        type: string
        description: Target launch date in YYYY-MM-DD format.
      steps:
      - name: create-material-master
        type: call
        call: sap.create-material
        with:
          product_name: '{{product_name}}'
          brand: '{{brand}}'
          category: '{{category}}'
      - name: create-launch-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Launch: {{product_name}}'
          brand: '{{brand}}'
          start_date: '{{launch_date}}'
      - name: create-marketing-epic
        type: call
        call: jira.create-issue
        with:
          project: MKT
          summary: 'Product Launch: {{product_name}} ({{brand}})'
          description: 'Marketing tasks for {{product_name}} launch on {{launch_date}}. SAP material: {{create-material-master.MaterialNumber}}. Campaign: {{create-launch-campaign.id}}.'
          issuetype: Epic
      - name: create-asset-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: brand-assets
          folder_path: Launches/{{brand}}/{{product_name}}
      - name: notify-teams
        type: call
        call: msteams.post-message
        with:
          team_id: product-team
          channel_id: launches
          message: 'New product launch: {{product_name}} ({{brand}}, {{category}}) targeting {{launch_date}}. SAP: {{create-material-master.MaterialNumber}}. Campaign: {{create-launch-campaign.id}}. Jira: {{create-marketing-epic.key}}. Assets: {{create-asset-folder.webUrl}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → new-product-launch-coordination.yml

Retrieves trade spend data from Salesforce for a retailer account and fiscal quarter, returning total spend, accruals, and remaining budget for trade promotion management.

naftiko: '0.5'
info:
  label: Salesforce Trade Spend Lookup
  description: Retrieves trade spend data from Salesforce for a retailer account and fiscal quarter, returning total spend, accruals, and remaining budget for trade promotion management.
  tags:
  - trade-spend
  - salesforce
  - finance
capability:
  exposes:
  - type: mcp
    namespace: trade-spend
    port: 8080
    tools:
    - name: get-trade-spend
      description: Look up trade spend by retailer and fiscal quarter. Returns total spend, accruals, and remaining budget.
      inputParameters:
      - name: retailer_account_id
        in: body
        type: string
        description: The Salesforce retailer account ID.
      - name: fiscal_quarter
        in: body
        type: string
        description: The fiscal quarter (e.g., Q1-2026, Q2-2026).
      call: salesforce.query-trade-spend
      with:
        retailer_account_id: '{{retailer_account_id}}'
        fiscal_quarter: '{{fiscal_quarter}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: trade-spend
      path: /query/?q=SELECT+Total_Spend__c,Accruals__c,Remaining_Budget__c+FROM+Trade_Spend__c+WHERE+Account__c='{{retailer_account_id}}'+AND+Fiscal_Quarter__c='{{fiscal_quarter}}'
      inputParameters:
      - name: retailer_account_id
        in: query
      - name: fiscal_quarter
        in: query
      operations:
      - name: query-trade-spend
        method: GET
Open in Framework → View in Fleet → salesforce-trade-spend-lookup.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 13
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-13.yml

Creates an IT change request in ServiceNow, links documentation from Confluence, creates a Jira task for implementation, and notifies the change advisory board via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Request Pipeline
  description: Creates an IT change request in ServiceNow, links documentation from Confluence, creates a Jira task for implementation, and notifies the change advisory board via Microsoft Teams.
  tags:
  - it-service
  - change-management
  - servicenow
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given change details, create a ServiceNow change, link docs, and notify the CAB.
      inputParameters:
      - name: change_summary
        in: body
        type: string
        description: Summary of the change.
      - name: change_type
        in: body
        type: string
        description: Type of change.
      - name: doc_page_id
        in: body
        type: string
        description: Confluence page ID with implementation details.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_summary}}'
          type: '{{change_type}}'
      - name: get-doc
        type: call
        call: confluence.get-page
        with:
          page_id: '{{doc_page_id}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: ITOPS
          summary: 'Implement: {{change_summary}}'
          description: 'Change: {{create-change.number}}. Docs: {{get-doc._links.webui}}.'
          issue_type: Task
      - name: notify-cab
        type: call
        call: msteams.post-message
        with:
          team_id: it-operations-team
          channel_id: change-advisory
          message: 'Change request {{create-change.number}}: {{change_summary}}. Type: {{change_type}}. Jira: {{create-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mondelez.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    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
Open in Framework → View in Fleet → it-change-request-pipeline.yml

Traces ingredient sourcing by querying SAP for batch genealogy, pulling supplier certifications from SharePoint, and generating a traceability report in Snowflake for food safety compliance.

naftiko: '0.5'
info:
  label: Ingredient Traceability Pipeline
  description: Traces ingredient sourcing by querying SAP for batch genealogy, pulling supplier certifications from SharePoint, and generating a traceability report in Snowflake for food safety compliance.
  tags:
  - supply-chain
  - traceability
  - food-safety
  - sap
  - sharepoint
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: ingredient-traceability
    port: 8080
    tools:
    - name: trace-ingredient
      description: Given a finished goods batch and ingredient, trace the supply chain from source to product.
      inputParameters:
      - name: finished_batch
        in: body
        type: string
        description: The finished goods batch number.
      - name: ingredient_material
        in: body
        type: string
        description: The ingredient material number.
      steps:
      - name: get-batch-genealogy
        type: call
        call: sap.get-batch-genealogy
        with:
          batch: '{{finished_batch}}'
          material: '{{ingredient_material}}'
      - name: get-supplier-certs
        type: call
        call: sharepoint.get-file
        with:
          site_id: supplier_compliance_site
          file_path: Certifications/{{get-batch-genealogy.SupplierID}}
      - name: generate-trace-report
        type: call
        call: snowflake.execute-query
        with:
          finished_batch: '{{finished_batch}}'
          ingredient_material: '{{ingredient_material}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batch-genealogy
      path: /A_BatchGenealogy(Batch='{{batch}}',Material='{{material}}')
      inputParameters:
      - name: batch
        in: path
      - name: material
        in: path
      operations:
      - name: get-batch-genealogy
        method: GET
  - 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
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → ingredient-traceability-pipeline.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 14
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-14.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 15
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-15.yml

Responds to supply chain disruptions by querying SAP for affected purchase orders, creating a ServiceNow incident, notifying the logistics team via Microsoft Teams, and updating the disruption tracker in Salesforce.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Response
  description: Responds to supply chain disruptions by querying SAP for affected purchase orders, creating a ServiceNow incident, notifying the logistics team via Microsoft Teams, and updating the disruption tracker in Salesforce.
  tags:
  - supply-chain
  - disruption
  - sap
  - servicenow
  - microsoft-teams
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-disruption
    port: 8080
    tools:
    - name: respond-to-disruption
      description: Given a supplier ID and disruption type, identify affected POs, create incident, notify logistics, and update tracker.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier ID.
      - name: disruption_type
        in: body
        type: string
        description: Type of disruption (e.g., delay, shortage, quality_issue).
      - name: affected_plant
        in: body
        type: string
        description: The affected manufacturing plant code.
      steps:
      - name: get-affected-pos
        type: call
        call: sap.query-open-pos
        with:
          supplier_id: '{{supplier_id}}'
          plant: '{{affected_plant}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply chain disruption: {{disruption_type}} - Supplier {{supplier_id}}'
          category: supply_chain
          description: 'Disruption type: {{disruption_type}}. Supplier: {{supplier_id}}. Plant: {{affected_plant}}. Affected POs: {{get-affected-pos.count}}.'
      - name: notify-logistics
        type: call
        call: msteams.post-message
        with:
          team_id: supply-chain-team
          channel_id: disruptions
          message: 'ALERT: {{disruption_type}} from supplier {{supplier_id}} affecting plant {{affected_plant}}. {{get-affected-pos.count}} POs impacted. Incident: {{create-incident.number}}.'
      - name: update-tracker
        type: call
        call: salesforce.create-disruption
        with:
          supplier_id: '{{supplier_id}}'
          disruption_type: '{{disruption_type}}'
          incident_number: '{{create-incident.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-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?$filter=Supplier eq '{{supplier_id}}' and Plant eq '{{plant}}' and Status eq 'Open'
      inputParameters:
      - name: supplier_id
        in: query
      - name: plant
        in: query
      operations:
      - name: query-open-pos
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.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: post-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: disruptions
      path: /sobjects/Supply_Chain_Disruption__c
      operations:
      - name: create-disruption
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-response.yml

Plans warehouse capacity by querying current stock levels from SAP, forecasting inbound shipments from Snowflake, and alerting the logistics team via Microsoft Teams when capacity thresholds are at risk.

naftiko: '0.5'
info:
  label: Warehouse Capacity Planning
  description: Plans warehouse capacity by querying current stock levels from SAP, forecasting inbound shipments from Snowflake, and alerting the logistics team via Microsoft Teams when capacity thresholds are at risk.
  tags:
  - supply-chain
  - warehouse
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-planning
    port: 8080
    tools:
    - name: assess-warehouse-capacity
      description: Given a warehouse code, assess current capacity and forecast inbound volumes.
      inputParameters:
      - name: warehouse_code
        in: body
        type: string
        description: The SAP warehouse/storage location code.
      - name: forecast_days
        in: body
        type: string
        description: Number of days to forecast.
      steps:
      - name: get-current-stock
        type: call
        call: sap.get-warehouse-stock
        with:
          warehouse: '{{warehouse_code}}'
      - name: forecast-inbound
        type: call
        call: snowflake.execute-query
        with:
          warehouse: '{{warehouse_code}}'
          days: '{{forecast_days}}'
      - name: alert-logistics
        type: call
        call: msteams.post-message
        with:
          team_id: logistics-team
          channel_id: capacity
          message: 'Warehouse {{warehouse_code}} capacity: Current stock {{get-current-stock.TotalQuantity}} units. {{forecast_days}}-day inbound forecast: {{forecast-inbound.projected_inbound}} units.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_WAREHOUSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: warehouse-stock
      path: /A_WarehouseStock?$filter=StorageLocation eq '{{warehouse}}'
      inputParameters:
      - name: warehouse
        in: query
      operations:
      - name: get-warehouse-stock
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.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
Open in Framework → View in Fleet → warehouse-capacity-planning.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 1
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-1
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-1.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 3
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-3
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#snacks'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-3.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 2
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-2
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-2.yml

Routes SAP Concur expense reports for approval by pulling report details, resolving the manager in Workday, creating an approval task in ServiceNow, and notifying via Microsoft Teams.

naftiko: '0.5'
info:
  label: Expense Report Approval Workflow
  description: Routes SAP Concur expense reports for approval by pulling report details, resolving the manager in Workday, creating an approval task in ServiceNow, and notifying via Microsoft Teams.
  tags:
  - finance
  - expense
  - sap-concur
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: route-expense-approval
      description: Given an expense report ID and employee ID, route the report for manager approval.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the submitter.
      steps:
      - name: get-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-approval-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Expense approval: {{report_id}} - {{get-report.Total}}'
          category: expense_approval
          assigned_to: '{{get-manager.manager_id}}'
          description: Expense report {{report_id}} from {{get-manager.full_name}} for {{get-report.Total}} {{get-report.CurrencyCode}}.
      - name: notify-manager
        type: call
        call: msteams.post-message
        with:
          team_id: finance-team
          channel_id: expense-approvals
          message: 'Expense report {{report_id}} ({{get-report.Total}} {{get-report.CurrencyCode}}) from {{get-manager.full_name}} pending your approval. Case: {{create-approval-task.number}}.'
  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-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.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: post-message
        method: POST
Open in Framework → View in Fleet → expense-report-approval-workflow.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 6
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-6
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SNAC
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-6.yml

Queries Snowflake for products approaching shelf life expiry within a specified number of days, returning material number, batch, expiry date, and warehouse location.

naftiko: '0.5'
info:
  label: Snowflake Shelf Life Expiry Report
  description: Queries Snowflake for products approaching shelf life expiry within a specified number of days, returning material number, batch, expiry date, and warehouse location.
  tags:
  - quality
  - shelf-life
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: shelf-life-monitoring
    port: 8080
    tools:
    - name: query-expiring-products
      description: Query Snowflake for products expiring within a given number of days at a specific warehouse.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Number of days until expiry threshold.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse location code.
      call: snowflake.execute-query
      with:
        days_until_expiry: '{{days_until_expiry}}'
        warehouse_code: '{{warehouse_code}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-shelf-life-expiry-report.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 7
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-7
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: snacks
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-7.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 5
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-5
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-5.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 4
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-4
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: SNACKS
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mondelez.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-4.yml

Retrieves metadata for a Tableau workbook including owner, last refresh time, and data source connections.

naftiko: '0.5'
info:
  label: Tableau Workbook Metadata
  description: Retrieves metadata for a Tableau workbook including owner, last refresh time, and data source connections.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: bi-metadata
    port: 8080
    tools:
    - name: get-workbook-metadata
      description: Retrieve Tableau workbook metadata by workbook ID.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      call: tableau.get-workbook
      with:
        workbook_id: '{{workbook_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://mondelez.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-workbook-metadata.yml

Launches a digital marketing campaign by creating a Salesforce campaign, configuring Google Analytics tracking, uploading creative assets to SharePoint, and notifying the brand team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Marketing Campaign Launch Pipeline
  description: Launches a digital marketing campaign by creating a Salesforce campaign, configuring Google Analytics tracking, uploading creative assets to SharePoint, and notifying the brand team via Microsoft Teams.
  tags:
  - marketing
  - campaign
  - salesforce
  - google-analytics
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: campaign-launch
    port: 8080
    tools:
    - name: launch-marketing-campaign
      description: Given campaign details, create Salesforce campaign, set up analytics, upload assets, and notify brand team.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: brand
        in: body
        type: string
        description: The brand name.
      - name: start_date
        in: body
        type: string
        description: Campaign start date.
      - name: budget
        in: body
        type: string
        description: Campaign budget in USD.
      steps:
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          brand: '{{brand}}'
          start_date: '{{start_date}}'
          budget: '{{budget}}'
      - name: setup-tracking
        type: call
        call: ga.create-audience
        with:
          campaign_name: '{{campaign_name}}'
      - name: upload-assets
        type: call
        call: sharepoint.create-folder
        with:
          site_id: marketing_site
          folder_path: Campaigns/{{brand}}/{{campaign_name}}
      - name: notify-brand-team
        type: call
        call: msteams.post-message
        with:
          team_id: brand-{{brand}}-team
          channel_id: campaigns
          message: 'Campaign ''{{campaign_name}}'' launched for {{brand}}. Budget: ${{budget}}. Salesforce: {{create-campaign.id}}. Assets: {{upload-assets.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: ga
    baseUri: https://analyticsadmin.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: audiences
      path: /properties/{{property_id}}/audiences
      operations:
      - name: create-audience
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → marketing-campaign-launch-pipeline.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 35
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-35
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-35.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 21
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-21
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-21.yml

Schedules a food safety audit by creating an audit record in Salesforce, a Jira task for the quality team, uploading the audit checklist to SharePoint, and notifying the plant quality manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Food Safety Audit Scheduling
  description: Schedules a food safety audit by creating an audit record in Salesforce, a Jira task for the quality team, uploading the audit checklist to SharePoint, and notifying the plant quality manager via Microsoft Teams.
  tags:
  - quality
  - food-safety
  - salesforce
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: food-safety-audit
    port: 8080
    tools:
    - name: schedule-food-safety-audit
      description: Given plant and audit details, create records in Salesforce, Jira, and SharePoint, then notify the quality manager.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: audit_type
        in: body
        type: string
        description: Audit type (e.g., FSSC 22000, BRC, internal).
      - name: audit_date
        in: body
        type: string
        description: Scheduled audit date in YYYY-MM-DD format.
      steps:
      - name: create-audit-record
        type: call
        call: salesforce.create-audit
        with:
          plant_code: '{{plant_code}}'
          audit_type: '{{audit_type}}'
          audit_date: '{{audit_date}}'
      - name: create-audit-task
        type: call
        call: jira.create-issue
        with:
          project: QA
          summary: 'Food Safety Audit: {{audit_type}} at {{plant_code}} on {{audit_date}}'
          description: 'Prepare for {{audit_type}} audit at plant {{plant_code}} on {{audit_date}}. Salesforce record: {{create-audit-record.id}}.'
          issuetype: Task
      - name: upload-checklist
        type: call
        call: sharepoint.create-folder
        with:
          site_id: quality-site
          folder_path: Audits/{{plant_code}}/{{audit_type}}-{{audit_date}}
      - name: notify-quality-manager
        type: call
        call: msteams.post-message
        with:
          team_id: quality-team
          channel_id: audits
          message: 'Food safety audit scheduled: {{audit_type}} at plant {{plant_code}} on {{audit_date}}. Salesforce: {{create-audit-record.id}}. Jira: {{create-audit-task.key}}. Docs: {{upload-checklist.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: audits
      path: /sobjects/Food_Safety_Audit__c
      operations:
      - name: create-audit
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → food-safety-audit-scheduling.yml

Retrieves the current sprint summary for an R&D project from Jira, returning sprint name, total story points, completed points, and remaining items for product development tracking.

naftiko: '0.5'
info:
  label: Jira R&D Sprint Summary
  description: Retrieves the current sprint summary for an R&D project from Jira, returning sprint name, total story points, completed points, and remaining items for product development tracking.
  tags:
  - r-and-d
  - jira
  - product-development
capability:
  exposes:
  - type: mcp
    namespace: rd-sprints
    port: 8080
    tools:
    - name: get-sprint-summary
      description: Look up the active sprint for a Jira R&D board. Returns sprint name, total points, completed points, and remaining.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the R&D project.
      call: jira.get-active-sprint
      with:
        board_id: '{{board_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint?state=active
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-active-sprint
        method: GET
Open in Framework → View in Fleet → jira-r-d-sprint-summary.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 5
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-5.yml

Fetches an employee's profile from Workday by worker ID, including department, title, manager, and location for HR operations.

naftiko: '0.5'
info:
  label: Workday Employee Profile
  description: Fetches an employee's profile from Workday by worker ID, including department, title, manager, and location for HR operations.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-employee
    port: 8080
    tools:
    - name: get-employee-profile
      description: Retrieve a Workday employee profile by worker ID.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_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: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile.yml

Queries SAP Plant Maintenance for equipment status by functional location, returning equipment ID, description, condition, and last maintenance date.

naftiko: '0.5'
info:
  label: SAP Plant Equipment Status
  description: Queries SAP Plant Maintenance for equipment status by functional location, returning equipment ID, description, condition, and last maintenance date.
  tags:
  - manufacturing
  - maintenance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: equipment-status
    port: 8080
    tools:
    - name: get-equipment-status
      description: Look up equipment at a SAP functional location. Returns equipment ID, description, condition, and last maintenance date.
      inputParameters:
      - name: functional_location
        in: body
        type: string
        description: The SAP functional location ID.
      call: sap.get-equipment
      with:
        functional_location: '{{functional_location}}'
      outputParameters:
      - name: equipment_id
        type: string
        mapping: $.d.Equipment
      - name: description
        type: string
        mapping: $.d.EquipmentDescription
      - name: condition
        type: string
        mapping: $.d.ConditionRating
      - name: last_maintenance
        type: string
        mapping: $.d.LastMaintenanceDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment?$filter=FunctionalLocation eq '{{functional_location}}'
      inputParameters:
      - name: functional_location
        in: query
      operations:
      - name: get-equipment
        method: GET
Open in Framework → View in Fleet → sap-plant-equipment-status.yml

Queries SAP S/4HANA for the procurement status of a raw material purchase order, returning vendor, delivery date, quantity, and goods receipt status.

naftiko: '0.5'
info:
  label: SAP Raw Material Procurement Status
  description: Queries SAP S/4HANA for the procurement status of a raw material purchase order, returning vendor, delivery date, quantity, and goods receipt status.
  tags:
  - procurement
  - supply-chain
  - sap
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-procurement-status
      description: Look up a SAP purchase order for raw materials. Returns vendor, delivery date, ordered quantity, and goods receipt status.
      inputParameters:
      - name: purchase_order
        in: body
        type: string
        description: The SAP purchase order number.
      call: sap.get-purchase-order
      with:
        purchase_order: '{{purchase_order}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.d.Vendor
      - name: delivery_date
        type: string
        mapping: $.d.DeliveryDate
      - name: ordered_qty
        type: string
        mapping: $.d.OrderedQuantity
      - name: gr_status
        type: string
        mapping: $.d.GoodsReceiptStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_PO_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{purchase_order}}')
      inputParameters:
      - name: purchase_order
        in: path
      operations:
      - name: get-purchase-order
        method: GET
Open in Framework → View in Fleet → sap-raw-material-procurement-status.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 4
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-4.yml

Sends a formatted notification message to a specified Microsoft Teams channel for cross-functional communication.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notification
  description: Sends a formatted notification message to a specified Microsoft Teams channel for cross-functional communication.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: team-notifications
    port: 8080
    tools:
    - name: send-teams-notification
      description: Post a message to a Microsoft Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: The Teams channel ID.
      - name: message
        in: body
        type: string
        description: The message body.
      call: msteams.post-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        message: '{{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
Open in Framework → View in Fleet → microsoft-teams-channel-notification.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 20
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-20
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mondelez-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-20.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 34
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-34
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mondelez.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-34.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 22
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-22
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mondelez.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-22.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 6
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-6.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 7
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-7.yml

Triggers a dataset refresh in Power BI for the supply chain operations dashboard so logistics teams can view real-time distribution metrics.

naftiko: '0.5'
info:
  label: Power BI Supply Chain Dashboard Refresh
  description: Triggers a dataset refresh in Power BI for the supply chain operations dashboard so logistics teams can view real-time distribution metrics.
  tags:
  - analytics
  - power-bi
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-analytics
    port: 8080
    tools:
    - name: refresh-supply-chain-dashboard
      description: Trigger a Power BI dataset refresh for the supply chain dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-supply-chain-dashboard-refresh.yml

Analyzes trade spend by pulling promotion spend from Salesforce, comparing against SAP actuals, building analytics in Snowflake, refreshing Power BI dashboards, and notifying finance.

naftiko: '0.5'
info:
  label: Trade Spend Analysis Pipeline
  description: Analyzes trade spend by pulling promotion spend from Salesforce, comparing against SAP actuals, building analytics in Snowflake, refreshing Power BI dashboards, and notifying finance.
  tags:
  - finance
  - trade-spend
  - salesforce
  - sap
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: trade-spend
    port: 8080
    tools:
    - name: analyze-trade-spend
      description: Given a brand and period, analyze trade spend across planned vs actual.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand to analyze.
      - name: period
        in: body
        type: string
        description: The analysis period (e.g., Q1-2026).
      steps:
      - name: get-planned-spend
        type: call
        call: salesforce.get-trade-plans
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: get-actual-spend
        type: call
        call: sap.get-trade-actuals
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: run-analysis
        type: call
        call: snowflake.execute-query
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: trade-spend-dataset
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: trade-plans
      path: /query/?q=SELECT+Brand__c,Planned_Spend__c+FROM+Trade_Plan__c+WHERE+Brand__c='{{brand}}'+AND+Period__c='{{period}}'
      inputParameters:
      - name: brand
        in: query
      - name: period
        in: query
      operations:
      - name: get-trade-plans
        method: GET
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/FI_TRADE_SPEND_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: trade-actuals
      path: /A_TradeSpend?$filter=Brand eq '{{brand}}' and Period eq '{{period}}'
      inputParameters:
      - name: brand
        in: query
      - name: period
        in: query
      operations:
      - name: get-trade-actuals
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: 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: refresh-dataset
        method: POST
Open in Framework → View in Fleet → trade-spend-analysis-pipeline.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 23
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-23
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-23.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 27
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-27
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#snacks'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-27.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 33
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-33
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-33.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 3
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-3.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 2
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-2.yml

Retrieves a Jira issue by key for IT and manufacturing project tracking, returning summary, status, assignee, and priority.

naftiko: '0.5'
info:
  label: Jira Task Lookup
  description: Retrieves a Jira issue by key for IT and manufacturing project tracking, returning summary, status, assignee, and priority.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key. Returns summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-task-lookup.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 32
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-32
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mondelez-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-32.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 26
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-26
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mondelez.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-26.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 18
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-18
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SNAC
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-18.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 30
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-30
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SNAC
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mondelez.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-30.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 24
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-24
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: snacks.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-24.yml

Retrieves current cocoa commodity pricing from SAP for a specified origin and grade, returning price per metric ton, currency, and last update timestamp for procurement planning.

naftiko: '0.5'
info:
  label: SAP Cocoa Price Monitoring
  description: Retrieves current cocoa commodity pricing from SAP for a specified origin and grade, returning price per metric ton, currency, and last update timestamp for procurement planning.
  tags:
  - commodities
  - cocoa
  - sap
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: commodity-pricing
    port: 8080
    tools:
    - name: get-cocoa-price
      description: Look up current cocoa pricing by origin and grade from SAP. Returns price per metric ton and currency.
      inputParameters:
      - name: origin
        in: body
        type: string
        description: Cocoa origin country (e.g., Ghana, Ivory Coast, Ecuador).
      - name: grade
        in: body
        type: string
        description: Cocoa grade classification.
      call: sap.get-commodity-price
      with:
        origin: '{{origin}}'
        grade: '{{grade}}'
      outputParameters:
      - name: price_per_mt
        type: string
        mapping: $.d.PricePerMetricTon
      - name: currency
        type: string
        mapping: $.d.Currency
      - name: last_updated
        type: string
        mapping: $.d.LastUpdated
  consumes:
  - type: http
    namespace: sap
    baseUri: https://mondelez-s4.sap.com/sap/opu/odata/sap/MM_COMMODITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: commodity-prices
      path: /A_CommodityPrice(Origin='{{origin}}',Grade='{{grade}}')
      inputParameters:
      - name: origin
        in: path
      - name: grade
        in: path
      operations:
      - name: get-commodity-price
        method: GET
Open in Framework → View in Fleet → sap-cocoa-price-monitoring.yml

Aggregates consumer insights by pulling social media sentiment from HubSpot, sales data from Snowflake, and market research from Salesforce, then distributing the insights to innovation teams via SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Insights Aggregation Pipeline
  description: Aggregates consumer insights by pulling social media sentiment from HubSpot, sales data from Snowflake, and market research from Salesforce, then distributing the insights to innovation teams via SharePoint and Microsoft Teams.
  tags:
  - marketing
  - consumer-insights
  - hubspot
  - snowflake
  - salesforce
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer-insights
    port: 8080
    tools:
    - name: aggregate-consumer-insights
      description: Given a brand and time period, aggregate consumer insights across multiple data sources.
      inputParameters:
      - name: brand
        in: body
        type: string
        description: The brand name.
      - name: period
        in: body
        type: string
        description: The analysis period.
      steps:
      - name: get-sentiment
        type: call
        call: hubspot.get-social-metrics
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: get-sales-data
        type: call
        call: snowflake.execute-query
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: get-research
        type: call
        call: salesforce.get-research
        with:
          brand: '{{brand}}'
          period: '{{period}}'
      - name: upload-insights
        type: call
        call: sharepoint.create-folder
        with:
          site_id: insights_site
          folder_path: ConsumerInsights/{{brand}}/{{period}}
      - name: notify-innovation
        type: call
        call: msteams.post-message
        with:
          team_id: innovation-team
          channel_id: consumer-insights
          message: 'Consumer insights for {{brand}} ({{period}}) ready. Sentiment: {{get-sentiment.overall_score}}. Sales trend: {{get-sales-data.trend}}. Report: {{upload-insights.webUrl}}.'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social-metrics
      path: /analytics/v2/reports/social
      operations:
      - name: get-social-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://mondelez.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: research
      path: /query/?q=SELECT+Research_Type__c,Key_Findings__c+FROM+Market_Research__c+WHERE+Brand__c='{{brand}}'+AND+Period__c='{{period}}'
      inputParameters:
      - name: brand
        in: query
      - name: period
        in: query
      operations:
      - name: get-research
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      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: 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
Open in Framework → View in Fleet → consumer-insights-aggregation-pipeline.yml

Retrieves operational data for Mondelez snacks workflows.

naftiko: '0.5'
info:
  label: Mondelez Data Lookup 1
  description: Retrieves operational data for Mondelez snacks workflows.
  tags:
  - snacks
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mondelez-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Mondelez snacks workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mondelez-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mondelez-data
    baseUri: https://api.mondelez.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → mondelez-data-lookup-1.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 25
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-25
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mondelez.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-25.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 31
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-31
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: snacks
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-31.yml

Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.

naftiko: '0.5'
info:
  label: Mondelez Workflow 19
  description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
  tags:
  - snacks
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: snacks
    port: 8080
    tools:
    - name: mondelez-workflow-19
      description: Orchestrates snacks operations including data retrieval, processing, and automated notification for Mondelez.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mondelez-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: snacks
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mondelez-ops
    baseUri: https://api.mondelez.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mondelez_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mondelez-workflow-19.yml

When a HubSpot marketing qualified lead converts, creates a Salesforce opportunity, assigns the account owner, and notifies the sales rep in Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Lead to Salesforce Opportunity Sync
  description: When a HubSpot marketing qualified lead converts, creates a Salesforce opportunity, assigns the account owner, and notifies the sales rep in Microsoft Teams.
  tags:
  - sales
  - marketing
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-sync
    port: 8080
    tools:
    - name: sync-lead-to-opportunity
      description: Given a HubSpot contact ID, create a Salesforce opportunity and notify the assigned sales rep.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID.
      - name: deal_value
        in: body
        type: string
        description: The estimated deal value.
      steps:
      - name: get-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: '{{get-contact.company}} — {{get-contact.lead_source}}'
          amount: '{{deal_value}}'
          stage: Qualification
          contact_email: '{{get-contact.email}}'
      - name: notify-rep
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{create-opportunity.owner_email}}'
          text: 'New MQL converted to opportunity: {{get-contact.company}} ({{get-contact.firstname}} {{get-contact.lastname}}). Deal value: ${{deal_value}}. Salesforce opp: {{create-opportunity.id}}. Source: {{get-contact.lead_source}}.'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        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
Open in Framework → View in Fleet → hubspot-lead-to-salesforce-opportunity-sync.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 10
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-10.yml

When a ServiceNow change request is submitted, looks up the requestor in Workday to resolve the approval chain, posts an approval request to the CAB Microsoft Teams channel, and updates the change ticket.

naftiko: '0.5'
info:
  label: IT Change Request Approval Pipeline
  description: When a ServiceNow change request is submitted, looks up the requestor in Workday to resolve the approval chain, posts an approval request to the CAB Microsoft Teams channel, and updates the change ticket.
  tags:
  - operations
  - itsm
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: route-change-approval
      description: Given a ServiceNow change number and requestor employee ID, resolve the approver chain and post to the CAB Teams channel.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number.
      - name: requestor_id
        in: body
        type: string
        description: The Workday employee ID of the requestor.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          change_number: '{{change_number}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_id}}'
      - name: post-cab-review
        type: call
        call: msteams.post-channel
        with:
          team_id: it-change-advisory-board
          channel_id: change-reviews
          text: 'Change request {{change_number}} submitted by {{get-requestor.full_name}} ({{get-requestor.job_title}}). Summary: {{get-change.short_description}}. Risk: {{get-change.risk}}. Planned start: {{get-change.start_date}}. Please review and approve.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request?sysparm_query=number={{change_number}}
      inputParameters:
      - name: change_number
        in: path
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: 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-channel
        method: POST
Open in Framework → View in Fleet → it-change-request-approval-pipeline.yml

Pulls competitive shelf-share data from Circana, compares against Salesforce account targets, and emails the field sales rep via Microsoft Outlook with a gap analysis.

naftiko: '0.5'
info:
  label: Retail Shelf-Share Competitive Monitor
  description: Pulls competitive shelf-share data from Circana, compares against Salesforce account targets, and emails the field sales rep via Microsoft Outlook with a gap analysis.
  tags:
  - sales
  - market-research
  - circana
  - salesforce
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: shelf-share-monitor
    port: 8080
    tools:
    - name: monitor-shelf-share
      description: Given a retailer account ID and product category, pull Circana shelf-share, compare to Salesforce targets, and email the field rep.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the retailer.
      - name: category
        in: body
        type: string
        description: The product category.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-shelf-data
        type: call
        call: circana.get-shelf-share
        with:
          retailer: '{{get-account.name}}'
          category: '{{category}}'
      - name: email-rep
        type: call
        call: outlook.send-mail
        with:
          to: '{{get-account.owner_email}}'
          subject: 'Shelf-share alert: {{category}} at {{get-account.name}}'
          body: 'Current shelf-share: {{get-shelf-data.nestle_share}}% (target: {{get-account.shelf_target}}%). Gap: {{get-shelf-data.gap_pct}}%. Top competitor: {{get-shelf-data.top_competitor}} at {{get-shelf-data.competitor_share}}%. Action may be needed for {{category}} at {{get-account.name}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: shelf-share
      path: /shelf-share/retailer
      operations:
      - name: get-shelf-share
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → retail-shelf-share-competitive-monitor.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 11
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-11.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 13
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-13.yml

Monitors commodity price changes via SAP, compares against procurement contract thresholds in Oracle Cloud, and alerts the sourcing team in Microsoft Teams when thresholds are breached.

naftiko: '0.5'
info:
  label: Raw Material Price Alert Workflow
  description: Monitors commodity price changes via SAP, compares against procurement contract thresholds in Oracle Cloud, and alerts the sourcing team in Microsoft Teams when thresholds are breached.
  tags:
  - procurement
  - supply-chain
  - sap
  - oracle-cloud
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: commodity-alerts
    port: 8080
    tools:
    - name: check-commodity-price
      description: Given a commodity code and contract ID, fetch current market price from SAP, compare to Oracle contract terms, and alert sourcing if threshold exceeded.
      inputParameters:
      - name: commodity_code
        in: body
        type: string
        description: The SAP commodity code (e.g. cocoa, milk powder, palm oil).
      - name: contract_id
        in: body
        type: string
        description: The Oracle Cloud procurement contract ID.
      steps:
      - name: get-market-price
        type: call
        call: sap.get-commodity-price
        with:
          commodity_code: '{{commodity_code}}'
      - name: get-contract
        type: call
        call: oracle.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: alert-sourcing
        type: call
        call: msteams.post-channel
        with:
          team_id: global-sourcing
          channel_id: commodity-alerts
          text: 'Commodity price alert: {{commodity_code}} current market price {{get-market-price.current_price}} {{get-market-price.currency}}/MT. Contract ceiling: {{get-contract.price_ceiling}} {{get-contract.currency}}/MT. Variance: {{get-market-price.variance_pct}}%. Contract: {{contract_id}} with {{get-contract.supplier_name}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_COMMODITY_PRICING
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: commodity-prices
      path: /CommodityPrices('{{commodity_code}}')
      inputParameters:
      - name: commodity_code
        in: path
      operations:
      - name: get-commodity-price
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://nestle-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: contracts
      path: /purchaseAgreements/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
  - 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-channel
        method: POST
Open in Framework → View in Fleet → raw-material-price-alert-workflow.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 12
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-12.yml

Collects recent brand mentions from Instagram and Facebook via Meta APIs, runs sentiment scoring via Azure Machine Learning, and posts a daily digest to the brand team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Social Media Brand Sentiment Aggregator
  description: Collects recent brand mentions from Instagram and Facebook via Meta APIs, runs sentiment scoring via Azure Machine Learning, and posts a daily digest to the brand team's Microsoft Teams channel.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - azure-machine-learning
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-sentiment
    port: 8080
    tools:
    - name: aggregate-brand-sentiment
      description: Given a brand name and date, collect social mentions, score sentiment, and post a digest to Microsoft Teams.
      inputParameters:
      - name: brand_name
        in: body
        type: string
        description: The Nestlé brand name (e.g. Nescafé, KitKat).
      - name: report_date
        in: body
        type: string
        description: The date to aggregate in YYYY-MM-DD format.
      steps:
      - name: get-instagram-mentions
        type: call
        call: meta.get-ig-mentions
        with:
          hashtag: '{{brand_name}}'
          since: '{{report_date}}'
      - name: get-facebook-mentions
        type: call
        call: meta.get-fb-mentions
        with:
          page_name: '{{brand_name}}'
          since: '{{report_date}}'
      - name: score-sentiment
        type: call
        call: azureml.score-sentiment
        with:
          texts: '{{get-instagram-mentions.captions}},{{get-facebook-mentions.comments}}'
      - name: post-digest
        type: call
        call: msteams.post-channel
        with:
          team_id: brand-marketing-{{brand_name}}
          channel_id: social-insights
          text: 'Daily sentiment digest for {{brand_name}} ({{report_date}}): IG mentions: {{get-instagram-mentions.count}}, FB mentions: {{get-facebook-mentions.count}}. Avg sentiment: {{score-sentiment.average_score}}. Top positive: {{score-sentiment.top_positive}}. Top concern: {{score-sentiment.top_negative}}.'
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: ig-hashtag
      path: /ig_hashtag_search?q={{hashtag}}&since={{since}}
      inputParameters:
      - name: hashtag
        in: query
      - name: since
        in: query
      operations:
      - name: get-ig-mentions
        method: GET
    - name: fb-page-feed
      path: /{{page_name}}/feed?since={{since}}
      inputParameters:
      - name: page_name
        in: path
      - name: since
        in: query
      operations:
      - name: get-fb-mentions
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://nestle-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: sentiment
      path: /score
      operations:
      - name: score-sentiment
        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: post-channel
        method: POST
Open in Framework → View in Fleet → social-media-brand-sentiment-aggregator.yml

Initiates a HACCP food safety audit by retrieving the plant's critical control point data from SAP, pulling the latest SOP from Confluence, and creating a ServiceNow audit task with checklist links.

naftiko: '0.5'
info:
  label: HACCP Audit Workflow
  description: Initiates a HACCP food safety audit by retrieving the plant's critical control point data from SAP, pulling the latest SOP from Confluence, and creating a ServiceNow audit task with checklist links.
  tags:
  - quality
  - food-safety
  - sap
  - confluence
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-safety-audit
    port: 8080
    tools:
    - name: initiate-haccp-audit
      description: Given a plant code and production line, retrieve CCP data from SAP, find the relevant SOP in Confluence, and create an audit task in ServiceNow.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The Nestlé plant code.
      - name: production_line
        in: body
        type: string
        description: The production line identifier.
      steps:
      - name: get-ccps
        type: call
        call: sap.get-ccp-data
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
      - name: find-sop
        type: call
        call: confluence.search
        with:
          cql: space=HACCP AND type=page AND text~"{{plant_code}} {{production_line}} CCP"
      - name: create-audit
        type: call
        call: servicenow.create-task
        with:
          short_description: 'HACCP audit: {{plant_code}} line {{production_line}}'
          description: 'HACCP audit for plant {{plant_code}}, line {{production_line}}. CCPs: {{get-ccps.ccp_count}}. Critical limits: {{get-ccps.critical_limits_summary}}. SOP reference: {{find-sop.results[0].title}} ({{find-sop.results[0]._links.webui}}).'
          assigned_group: Quality_Food_Safety
          category: haccp_audit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_QUALITY_MANAGEMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: ccps
      path: /CriticalControlPoints?$filter=Plant eq '{{plant}}' and ProductionLine eq '{{line}}'
      inputParameters:
      - name: plant
        in: query
      - name: line
        in: query
      operations:
      - name: get-ccp-data
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://nestle.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → haccp-audit-workflow.yml

When a packaging spec changes, updates the material BOM in SAP, uploads the new artwork brief to Box, and notifies the packaging design team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Packaging Specification Change Pipeline
  description: When a packaging spec changes, updates the material BOM in SAP, uploads the new artwork brief to Box, and notifies the packaging design team in Microsoft Teams.
  tags:
  - supply-chain
  - packaging
  - sap
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: packaging-change
    port: 8080
    tools:
    - name: process-packaging-change
      description: Given a material number and updated spec details, update SAP BOM, upload artwork brief to Box, and notify the packaging team.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the product.
      - name: change_description
        in: body
        type: string
        description: Description of the packaging specification change.
      - name: artwork_file_id
        in: body
        type: string
        description: The Box file ID for the new artwork brief.
      steps:
      - name: get-bom
        type: call
        call: sap.get-bom
        with:
          material: '{{material_number}}'
      - name: upload-brief
        type: call
        call: box.copy-file
        with:
          file_id: '{{artwork_file_id}}'
          parent_folder_id: packaging_active_specs
      - name: notify-team
        type: call
        call: msteams.post-channel
        with:
          team_id: packaging-design
          channel_id: spec-changes
          text: 'Packaging spec change for material {{material_number}}: {{change_description}}. Current BOM version: {{get-bom.bom_version}}. New artwork brief: {{upload-brief.shared_link}}. Please review and confirm.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: boms
      path: /A_BillOfMaterial?$filter=Material eq '{{material}}'
      inputParameters:
      - name: material
        in: query
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}/copy
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: copy-file
        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: post-channel
        method: POST
Open in Framework → View in Fleet → packaging-specification-change-pipeline.yml

Retrieves a product listing from Nestlé's BigCommerce e-commerce store by product ID, returning name, SKU, price, and inventory level.

naftiko: '0.5'
info:
  label: BigCommerce Product Catalog Lookup
  description: Retrieves a product listing from Nestlé's BigCommerce e-commerce store by product ID, returning name, SKU, price, and inventory level.
  tags:
  - e-commerce
  - catalog
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-catalog
    port: 8080
    tools:
    - name: get-product
      description: Fetch a BigCommerce product by ID. Returns name, SKU, price, and inventory.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The BigCommerce product ID.
      call: bigcommerce.get-product
      with:
        product_id: '{{product_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.data.name
      - name: sku
        type: string
        mapping: $.data.sku
      - name: price
        type: string
        mapping: $.data.price
      - name: inventory_level
        type: string
        mapping: $.data.inventory_level
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/nestle-store/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    inputParameters:
    - name: X-Auth-Token
      in: header
      value: $secrets.bigcommerce_access_token
    resources:
    - name: products
      path: /catalog/products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → bigcommerce-product-catalog-lookup.yml

Fetches a quality management document from SharePoint by site and file path. Used by Nestlé quality assurance teams to retrieve SOPs, HACCP plans, and audit checklists.

naftiko: '0.5'
info:
  label: SharePoint Quality Document Retrieval
  description: Fetches a quality management document from SharePoint by site and file path. Used by Nestlé quality assurance teams to retrieve SOPs, HACCP plans, and audit checklists.
  tags:
  - quality
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: quality-docs
    port: 8080
    tools:
    - name: get-quality-document
      description: Retrieve a quality document from SharePoint by site ID and file path.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID for the quality document library.
      - name: file_path
        in: body
        type: string
        description: The relative file path within the document library.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: download_url
        type: string
        mapping: $.@microsoft.graph.downloadUrl
      - 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: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-quality-document-retrieval.yml

Traces a finished goods batch through the supply chain by querying SAP for batch genealogy, pulling warehouse movement data from Oracle Cloud, and logging the traceability report to SharePoint.

naftiko: '0.5'
info:
  label: Production Batch Traceability
  description: Traces a finished goods batch through the supply chain by querying SAP for batch genealogy, pulling warehouse movement data from Oracle Cloud, and logging the traceability report to SharePoint.
  tags:
  - quality
  - supply-chain
  - sap
  - oracle-cloud
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: batch-traceability
    port: 8080
    tools:
    - name: trace-batch
      description: Given a batch number and material, retrieve SAP batch genealogy, Oracle warehouse movements, and upload a traceability report to SharePoint.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-genealogy
        type: call
        call: sap.get-batch-genealogy
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: get-movements
        type: call
        call: oracle.get-inventory-transactions
        with:
          item_number: '{{material_number}}'
          lot_number: '{{batch_number}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: quality-traceability
          file_path: TraceReports/{{material_number}}_{{batch_number}}_trace.json
          content: 'Batch: {{batch_number}}, Material: {{material_number}}, Input batches: {{get-genealogy.input_batches}}, Production date: {{get-genealogy.production_date}}, Plant: {{get-genealogy.plant}}, Warehouse movements: {{get-movements.transaction_count}}, Last location: {{get-movements.current_warehouse}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: batch-genealogy
      path: /A_Batch(Material='{{material}}',Batch='{{batch}}')/to_BatchGenealogy
      inputParameters:
      - name: material
        in: path
      - name: batch
        in: path
      operations:
      - name: get-batch-genealogy
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://nestle-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: transactions
      path: /inventoryTransactions?q=ItemNumber={{item_number}};LotNumber={{lot_number}}
      inputParameters:
      - name: item_number
        in: query
      - name: lot_number
        in: query
      operations:
      - name: get-inventory-transactions
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → production-batch-traceability.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 15
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-15.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 9
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-9.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 8
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-8
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nestle-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nestle-workflow-8.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 9
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-9
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nestle-workflow-9.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 8
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-8.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 14
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-14.yml

When a new ingredient supplier is proposed, retrieves the vendor record from SAP, checks compliance documents in SharePoint, and opens a ServiceNow qualification task for the quality team.

naftiko: '0.5'
info:
  label: Ingredient Supplier Qualification Pipeline
  description: When a new ingredient supplier is proposed, retrieves the vendor record from SAP, checks compliance documents in SharePoint, and opens a ServiceNow qualification task for the quality team.
  tags:
  - quality
  - procurement
  - sap
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: supplier-qualification
    port: 8080
    tools:
    - name: qualify-supplier
      description: Given a SAP vendor number, check for compliance documentation in SharePoint and open a ServiceNow qualification task.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number for the ingredient supplier.
      - name: ingredient_name
        in: body
        type: string
        description: The ingredient being sourced.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_number: '{{vendor_number}}'
      - name: check-docs
        type: call
        call: sharepoint.search-files
        with:
          site_id: supplier_qualification_site
          search_term: '{{get-vendor.vendor_name}} certificate'
      - name: open-qualification
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Supplier qualification: {{get-vendor.vendor_name}} for {{ingredient_name}}'
          description: 'Vendor: {{get-vendor.vendor_name}} ({{vendor_number}}). Ingredient: {{ingredient_name}}. Compliance docs found: {{check-docs.total_count}}. Country: {{get-vendor.country}}.'
          assigned_group: Quality_Supplier_Mgmt
          category: supplier_qualification
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /{{site_id}}/drive/root/search(q='{{search_term}}')
      inputParameters:
      - name: site_id
        in: path
      - name: search_term
        in: path
      operations:
      - name: search-files
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → ingredient-supplier-qualification-pipeline.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 19
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-19
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-19.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 25
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-25
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nestle-workflow-25.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 31
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-31
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-31.yml

Checks Oracle Cloud inventory levels against reorder points, creates a SAP purchase requisition for low-stock materials, and notifies the supply planner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Replenishment Alert
  description: Checks Oracle Cloud inventory levels against reorder points, creates a SAP purchase requisition for low-stock materials, and notifies the supply planner in Microsoft Teams.
  tags:
  - supply-chain
  - inventory
  - oracle-cloud
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: replenishment
    port: 8080
    tools:
    - name: trigger-replenishment
      description: Given an item number and warehouse, check inventory level, create a purchase requisition if below reorder point, and notify the planner.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: The Oracle/SAP item number.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse or distribution center code.
      - name: planner_email
        in: body
        type: string
        description: The supply planner's email address.
      steps:
      - name: check-inventory
        type: call
        call: oracle.get-onhand
        with:
          item_number: '{{item_number}}'
          warehouse_code: '{{warehouse_code}}'
      - name: create-pr
        type: call
        call: sap.create-purchase-requisition
        with:
          material: '{{item_number}}'
          plant: '{{warehouse_code}}'
          quantity: '{{check-inventory.reorder_quantity}}'
      - name: notify-planner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{planner_email}}'
          text: 'Replenishment triggered for {{item_number}} at {{warehouse_code}}. Current on-hand: {{check-inventory.on_hand_quantity}} {{check-inventory.uom}}. PR created: {{create-pr.requisition_number}} for qty {{check-inventory.reorder_quantity}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://nestle-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: inventory
      path: /inventoryOnhandBalances?q=ItemNumber={{item_number}};SubinventoryCode={{warehouse_code}}
      inputParameters:
      - name: item_number
        in: query
      - name: warehouse_code
        in: query
      operations:
      - name: get-onhand
        method: GET
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: purchase-requisitions
      path: /A_PurchaseRequisition
      operations:
      - name: create-purchase-requisition
        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
Open in Framework → View in Fleet → warehouse-replenishment-alert.yml

Retrieves upcoming promotions from SAP Trade Promotion Management, syncs events to the sales team's Google Sheets calendar, and sends a Microsoft Outlook reminder to the field sales team.

naftiko: '0.5'
info:
  label: Retail Promotion Calendar Sync
  description: Retrieves upcoming promotions from SAP Trade Promotion Management, syncs events to the sales team's Google Sheets calendar, and sends a Microsoft Outlook reminder to the field sales team.
  tags:
  - sales
  - trade-promotion
  - sap
  - google-sheets
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: promo-calendar
    port: 8080
    tools:
    - name: sync-promo-calendar
      description: Given a customer group and date range, pull promotions from SAP, update Google Sheets calendar, and email the field team.
      inputParameters:
      - name: customer_group
        in: body
        type: string
        description: The SAP customer group code.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets calendar spreadsheet ID.
      steps:
      - name: get-promotions
        type: call
        call: sap.get-trade-promotions
        with:
          customer_group: '{{customer_group}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: update-calendar
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: PromoCalendar!A:F
          values: '{{get-promotions.summary}}'
      - name: email-field-team
        type: call
        call: outlook.send-mail
        with:
          to: field-sales-{{customer_group}}@nestle.com
          subject: 'Updated promotion calendar: {{customer_group}} ({{start_date}} to {{end_date}})'
          body: 'The promotion calendar has been updated with {{get-promotions.count}} promotions for customer group {{customer_group}}. Review the tracker: {{update-calendar.spreadsheet_url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_TRADE_PROMOTION
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: promotions
      path: /A_TradePromotion?$filter=CustomerGroup eq '{{customer_group}}' and StartDate ge datetime'{{start_date}}' and EndDate le datetime'{{end_date}}'
      inputParameters:
      - name: customer_group
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-trade-promotions
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → retail-promotion-calendar-sync.yml

Collects water consumption data from SAP environmental modules, compares against reduction targets stored in Google Sheets, and posts a sustainability status update to the ESG team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Water Usage Sustainability Tracker
  description: Collects water consumption data from SAP environmental modules, compares against reduction targets stored in Google Sheets, and posts a sustainability status update to the ESG team's Microsoft Teams channel.
  tags:
  - sustainability
  - manufacturing
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: water-sustainability
    port: 8080
    tools:
    - name: track-water-usage
      description: Given a plant code and reporting month, fetch water consumption from SAP, compare to targets in Google Sheets, and post status to Teams.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The Nestlé plant code.
      - name: year_month
        in: body
        type: string
        description: The reporting month in YYYY-MM format.
      - name: targets_spreadsheet_id
        in: body
        type: string
        description: The Google Sheets ID containing water reduction targets.
      steps:
      - name: get-water-data
        type: call
        call: sap.get-water-consumption
        with:
          plant: '{{plant_code}}'
          period: '{{year_month}}'
      - name: get-targets
        type: call
        call: gsheets.get-values
        with:
          spreadsheet_id: '{{targets_spreadsheet_id}}'
          range: WaterTargets!A:D
      - name: post-status
        type: call
        call: msteams.post-channel
        with:
          team_id: esg-sustainability
          channel_id: water-stewardship
          text: 'Water usage report for plant {{plant_code}} ({{year_month}}): Consumption: {{get-water-data.total_cubic_meters}} m3. Per-tonne: {{get-water-data.per_tonne}} m3/t. Recycled: {{get-water-data.recycled_pct}}%. Target compliance requires review against {{targets_spreadsheet_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_ENVIRONMENT_HEALTH_SAFETY
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: water
      path: /WaterConsumption?$filter=Plant eq '{{plant}}' and Period eq '{{period}}'
      inputParameters:
      - name: plant
        in: query
      - name: period
        in: query
      operations:
      - name: get-water-consumption
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-values
        method: GET
  - 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-channel
        method: POST
Open in Framework → View in Fleet → water-usage-sustainability-tracker.yml

Pulls page-level engagement metrics from Adobe Analytics for a Nestlé brand property, including page views, unique visitors, and average time on page.

naftiko: '0.5'
info:
  label: Adobe Analytics Brand Page Metrics
  description: Pulls page-level engagement metrics from Adobe Analytics for a Nestlé brand property, including page views, unique visitors, and average time on page.
  tags:
  - marketing
  - analytics
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: get-page-metrics
      description: Retrieve page-level engagement metrics from Adobe Analytics for a specified report suite and date range.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID for the brand property.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      call: adobe.get-report
      with:
        rsid: '{{report_suite_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: page_views
        type: string
        mapping: $.rows[0].value
      - name: unique_visitors
        type: string
        mapping: $.rows[1].value
      - name: avg_time_on_page
        type: string
        mapping: $.rows[2].value
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api/nestle
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-brand-page-metrics.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 30
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-30
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nestle.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nestle-workflow-30.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 24
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-24
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: food-manufacturing.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → nestle-workflow-24.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 18
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-18
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nestle.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nestle-workflow-18.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 32
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-32
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nestle-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nestle-workflow-32.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 26
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-26
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nestle-workflow-26.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 27
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-27
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-27.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 33
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-33
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nestle-workflow-33.yml

Retrieves updated product catalog data from SAP, pushes it to an Elasticsearch index for the e-commerce search engine, and logs the refresh status to a Google Sheets audit trail.

naftiko: '0.5'
info:
  label: Elasticsearch Product Search Index Refresh
  description: Retrieves updated product catalog data from SAP, pushes it to an Elasticsearch index for the e-commerce search engine, and logs the refresh status to a Google Sheets audit trail.
  tags:
  - e-commerce
  - search
  - sap
  - elasticsearch
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: search-index
    port: 8080
    tools:
    - name: refresh-product-index
      description: Given a material group, pull updated products from SAP, index in Elasticsearch, and log to audit sheet.
      inputParameters:
      - name: material_group
        in: body
        type: string
        description: The SAP material group to refresh.
      - name: audit_spreadsheet_id
        in: body
        type: string
        description: The Google Sheets ID for index refresh audit.
      steps:
      - name: get-products
        type: call
        call: sap.get-products-by-group
        with:
          material_group: '{{material_group}}'
      - name: bulk-index
        type: call
        call: elasticsearch.bulk-index
        with:
          index: nestle-product-catalog
          documents: '{{get-products.results}}'
      - name: log-refresh
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: '{{audit_spreadsheet_id}}'
          range: IndexRefresh!A:E
          values: '{{material_group}},{{get-products.count}},{{bulk-index.indexed_count}},{{bulk-index.error_count}},{{bulk-index.timestamp}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: products
      path: /A_Product?$filter=MaterialGroup eq '{{material_group}}'
      inputParameters:
      - name: material_group
        in: query
      operations:
      - name: get-products-by-group
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://nestle-es.westeurope.azure.elastic-cloud.com
    authentication:
      type: basic
      username: $secrets.elasticsearch_user
      password: $secrets.elasticsearch_password
    resources:
    - name: bulk
      path: /{{index}}/_bulk
      inputParameters:
      - name: index
        in: path
      operations:
      - name: bulk-index
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → elasticsearch-product-search-index-refresh.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 23
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-23
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nestle-workflow-23.yml

When Datadog detects a factory line monitor breach, retrieves host details, creates a ServiceNow incident, and notifies the plant operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Line Downtime Alerter
  description: When Datadog detects a factory line monitor breach, retrieves host details, creates a ServiceNow incident, and notifies the plant operations team in Microsoft Teams.
  tags:
  - manufacturing
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: factory-alerts
    port: 8080
    tools:
    - name: escalate-line-downtime
      description: Given a Datadog monitor ID and plant code, retrieve alert details, create a ServiceNow incident, and notify the plant ops team.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered.
      - name: plant_code
        in: body
        type: string
        description: The Nestlé plant code.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line downtime alert: {{get-monitor.name}} at plant {{plant_code}}'
          description: 'Monitor: {{get-monitor.name}}. Status: {{get-monitor.overall_state}}. Message: {{get-monitor.message}}. Plant: {{plant_code}}.'
          priority: '2'
          category: manufacturing_downtime
          assigned_group: Plant_Operations_{{plant_code}}
      - name: notify-ops
        type: call
        call: msteams.post-channel
        with:
          team_id: plant-ops-{{plant_code}}
          channel_id: line-alerts
          text: 'LINE DOWNTIME: {{get-monitor.name}} is {{get-monitor.overall_state}}. Incident {{create-incident.number}} created. Please investigate immediately.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.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: post-channel
        method: POST
Open in Framework → View in Fleet → manufacturing-line-downtime-alerter.yml

Syncs incoming distributor orders from Oracle E-Business Suite into SAP as sales orders, and updates the Salesforce opportunity stage with order confirmation details.

naftiko: '0.5'
info:
  label: Distributor Order Sync Pipeline
  description: Syncs incoming distributor orders from Oracle E-Business Suite into SAP as sales orders, and updates the Salesforce opportunity stage with order confirmation details.
  tags:
  - supply-chain
  - sales
  - oracle-e-business-suite
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: distributor-orders
    port: 8080
    tools:
    - name: sync-distributor-order
      description: Given an Oracle EBS order number and Salesforce opportunity ID, retrieve order details, create a SAP sales order, and update Salesforce.
      inputParameters:
      - name: ebs_order_number
        in: body
        type: string
        description: The Oracle EBS order number.
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-ebs-order
        type: call
        call: oracle-ebs.get-order
        with:
          order_number: '{{ebs_order_number}}'
      - name: create-sales-order
        type: call
        call: sap.create-sales-order
        with:
          sold_to: '{{get-ebs-order.customer_number}}'
          material: '{{get-ebs-order.item_number}}'
          quantity: '{{get-ebs-order.ordered_quantity}}'
          requested_date: '{{get-ebs-order.request_date}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          stage: Closed Won
          sap_order: '{{create-sales-order.sales_order_number}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://nestle-ebs.oraclecloud.com/webservices/rest/order
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: orders
      path: /{{order_number}}
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: sales-orders
      path: /A_SalesOrder
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → distributor-order-sync-pipeline.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 22
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-22
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nestle.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nestle-workflow-22.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 20
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-20
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nestle-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nestle-workflow-20.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 34
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-34
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nestle.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nestle-workflow-34.yml

Queries MuleSoft Anypoint Platform for API health metrics, correlates with Dynatrace application performance data, and posts a consolidated integration health summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: MuleSoft Integration Health Dashboard
  description: Queries MuleSoft Anypoint Platform for API health metrics, correlates with Dynatrace application performance data, and posts a consolidated integration health summary to Microsoft Teams.
  tags:
  - integration
  - monitoring
  - mulesoft
  - dynatrace
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: integration-health
    port: 8080
    tools:
    - name: report-integration-health
      description: Given a MuleSoft environment and Dynatrace entity ID, collect API and APM metrics and post a health summary.
      inputParameters:
      - name: environment_id
        in: body
        type: string
        description: The MuleSoft Anypoint environment ID.
      - name: dynatrace_entity_id
        in: body
        type: string
        description: The Dynatrace monitored entity ID.
      steps:
      - name: get-api-stats
        type: call
        call: mulesoft.get-api-metrics
        with:
          environment_id: '{{environment_id}}'
      - name: get-apm-data
        type: call
        call: dynatrace.get-entity
        with:
          entity_id: '{{dynatrace_entity_id}}'
      - name: post-summary
        type: call
        call: msteams.post-channel
        with:
          team_id: integration-platform
          channel_id: health-dashboard
          text: 'Integration Health: MuleSoft env {{environment_id}} — Total requests: {{get-api-stats.total_requests}}, Error rate: {{get-api-stats.error_rate}}%, Avg latency: {{get-api-stats.avg_latency}}ms. Dynatrace: Health {{get-apm-data.health_state}}, Response time: {{get-apm-data.response_time}}ms, Failure rate: {{get-apm-data.failure_rate}}%.'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/analytics/1.0/nestle
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: api-metrics
      path: /{{environment_id}}/dashboardSummary
      inputParameters:
      - name: environment_id
        in: path
      operations:
      - name: get-api-metrics
        method: GET
  - type: http
    namespace: dynatrace
    baseUri: https://nestle.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: entities
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
  - 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-channel
        method: POST
Open in Framework → View in Fleet → mulesoft-integration-health-dashboard.yml

Retrieves on-hand inventory balance from Oracle Cloud for a specified item and warehouse. Used by Nestlé supply planners to verify raw material and finished goods stock levels.

naftiko: '0.5'
info:
  label: Oracle Cloud Inventory Balance
  description: Retrieves on-hand inventory balance from Oracle Cloud for a specified item and warehouse. Used by Nestlé supply planners to verify raw material and finished goods stock levels.
  tags:
  - supply-chain
  - inventory
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: inventory-management
    port: 8080
    tools:
    - name: get-inventory-balance
      description: Fetch on-hand inventory for an item at a specific warehouse from Oracle Cloud.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: The Oracle item number.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse or subinventory code.
      call: oracle.get-onhand
      with:
        item_number: '{{item_number}}'
        warehouse_code: '{{warehouse_code}}'
      outputParameters:
      - name: on_hand_quantity
        type: string
        mapping: $.items[0].OnhandQuantity
      - name: uom
        type: string
        mapping: $.items[0].UOMCode
      - name: lot_number
        type: string
        mapping: $.items[0].LotNumber
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://nestle-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: inventory
      path: /inventoryOnhandBalances?q=ItemNumber={{item_number}};SubinventoryCode={{warehouse_code}}
      inputParameters:
      - name: item_number
        in: query
      - name: warehouse_code
        in: query
      operations:
      - name: get-onhand
        method: GET
Open in Framework → View in Fleet → oracle-cloud-inventory-balance.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 35
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-35
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nestle-workflow-35.yml

When a marketing designer submits a Canva design for review, uploads the exported asset to Box, creates a ServiceNow approval task, and notifies the brand manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Canva Brand Asset Approval Workflow
  description: When a marketing designer submits a Canva design for review, uploads the exported asset to Box, creates a ServiceNow approval task, and notifies the brand manager in Microsoft Teams.
  tags:
  - marketing
  - design
  - canva
  - box
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-asset-approval
    port: 8080
    tools:
    - name: submit-asset-for-approval
      description: Given a Canva design ID and brand, export the asset, upload to Box, create an approval task, and notify the brand manager.
      inputParameters:
      - name: design_id
        in: body
        type: string
        description: The Canva design ID.
      - name: brand
        in: body
        type: string
        description: The Nestlé brand name.
      - name: designer_name
        in: body
        type: string
        description: The name of the submitting designer.
      steps:
      - name: export-design
        type: call
        call: canva.export-design
        with:
          design_id: '{{design_id}}'
          format: pdf
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          parent_folder_id: brand_assets_{{brand}}
          file_name: '{{design_id}}_review.pdf'
          file_url: '{{export-design.download_url}}'
      - name: create-approval
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Brand asset approval: {{brand}} design {{design_id}}'
          description: 'Designer: {{designer_name}}. Brand: {{brand}}. Design ID: {{design_id}}. Box link: {{upload-to-box.shared_link}}. Please review for brand guidelines compliance.'
          assigned_group: Brand_Management_{{brand}}
          category: brand_asset_approval
      - name: notify-manager
        type: call
        call: msteams.post-channel
        with:
          team_id: brand-marketing-{{brand}}
          channel_id: asset-approvals
          text: 'New asset for review from {{designer_name}}: {{brand}} design {{design_id}}. Preview: {{upload-to-box.shared_link}}. Approval task: {{create-approval.number}}.'
  consumes:
  - type: http
    namespace: canva
    baseUri: https://api.canva.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.canva_token
    resources:
    - name: exports
      path: /designs/{{design_id}}/export
      inputParameters:
      - name: design_id
        in: path
      operations:
      - name: export-design
        method: POST
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: uploads
      path: /files/content
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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-channel
        method: POST
Open in Framework → View in Fleet → canva-brand-asset-approval-workflow.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 21
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-21
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nestle-workflow-21.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 10
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-10
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nestle.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nestle-workflow-10.yml

Receives a consumer complaint from Salesforce Service Cloud, enriches with product batch data from SAP, classifies severity via Azure Machine Learning, and routes a ServiceNow case to the appropriate quality team.

naftiko: '0.5'
info:
  label: Consumer Complaint Triage
  description: Receives a consumer complaint from Salesforce Service Cloud, enriches with product batch data from SAP, classifies severity via Azure Machine Learning, and routes a ServiceNow case to the appropriate quality team.
  tags:
  - quality
  - customer-service
  - salesforce
  - sap
  - azure-machine-learning
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: complaint-triage
    port: 8080
    tools:
    - name: triage-complaint
      description: Given a Salesforce case ID, enrich with SAP batch data, classify severity, and route to ServiceNow.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{get-case.batch_number}}'
          material_number: '{{get-case.product_code}}'
      - name: classify-severity
        type: call
        call: azureml.classify-complaint
        with:
          complaint_text: '{{get-case.description}}'
          product_category: '{{get-batch.material_group}}'
      - name: create-quality-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Consumer complaint: {{get-case.subject}} — Severity {{classify-severity.severity_level}}'
          description: 'Salesforce case: {{case_id}}. Consumer: {{get-case.contact_name}}. Product: {{get-batch.material_description}} (batch {{get-case.batch_number}}). Plant: {{get-batch.plant}}. Severity: {{classify-severity.severity_level}}. Classification: {{classify-severity.category}}.'
          assigned_group: Quality_Consumer_Affairs
          priority: '{{classify-severity.priority}}'
          category: consumer_complaint
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: batches
      path: /A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')
      inputParameters:
      - name: material_number
        in: path
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://nestle-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: complaint-classifier
      path: /score
      operations:
      - name: classify-complaint
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → consumer-complaint-triage.yml

Retrieves vendor invoice data from SAP, cross-references with the purchase order and goods receipt, and opens a ServiceNow task for accounts payable when discrepancies are found.

naftiko: '0.5'
info:
  label: Vendor Invoice Reconciliation
  description: Retrieves vendor invoice data from SAP, cross-references with the purchase order and goods receipt, and opens a ServiceNow task for accounts payable when discrepancies are found.
  tags:
  - finance
  - procurement
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: invoice-reconciliation
    port: 8080
    tools:
    - name: reconcile-invoice
      description: Given an SAP invoice document number, compare against PO and goods receipt, and flag discrepancies to ServiceNow.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      - name: po_number
        in: body
        type: string
        description: The related SAP purchase order number.
      steps:
      - name: get-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: flag-discrepancy
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Invoice discrepancy: {{invoice_number}} vs PO {{po_number}}'
          description: 'Invoice amount: {{get-invoice.total_amount}} {{get-invoice.currency}}. PO amount: {{get-po.total_value}} {{get-po.currency}}. Vendor: {{get-invoice.vendor_name}}. Invoice date: {{get-invoice.document_date}}. Variance requires AP review.'
          assigned_group: Accounts_Payable
          category: invoice_reconciliation
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → vendor-invoice-reconciliation.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 11
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-11
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nestle-workflow-11.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 13
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-13
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nestle-workflow-13.yml

Retrieves campaign metrics from MailChimp for a Nestlé consumer newsletter, enriches with Google Analytics landing page data, and posts a performance summary to the brand team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: MailChimp Consumer Newsletter Performance
  description: Retrieves campaign metrics from MailChimp for a Nestlé consumer newsletter, enriches with Google Analytics landing page data, and posts a performance summary to the brand team's Microsoft Teams channel.
  tags:
  - marketing
  - email-marketing
  - mailchimp
  - google-analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: email-performance
    port: 8080
    tools:
    - name: review-newsletter-performance
      description: Given a MailChimp campaign ID and GA property, pull email metrics, landing page conversion data, and post a summary to Teams.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The MailChimp campaign ID.
      - name: ga_property_id
        in: body
        type: string
        description: The Google Analytics 4 property ID.
      - name: brand
        in: body
        type: string
        description: The Nestlé brand name.
      steps:
      - name: get-campaign-stats
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-landing-metrics
        type: call
        call: ga.run-report
        with:
          property_id: '{{ga_property_id}}'
          start_date: '{{get-campaign-stats.send_time}}'
          end_date: '{{get-campaign-stats.send_time}}'
      - name: post-summary
        type: call
        call: msteams.post-channel
        with:
          team_id: brand-marketing-{{brand}}
          channel_id: email-metrics
          text: 'Newsletter performance for {{brand}}: Open rate: {{get-campaign-stats.open_rate}}%, Click rate: {{get-campaign-stats.click_rate}}%, Unsubscribes: {{get-campaign-stats.unsubscribes}}. Landing page sessions: {{get-landing-metrics.sessions}}, Conversions: {{get-landing-metrics.conversions}}.'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
  - 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: run-report
        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: post-channel
        method: POST
Open in Framework → View in Fleet → mailchimp-consumer-newsletter-performance.yml

Checks the status of an Azure Data Factory pipeline run, and if failed, creates a ServiceNow incident and alerts the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Monitor
  description: Checks the status of an Azure Data Factory pipeline run, and if failed, creates a ServiceNow incident and alerts the data engineering team in Microsoft Teams.
  tags:
  - data
  - monitoring
  - azure-data-factory
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-monitor
    port: 8080
    tools:
    - name: check-pipeline-status
      description: Given an ADF pipeline run ID, check status and escalate failures to ServiceNow and Microsoft Teams.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Azure Data Factory pipeline run ID.
      - name: pipeline_name
        in: body
        type: string
        description: The pipeline name for context.
      steps:
      - name: get-run
        type: call
        call: adf.get-pipeline-run
        with:
          run_id: '{{run_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ADF pipeline failure: {{pipeline_name}}'
          description: 'Pipeline: {{pipeline_name}}. Run ID: {{run_id}}. Status: {{get-run.status}}. Error: {{get-run.message}}. Duration: {{get-run.durationInMs}}ms.'
          priority: '2'
          category: data_pipeline
          assigned_group: Data_Engineering
      - name: alert-team
        type: call
        call: msteams.post-channel
        with:
          team_id: data-engineering
          channel_id: pipeline-alerts
          text: 'ADF Pipeline Failed: {{pipeline_name}} (run {{run_id}}). Status: {{get-run.status}}. Error: {{get-run.message}}. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/nestle-data-rg/providers/Microsoft.DataFactory/factories/nestle-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /pipelineruns/{{run_id}}?api-version=2018-06-01
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.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: post-channel
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-monitor.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 12
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-12
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: food-manufacturing.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → nestle-workflow-12.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 16
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-16
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nestle.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nestle-workflow-16.yml

Monitors Apache NiFi process group status, and when a failure is detected, creates a ServiceNow incident and alerts the data operations team in Microsoft Teams with pipeline diagnostics.

naftiko: '0.5'
info:
  label: NiFi Data Pipeline Failure Escalation
  description: Monitors Apache NiFi process group status, and when a failure is detected, creates a ServiceNow incident and alerts the data operations team in Microsoft Teams with pipeline diagnostics.
  tags:
  - data
  - monitoring
  - apache-nifi
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nifi-monitoring
    port: 8080
    tools:
    - name: escalate-nifi-failure
      description: Given a NiFi process group ID, check status and escalate failures to ServiceNow and Microsoft Teams.
      inputParameters:
      - name: process_group_id
        in: body
        type: string
        description: The Apache NiFi process group ID.
      - name: pipeline_name
        in: body
        type: string
        description: The human-readable pipeline name.
      steps:
      - name: get-status
        type: call
        call: nifi.get-process-group
        with:
          process_group_id: '{{process_group_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'NiFi pipeline failure: {{pipeline_name}}'
          description: 'Pipeline: {{pipeline_name}}. Process group: {{process_group_id}}. Active threads: {{get-status.activeThreadCount}}. Queued: {{get-status.queued}}. Invalid: {{get-status.invalidCount}}. Stopped: {{get-status.stoppedCount}}.'
          priority: '2'
          category: data_pipeline
          assigned_group: Data_Operations
      - name: alert-team
        type: call
        call: msteams.post-channel
        with:
          team_id: data-operations
          channel_id: pipeline-alerts
          text: 'NiFi Pipeline Alert: {{pipeline_name}} has failures. Queued: {{get-status.queued}}, Invalid: {{get-status.invalidCount}}. Incident: {{create-incident.number}}. Investigate immediately.'
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://nestle-nifi.internal.nestle.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /process-groups/{{process_group_id}}/status
      inputParameters:
      - name: process_group_id
        in: path
      operations:
      - name: get-process-group
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.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: post-channel
        method: POST
Open in Framework → View in Fleet → nifi-data-pipeline-failure-escalation.yml

Executes a predefined sales volume query against Nestlé's Teradata data warehouse, returning total units sold, net revenue, and trade spend for a product category and time period.

naftiko: '0.5'
info:
  label: Teradata Sales Data Query
  description: Executes a predefined sales volume query against Nestlé's Teradata data warehouse, returning total units sold, net revenue, and trade spend for a product category and time period.
  tags:
  - analytics
  - data-warehouse
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: query-sales-volume
      description: Query Teradata for product category sales metrics for a given month.
      inputParameters:
      - name: category_code
        in: body
        type: string
        description: The product category code.
      - name: year_month
        in: body
        type: string
        description: The year-month in YYYY-MM format.
      call: teradata.run-query
      with:
        category_code: '{{category_code}}'
        year_month: '{{year_month}}'
      outputParameters:
      - name: units_sold
        type: string
        mapping: $.results[0].units_sold
      - name: net_revenue
        type: string
        mapping: $.results[0].net_revenue
      - name: trade_spend
        type: string
        mapping: $.results[0].trade_spend
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://nestle-tdrest.teradata.com/api/query/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /systems/nestle_edw/queries
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → teradata-sales-data-query.yml

Creates a LinkedIn sponsored job posting for a Nestlé role, syncs the requisition to Workday, and notifies the hiring manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Brand Recruitment Campaign
  description: Creates a LinkedIn sponsored job posting for a Nestlé role, syncs the requisition to Workday, and notifies the hiring manager in Microsoft Teams.
  tags:
  - hr
  - recruitment
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: launch-recruitment-post
      description: Given a Workday requisition ID and hiring manager ID, create a LinkedIn job posting and notify the hiring manager.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      - name: hiring_manager_id
        in: body
        type: string
        description: The Workday worker ID of the hiring manager.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{hiring_manager_id}}'
      - name: create-job-post
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{get-requisition.job_title}}'
          description: '{{get-requisition.job_description}}'
          location: '{{get-requisition.location}}'
          company_id: nestle
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-manager.work_email}}'
          text: 'Your requisition ''{{get-requisition.job_title}}'' is now live on LinkedIn. Job post ID: {{create-job-post.post_id}}. Link: {{create-job-post.apply_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: requisitions
      path: /jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /simpleJobPostings
      operations:
      - name: create-job-posting
        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
Open in Framework → View in Fleet → linkedin-brand-recruitment-campaign.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 17
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-17
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nestle-workflow-17.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 15
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-15
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-15.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 29
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-29
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nestle-workflow-29.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 28
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-28
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nestle.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nestle-workflow-28.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 14
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-14
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nestle-workflow-14.yml

Retrieves warehouse locations from Oracle Cloud, calculates optimal delivery routes using Google Maps Distance Matrix, and updates the SAP transportation plan with route assignments and ETAs.

naftiko: '0.5'
info:
  label: Google Maps Distribution Network Optimizer
  description: Retrieves warehouse locations from Oracle Cloud, calculates optimal delivery routes using Google Maps Distance Matrix, and updates the SAP transportation plan with route assignments and ETAs.
  tags:
  - supply-chain
  - logistics
  - oracle-cloud
  - google-maps
  - sap
capability:
  exposes:
  - type: mcp
    namespace: distribution-routing
    port: 8080
    tools:
    - name: optimize-delivery-routes
      description: Given a distribution center code and delivery date, retrieve pending deliveries from Oracle, calculate optimal routes via Google Maps, and update SAP transportation.
      inputParameters:
      - name: dc_code
        in: body
        type: string
        description: The distribution center code.
      - name: delivery_date
        in: body
        type: string
        description: The delivery date in YYYY-MM-DD format.
      steps:
      - name: get-pending-deliveries
        type: call
        call: oracle.get-pending-shipments
        with:
          warehouse_code: '{{dc_code}}'
          ship_date: '{{delivery_date}}'
      - name: calculate-routes
        type: call
        call: gmaps.distance-matrix
        with:
          origins: '{{get-pending-deliveries.origin_address}}'
          destinations: '{{get-pending-deliveries.destination_addresses}}'
          departure_time: '{{delivery_date}}T06:00:00Z'
      - name: update-transport-plan
        type: call
        call: sap.update-shipment-routes
        with:
          dc_code: '{{dc_code}}'
          delivery_date: '{{delivery_date}}'
          route_assignments: '{{calculate-routes.optimal_sequence}}'
          total_distance_km: '{{calculate-routes.total_distance}}'
          estimated_duration: '{{calculate-routes.total_duration}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://nestle-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: shipments
      path: /shipments?q=WarehouseCode={{warehouse_code}};ShipDate={{ship_date}};Status=PENDING
      inputParameters:
      - name: warehouse_code
        in: query
      - name: ship_date
        in: query
      operations:
      - name: get-pending-shipments
        method: GET
  - type: http
    namespace: gmaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: bearer
      token: $secrets.google_maps_api_key
    resources:
    - name: distance-matrix
      path: /distancematrix/json?origins={{origins}}&destinations={{destinations}}&departure_time={{departure_time}}
      inputParameters:
      - name: origins
        in: query
      - name: destinations
        in: query
      - name: departure_time
        in: query
      operations:
      - name: distance-matrix
        method: GET
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_SHIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: shipments
      path: /A_ShipmentRoute
      operations:
      - name: update-shipment-routes
        method: POST
Open in Framework → View in Fleet → google-maps-distribution-network-optimizer.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 5
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-5.yml

Retrieves product recipe data from SAP, cross-references allergen declarations with the regulatory database in Informatica, and creates a ServiceNow compliance task if discrepancies are detected.

naftiko: '0.5'
info:
  label: Allergen Label Compliance Checker
  description: Retrieves product recipe data from SAP, cross-references allergen declarations with the regulatory database in Informatica, and creates a ServiceNow compliance task if discrepancies are detected.
  tags:
  - quality
  - food-safety
  - sap
  - informatica
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: allergen-compliance
    port: 8080
    tools:
    - name: check-allergen-compliance
      description: Given a material number, retrieve recipe allergens from SAP, validate against Informatica regulatory data, and flag issues in ServiceNow.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the finished product.
      - name: target_market
        in: body
        type: string
        description: The target market country code (ISO 3166).
      steps:
      - name: get-recipe
        type: call
        call: sap.get-recipe-allergens
        with:
          material: '{{material_number}}'
      - name: get-regulations
        type: call
        call: informatica.get-allergen-reqs
        with:
          country: '{{target_market}}'
          allergens: '{{get-recipe.allergen_list}}'
      - name: create-compliance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Allergen compliance review: {{material_number}} for {{target_market}}'
          description: 'Material: {{material_number}}. Allergens declared: {{get-recipe.allergen_list}}. Target market: {{target_market}}. Regulatory requirements: {{get-regulations.required_declarations}}. Gaps: {{get-regulations.gaps}}.'
          assigned_group: Regulatory_Affairs
          category: allergen_compliance
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: recipes
      path: /A_RecipeAllergen?$filter=Material eq '{{material}}'
      inputParameters:
      - name: material
        in: query
      operations:
      - name: get-recipe-allergens
        method: GET
  - type: http
    namespace: informatica
    baseUri: https://nestle.informaticacloud.com/active-bpel/rt/v1
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: allergen-regulations
      path: /regulatory/allergens
      operations:
      - name: get-allergen-reqs
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → allergen-label-compliance-checker.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 4
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-4
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FOOD-M
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nestle.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nestle-workflow-4.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 5
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-5
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nestle-workflow-5.yml

Retrieves quality inspection results from SAP QM, logs findings to a Google Sheets tracker, and creates a ServiceNow follow-up task if any results are out of specification.

naftiko: '0.5'
info:
  label: Factory Quality Inspection Results Sync
  description: Retrieves quality inspection results from SAP QM, logs findings to a Google Sheets tracker, and creates a ServiceNow follow-up task if any results are out of specification.
  tags:
  - quality
  - manufacturing
  - sap
  - google-sheets
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: quality-inspection
    port: 8080
    tools:
    - name: sync-inspection-results
      description: Given an SAP inspection lot number, retrieve results, log to Google Sheets, and create a ServiceNow task if out-of-spec.
      inputParameters:
      - name: inspection_lot
        in: body
        type: string
        description: The SAP inspection lot number.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets ID for the quality tracker.
      steps:
      - name: get-results
        type: call
        call: sap.get-inspection-results
        with:
          inspection_lot: '{{inspection_lot}}'
      - name: log-results
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: InspectionLog!A:G
          values: '{{inspection_lot}},{{get-results.material}},{{get-results.plant}},{{get-results.inspection_date}},{{get-results.overall_result}},{{get-results.defect_count}},{{get-results.inspector}}'
      - name: create-followup
        type: call
        call: servicenow.create-task
        with:
          short_description: 'QC follow-up: Inspection lot {{inspection_lot}} — {{get-results.overall_result}}'
          description: 'Material: {{get-results.material}}. Plant: {{get-results.plant}}. Result: {{get-results.overall_result}}. Defects: {{get-results.defect_count}}. Inspector: {{get-results.inspector}}.'
          assigned_group: Quality_Operations
          category: quality_inspection
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: inspection-lots
      path: /A_InspectionLot('{{inspection_lot}}')/to_InspectionResult
      inputParameters:
      - name: inspection_lot
        in: path
      operations:
      - name: get-inspection-results
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → factory-quality-inspection-results-sync.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 4
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-4.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 6
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-6.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 7
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-7
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: food-manufacturing
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-7.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 6
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-6
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FOOD
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nestle.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nestle-workflow-6.yml

Exports a Qlik Sense dashboard visualization as a PDF for a specified app and sheet. Used by Nestlé business intelligence teams to distribute manufacturing KPI reports.

naftiko: '0.5'
info:
  label: Qlik Sense Dashboard Export
  description: Exports a Qlik Sense dashboard visualization as a PDF for a specified app and sheet. Used by Nestlé business intelligence teams to distribute manufacturing KPI reports.
  tags:
  - analytics
  - reporting
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: export-dashboard
      description: Export a Qlik Sense sheet as PDF given an app ID and sheet ID.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense app GUID.
      - name: sheet_id
        in: body
        type: string
        description: The sheet ID within the app.
      call: qlik.export-sheet
      with:
        app_id: '{{app_id}}'
        sheet_id: '{{sheet_id}}'
      outputParameters:
      - name: download_url
        type: string
        mapping: $.downloadUrl
      - name: file_size
        type: string
        mapping: $.fileSize
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://nestle.us.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_api_key
    resources:
    - name: exports
      path: /apps/{{app_id}}/sheets/{{sheet_id}}/export/pdf
      inputParameters:
      - name: app_id
        in: path
      - name: sheet_id
        in: path
      operations:
      - name: export-sheet
        method: POST
Open in Framework → View in Fleet → qlik-sense-dashboard-export.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 7
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-7.yml

When a product quality issue triggers a recall, retrieves the affected batch from SAP, creates a critical ServiceNow incident, and broadcasts an alert to the crisis management Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Product Recall Notification Orchestrator
  description: When a product quality issue triggers a recall, retrieves the affected batch from SAP, creates a critical ServiceNow incident, and broadcasts an alert to the crisis management Microsoft Teams channel.
  tags:
  - quality
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: initiate-recall-notification
      description: Given a batch number and material, retrieve batch details from SAP, create a critical incident in ServiceNow, and alert the crisis team in Microsoft Teams.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number of the affected product.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: issue_description
        in: body
        type: string
        description: Description of the quality issue.
      steps:
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
          material_number: '{{material_number}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'RECALL: {{get-batch.material_description}} batch {{batch_number}}'
          description: 'Quality issue: {{issue_description}}. Material: {{material_number}}. Batch: {{batch_number}}. Production date: {{get-batch.production_date}}. Quantity: {{get-batch.batch_quantity}} {{get-batch.unit}}. Plant: {{get-batch.plant}}.'
          priority: '1'
          category: product_recall
          assigned_group: Quality_Crisis
      - name: alert-crisis-team
        type: call
        call: msteams.post-channel
        with:
          team_id: crisis-management-team
          channel_id: product-recalls
          text: 'PRODUCT RECALL INITIATED: {{get-batch.material_description}} (batch {{batch_number}}). Issue: {{issue_description}}. Incident: {{create-incident.number}}. Immediate action required.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')
      inputParameters:
      - name: material_number
        in: path
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nestle.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: post-channel
        method: POST
Open in Framework → View in Fleet → product-recall-notification-orchestrator.yml

Queries Datadog for infrastructure host health metrics at a Nestlé manufacturing facility, returning CPU, memory, and alert counts for the last hour.

naftiko: '0.5'
info:
  label: Datadog Factory System Health
  description: Queries Datadog for infrastructure host health metrics at a Nestlé manufacturing facility, returning CPU, memory, and alert counts for the last hour.
  tags:
  - manufacturing
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: factory-monitoring
    port: 8080
    tools:
    - name: get-host-metrics
      description: Retrieve CPU, memory, and active alert counts for a Datadog-monitored factory host.
      inputParameters:
      - name: host_name
        in: body
        type: string
        description: The Datadog hostname for the factory system.
      call: datadog.get-host-totals
      with:
        filter: '{{host_name}}'
      outputParameters:
      - name: cpu_usage
        type: string
        mapping: $.host_list[0].metrics.cpu
      - name: memory_usage
        type: string
        mapping: $.host_list[0].metrics.memory
      - name: active_alerts
        type: string
        mapping: $.host_list[0].alerts_count
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: hosts
      path: /hosts?filter={{filter}}
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: get-host-totals
        method: GET
Open in Framework → View in Fleet → datadog-factory-system-health.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 3
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-3.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 2
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-2
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nestle.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nestle-workflow-2.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 3
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-3
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#food-manufacturing'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nestle-workflow-3.yml

Pulls market share data from Circana (formerly IRI) for a specified Nestlé product category, geography, and time period. Used by brand strategy teams to benchmark competitive positioning.

naftiko: '0.5'
info:
  label: Circana Market Share Report
  description: Pulls market share data from Circana (formerly IRI) for a specified Nestlé product category, geography, and time period. Used by brand strategy teams to benchmark competitive positioning.
  tags:
  - analytics
  - market-research
  - circana
capability:
  exposes:
  - type: mcp
    namespace: market-intelligence
    port: 8080
    tools:
    - name: get-market-share
      description: Query Circana for market share data by category, geography, and time period.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The product category identifier.
      - name: geography
        in: body
        type: string
        description: The geographic market code.
      - name: period
        in: body
        type: string
        description: The time period (e.g. 4W, 12W, 52W).
      call: circana.get-share-data
      with:
        category: '{{category}}'
        geography: '{{geography}}'
        period: '{{period}}'
      outputParameters:
      - name: dollar_share
        type: string
        mapping: $.data.dollar_share
      - name: unit_share
        type: string
        mapping: $.data.unit_share
      - name: share_change
        type: string
        mapping: $.data.share_change_vs_ya
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: market-share
      path: /market-measurement/share
      operations:
      - name: get-share-data
        method: POST
Open in Framework → View in Fleet → circana-market-share-report.yml

Pulls demand forecast data from Azure Databricks, converts to a planned order in SAP, and notifies the production planning team in Microsoft Teams with the scheduling details.

naftiko: '0.5'
info:
  label: Demand Forecast to Production Planning
  description: Pulls demand forecast data from Azure Databricks, converts to a planned order in SAP, and notifies the production planning team in Microsoft Teams with the scheduling details.
  tags:
  - supply-chain
  - forecasting
  - azure-databricks
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: demand-planning
    port: 8080
    tools:
    - name: convert-forecast-to-plan
      description: Given a forecast run ID and material number, retrieve the forecast from Databricks, create a planned order in SAP, and notify the planning team.
      inputParameters:
      - name: forecast_run_id
        in: body
        type: string
        description: The Databricks forecast run identifier.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      steps:
      - name: get-forecast
        type: call
        call: databricks.get-forecast
        with:
          run_id: '{{forecast_run_id}}'
          material: '{{material_number}}'
      - name: create-planned-order
        type: call
        call: sap.create-planned-order
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{get-forecast.recommended_quantity}}'
          start_date: '{{get-forecast.production_start}}'
          end_date: '{{get-forecast.production_end}}'
      - name: notify-planners
        type: call
        call: msteams.post-channel
        with:
          team_id: supply-planning
          channel_id: production-orders
          text: 'Planned order created from forecast: Material {{material_number}} at plant {{plant_code}}. Qty: {{get-forecast.recommended_quantity}}. Production window: {{get-forecast.production_start}} to {{get-forecast.production_end}}. SAP order: {{create-planned-order.order_number}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://nestle-adb.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/get-output?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_PLANNED_ORDERS
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: planned-orders
      path: /A_PlannedOrder
      operations:
      - name: create-planned-order
        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: post-channel
        method: POST
Open in Framework → View in Fleet → demand-forecast-to-production-planning.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 2
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-2.yml

Searches Nestlé's Confluence knowledge base for standard operating procedures relevant to a manufacturing query. Returns matching page titles, excerpts, and links.

naftiko: '0.5'
info:
  label: Confluence Factory SOP Search
  description: Searches Nestlé's Confluence knowledge base for standard operating procedures relevant to a manufacturing query. Returns matching page titles, excerpts, and links.
  tags:
  - manufacturing
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: factory-knowledge
    port: 8080
    tools:
    - name: search-sops
      description: Search Confluence for factory standard operating procedures by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword or phrase.
      - name: space_key
        in: body
        type: string
        description: The Confluence space key for the factory SOP library.
      call: confluence.search
      with:
        cql: space={{space_key}} AND type=page AND text~"{{query}}"
      outputParameters:
      - name: results
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://nestle.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-factory-sop-search.yml

Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.

naftiko: '0.5'
info:
  label: Nestle Workflow 1
  description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
  tags:
  - food-manufacturing
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: food-manufacturing
    port: 8080
    tools:
    - name: nestle-workflow-1
      description: Orchestrates food-manufacturing operations including data retrieval, processing, and automated notification for Nestle.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nestle-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nestle-ops
    baseUri: https://api.nestle.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nestle.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nestle-workflow-1.yml

Retrieves operational data for Nestle food-manufacturing workflows.

naftiko: '0.5'
info:
  label: Nestle Data Lookup 1
  description: Retrieves operational data for Nestle food-manufacturing workflows.
  tags:
  - food-manufacturing
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nestle-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Nestle food-manufacturing workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nestle-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nestle-data
    baseUri: https://api.nestle.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nestle_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → nestle-data-lookup-1.yml

Collects carbon emissions data from SAP environmental compliance, enriches with Teradata energy consumption trends, and publishes a summary report to a SharePoint sustainability library.

naftiko: '0.5'
info:
  label: Sustainability Metrics Reporting Pipeline
  description: Collects carbon emissions data from SAP environmental compliance, enriches with Teradata energy consumption trends, and publishes a summary report to a SharePoint sustainability library.
  tags:
  - sustainability
  - reporting
  - sap
  - teradata
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: sustainability-reporting
    port: 8080
    tools:
    - name: generate-sustainability-report
      description: Given a plant code and reporting period, collect emissions data from SAP, energy trends from Teradata, and upload the summary to SharePoint.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The Nestlé plant code.
      - name: reporting_period
        in: body
        type: string
        description: The reporting period in YYYY-QN format (e.g. 2026-Q1).
      steps:
      - name: get-emissions
        type: call
        call: sap.get-emissions
        with:
          plant: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: get-energy-trends
        type: call
        call: teradata.query-energy
        with:
          plant_code: '{{plant_code}}'
          period: '{{reporting_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: sustainability-reports
          file_path: '{{plant_code}}/{{reporting_period}}_sustainability_summary.json'
          content: 'Plant: {{plant_code}}, Period: {{reporting_period}}, CO2e: {{get-emissions.total_co2e}} tonnes, Scope1: {{get-emissions.scope1}}, Scope2: {{get-emissions.scope2}}, Energy: {{get-energy-trends.total_kwh}} kWh, Renewable%: {{get-energy-trends.renewable_pct}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nestle-s4.sap.com/sap/opu/odata/sap/API_ENVIRONMENT_HEALTH_SAFETY
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: emissions
      path: /EmissionsData?$filter=Plant eq '{{plant}}' and Period eq '{{period}}'
      inputParameters:
      - name: plant
        in: query
      - name: period
        in: query
      operations:
      - name: get-emissions
        method: GET
  - type: http
    namespace: teradata
    baseUri: https://nestle-tdrest.teradata.com/api/query/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /systems/nestle_edw/queries
      operations:
      - name: query-energy
        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:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sustainability-metrics-reporting-pipeline.yml

Launches a new Marketo email campaign for a product line, updates the associated Salesforce campaign record with launch details, and posts confirmation to the marketing Teams channel.

naftiko: '0.5'
info:
  label: Marketo Campaign Launch Orchestrator
  description: Launches a new Marketo email campaign for a product line, updates the associated Salesforce campaign record with launch details, and posts confirmation to the marketing Teams channel.
  tags:
  - marketing
  - marketo
  - salesforce
  - campaign-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: campaign-ops
    port: 8080
    tools:
    - name: launch-marketo-campaign
      description: Given a Marketo program ID, Salesforce campaign ID, and launch datetime, activate the Marketo program, update the Salesforce campaign to Active, and notify the marketing team in Teams. Use for product launch and promotional email campaigns.
      inputParameters:
      - name: marketo_program_id
        in: body
        type: string
        description: The Marketo program ID to activate.
      - name: salesforce_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID to sync launch status.
      - name: launch_datetime
        in: body
        type: string
        description: The scheduled launch datetime in ISO 8601 format.
      steps:
      - name: activate-program
        type: call
        call: marketo.activate-program
        with:
          program_id: '{{marketo_program_id}}'
      - name: update-sf-campaign
        type: call
        call: salesforce-camp.update-campaign
        with:
          campaign_id: '{{salesforce_campaign_id}}'
          status: Active
          start_date: '{{launch_datetime}}'
      - name: notify-marketing
        type: call
        call: msteams-camp.post-message
        with:
          channel_id: $secrets.marketing_channel_id
          text: 'Campaign launched: Marketo program {{marketo_program_id}} activated for {{launch_datetime}}. Salesforce campaign {{salesforce_campaign_id}} updated.'
  consumes:
  - type: http
    namespace: marketo
    baseUri: https://nike.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: programs
      path: /programs/{{program_id}}/approve.json
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: activate-program
        method: POST
  - type: http
    namespace: salesforce-camp
    baseUri: https://nike.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - type: http
    namespace: msteams-camp
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → marketo-campaign-launch-orchestrator.yml

Monitors Axway API gateway traffic patterns in Snowflake, flags anomalies, creates ServiceNow incidents, and alerts the API platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Axway API Gateway Traffic Monitor
  description: Monitors Axway API gateway traffic patterns in Snowflake, flags anomalies, creates ServiceNow incidents, and alerts the API platform team via Microsoft Teams.
  tags:
  - api-management
  - axway
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: axway_api_gateway_tr
    port: 8080
    tools:
    - name: axway-api
      description: Given an execution date, run the axway api gateway traffic monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AXWAY_API_GATEWAY_TRAFFIC_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AXWAY_API_GATEWAY_TRAFFIC_MONI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: api-management
          short_description: Axway API Gateway Traffic Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_axway_api_gateway_tr_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → axway-api-gateway-traffic-monitor.yml

Monitors Ollama-powered internal AI assistant usage and performance in Snowflake, tracks adoption trends, and distributes reports to IT leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Ollama Internal AI Assistant Monitor
  description: Monitors Ollama-powered internal AI assistant usage and performance in Snowflake, tracks adoption trends, and distributes reports to IT leadership via Microsoft Teams.
  tags:
  - ai
  - ollama
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ollama_internal_ai_a
    port: 8080
    tools:
    - name: ollama-internal
      description: Given an execution date, run the ollama internal ai assistant monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.OLLAMA_INTERNAL_AI_ASSISTANT_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.OLLAMA_INTERNAL_AI_ASSISTANT_M_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_ollama_internal_ai_a_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ollama-internal-ai-assistant-monitor.yml

Monitors Nike Direct inventory levels in Snowflake, triggers replenishment orders in SAP when below thresholds, and notifies the planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Nike Direct Inventory Replenishment Trigger
  description: Monitors Nike Direct inventory levels in Snowflake, triggers replenishment orders in SAP when below thresholds, and notifies the planning team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nike_direct_inventor
    port: 8080
    tools:
    - name: nike-direct
      description: Given an execution date, run the nike direct inventory replenishment trigger process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NIKE_DIRECT_INVENTORY_REPLENISHMENT_TRIG LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NIKE_DIRECT_INVENTORY_REPLENIS_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_nike_direct_inventor_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nike-direct-inventory-replenishment-trigger.yml

Retrieves a user session from DynamoDB for the Nike digital platform.

naftiko: '0.5'
info:
  label: DynamoDB Session Lookup
  description: Retrieves a user session from DynamoDB for the Nike digital platform.
  tags:
  - data
  - dynamodb
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: session-mgmt
    port: 8080
    tools:
    - name: get-session
      description: Given a session ID, retrieve session data from DynamoDB. Use for customer experience investigations.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: The session ID.
      call: dynamodb.get-item
      with:
        session_id: '{{session_id}}'
      outputParameters:
      - name: user_id
        type: string
        mapping: $.Item.user_id.S
      - name: platform
        type: string
        mapping: $.Item.platform.S
  consumes:
  - type: http
    namespace: dynamodb
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: X-Amz-Security-Token
      value: $secrets.aws_session_token
      placement: header
    resources:
    - name: items
      path: /
      operations:
      - name: get-item
        method: POST
Open in Framework → View in Fleet → dynamodb-session-lookup.yml

Validates Figma design files against Nike brand guidelines in Snowflake, flags non-compliant assets, creates Jira remediation tasks, and notifies the brand team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Figma Brand Asset Compliance Checker
  description: Validates Figma design files against Nike brand guidelines in Snowflake, flags non-compliant assets, creates Jira remediation tasks, and notifies the brand team via Microsoft Teams.
  tags:
  - design
  - figma
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: figma_brand_asset_co
    port: 8080
    tools:
    - name: figma-brand
      description: Given an execution date, run the figma brand asset compliance checker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.FIGMA_BRAND_ASSET_COMPLIANCE_CHECKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.FIGMA_BRAND_ASSET_COMPLIANCE_C_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Figma Brand Asset Compliance Checker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_figma_brand_asset_co_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → figma-brand-asset-compliance-checker.yml

Initiates SailPoint access review campaigns, logs certification status in Snowflake, creates ServiceNow follow-up tasks, and notifies the IAM team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SailPoint Access Review Campaign
  description: Initiates SailPoint access review campaigns, logs certification status in Snowflake, creates ServiceNow follow-up tasks, and notifies the IAM team via Microsoft Teams.
  tags:
  - security
  - sailpoint
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sailpoint_access_rev
    port: 8080
    tools:
    - name: sailpoint-access
      description: Given an execution date, run the sailpoint access review campaign process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAILPOINT_ACCESS_REVIEW_CAMPAIGN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAILPOINT_ACCESS_REVIEW_CAMPAI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: SailPoint Access Review Campaign processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sailpoint_access_rev_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sailpoint-access-review-campaign.yml

Reviews SAP Concur travel expenses for athlete-related travel compliance, logs in Snowflake, creates ServiceNow exceptions, and notifies the finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Athlete Travel Compliance
  description: Reviews SAP Concur travel expenses for athlete-related travel compliance, logs in Snowflake, creates ServiceNow exceptions, and notifies the finance team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_concur_athlete_t
    port: 8080
    tools:
    - name: sap-concur
      description: Given an execution date, run the sap concur athlete travel compliance process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CONCUR_ATHLETE_TRAVEL_COMPLIANCE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CONCUR_ATHLETE_TRAVEL_COMP_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Concur Athlete Travel Compliance processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_concur_athlete_t_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-athlete-travel-compliance.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, assigns Okta application groups, and sends a Teams welcome message.

naftiko: '0.5'
info:
  label: Workday New Hire Onboarding Orchestrator
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, assigns Okta application groups, and sends a Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-365
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: 'Given a Workday employee ID and start date, orchestrate the full onboarding sequence: open a ServiceNow ticket, provision Microsoft 365, assign Okta groups, and send a Teams welcome. Invoke when a new hire is created in Workday.'
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee's first day in YYYY-MM-DD format.
      - name: job_family
        in: body
        type: string
        description: The job family or function (e.g., Engineering, Retail, Marketing) to determine Okta group assignment.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: open-snow-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_to: IT_Onboarding
      - name: provision-m365
        type: call
        call: msgraph.create-user
        with:
          display_name: '{{get-employee.full_name}}'
          mail_nickname: '{{get-employee.user_principal_name}}'
          department: '{{get-employee.department}}'
      - name: assign-okta-groups
        type: call
        call: okta.assign-user-to-group
        with:
          login: '{{get-employee.work_email}}'
          job_family: '{{job_family}}'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to Nike, {{get-employee.first_name}}! Your onboarding ticket: {{open-snow-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: /nike/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nike.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: okta
    baseUri: https://nike.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-groups
      path: /users
      operations:
      - name: assign-user-to-group
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-onboarding-orchestrator.yml

Lists all active Okta users assigned to a specified application group and cross-references with Workday to identify stale or orphaned accounts for quarterly access reviews.

naftiko: '0.5'
info:
  label: Okta Access Review and Compliance Audit
  description: Lists all active Okta users assigned to a specified application group and cross-references with Workday to identify stale or orphaned accounts for quarterly access reviews.
  tags:
  - identity
  - security
  - okta
  - workday
  - access-review
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: identity-review
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta group ID and app name, list all group members and compare against active Workday workers to identify orphaned accounts. Generates a compliance report for quarterly reviews.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Okta group ID to audit.
      - name: app_name
        in: body
        type: string
        description: Application name for audit context.
      steps:
      - name: get-group-members
        type: call
        call: okta-audit.get-group-members
        with:
          group_id: '{{group_id}}'
      - name: get-active-workers
        type: call
        call: workday-audit.list-workers
  consumes:
  - type: http
    namespace: okta-audit
    baseUri: https://nike.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-members
        method: GET
  - type: http
    namespace: workday-audit
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: active-workers
      path: /nike/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → okta-access-review-and-compliance-audit.yml

Monitors AWS Lambda function errors in Snowflake, creates ServiceNow incidents for recurring failures, and alerts the cloud engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: AWS Lambda Function Error Handler
  description: Monitors AWS Lambda function errors in Snowflake, creates ServiceNow incidents for recurring failures, and alerts the cloud engineering team via Microsoft Teams.
  tags:
  - cloud
  - amazon-web-services
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aws_lambda_function_
    port: 8080
    tools:
    - name: aws-lambda
      description: Given an execution date, run the aws lambda function error handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AWS_LAMBDA_FUNCTION_ERROR_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AWS_LAMBDA_FUNCTION_ERROR_HAND_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: cloud
          short_description: AWS Lambda Function Error Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_aws_lambda_function__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aws-lambda-function-error-handler.yml

Processes Microsoft Sentinel security alerts, logs in Snowflake, creates ServiceNow incidents, and alerts the SOC team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Security Alert Handler
  description: Processes Microsoft Sentinel security alerts, logs in Snowflake, creates ServiceNow incidents, and alerts the SOC team via Microsoft Teams.
  tags:
  - security
  - microsoft-sentinel
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: microsoft_sentinel_s
    port: 8080
    tools:
    - name: microsoft-sentinel
      description: Given an execution date, run the microsoft sentinel security alert handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.MICROSOFT_SENTINEL_SECURITY_ALERT_HANDLE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.MICROSOFT_SENTINEL_SECURITY_AL_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: Microsoft Sentinel Security Alert Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_microsoft_sentinel_s_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-sentinel-security-alert-handler.yml

Fetches the active sprint from Jira for a given project, summarizes open, in-progress, and done issues, and posts the report to the engineering team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Status Report
  description: Fetches the active sprint from Jira for a given project, summarizes open, in-progress, and done issues, and posts the report to the engineering team's Microsoft Teams channel.
  tags:
  - devops
  - agile
  - jira
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: get-sprint-status
      description: Given a Jira project key, fetch the active sprint and summarize issues by status, then post to the engineering Teams channel. Use for daily standups or weekly sprint reviews.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key (e.g., TECH, PLATFORM).
      steps:
      - name: get-active-sprint
        type: call
        call: jira-sprint.get-active-sprint
        with:
          project_key: '{{project_key}}'
      - name: search-sprint-issues
        type: call
        call: jira-sprint.search-issues
        with:
          sprint_id: '{{get-active-sprint.sprint_id}}'
      - name: post-report
        type: call
        call: msteams-sprint.post-message
        with:
          channel_id: $secrets.engineering_channel_id
          text: 'Sprint {{get-active-sprint.sprint_name}}: {{search-sprint-issues.todo_count}} To Do, {{search-sprint-issues.inprogress_count}} In Progress, {{search-sprint-issues.done_count}} Done.'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /project/{{project_key}}/sprints
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-active-sprint
        method: GET
    - name: issues
      path: /search
      operations:
      - name: search-issues
        method: POST
  - type: http
    namespace: msteams-sprint
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-status-report.yml

When a change request is submitted in ServiceNow, notifies approvers in Microsoft Teams and awaits a response before proceeding with the deployment window.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Workflow
  description: When a change request is submitted in ServiceNow, notifies approvers in Microsoft Teams and awaits a response before proceeding with the deployment window.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: itsm-change
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, risk level, and planned start datetime, create a ServiceNow change request and notify the CAB approvers in Teams. Use before any production deployment or infrastructure change.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Human-readable description of the proposed change.
      - name: risk
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: planned_start
        in: body
        type: string
        description: Planned start datetime in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow-chg.create-change
        with:
          short_description: '{{change_description}}'
          risk: '{{risk}}'
          start_date: '{{planned_start}}'
      - name: notify-cab
        type: call
        call: msteams-chg.post-message
        with:
          channel_id: $secrets.cab_channel_id
          text: 'Change Request {{create-change.number}} submitted. Risk: {{risk}}. Planned: {{planned_start}}. Description: {{change_description}}'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://nike.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-chg
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-workflow.yml

Returns active Nike headcount grouped by cost center and department from Workday for workforce planning and finance allocation reviews.

naftiko: '0.5'
info:
  label: Workday Headcount by Cost Center
  description: Returns active Nike headcount grouped by cost center and department from Workday for workforce planning and finance allocation reviews.
  tags:
  - hr
  - workforce-planning
  - reporting
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns all active Nike employees grouped by cost center and department from Workday. Use for headcount planning, budget allocation, and executive workforce reviews.
      call: workday-hc.list-workers
      outputParameters:
      - name: workers
        type: array
        mapping: $.data[*]
  consumes:
  - type: http
    namespace: workday-hc
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /nike/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → workday-headcount-by-cost-center.yml

Compares Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Headcount vs Plan Tracker
  description: Compares Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_headcount_vs
    port: 8080
    tools:
    - name: workday-headcount
      description: Given an execution date, run the workday headcount vs plan tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_TRAC_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_headcount_vs_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-vs-plan-tracker.yml

When an Apache Airflow DAG fails, logs error details in Snowflake, creates a ServiceNow incident, and alerts the data engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Apache Airflow DAG Failure Handler
  description: When an Apache Airflow DAG fails, logs error details in Snowflake, creates a ServiceNow incident, and alerts the data engineering team via Microsoft Teams.
  tags:
  - data-engineering
  - apache-airflow
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: apache_airflow_dag_f
    port: 8080
    tools:
    - name: apache-airflow
      description: Given an execution date, run the apache airflow dag failure handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.APACHE_AIRFLOW_DAG_FAILURE_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.APACHE_AIRFLOW_DAG_FAILURE_HAN_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: data-engineering
          short_description: Apache Airflow DAG Failure Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_apache_airflow_dag_f_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → apache-airflow-dag-failure-handler.yml

When an employee changes roles or departments in Workday, updates their Okta group memberships for the new access profile and creates a ServiceNow change record.

naftiko: '0.5'
info:
  label: Workday Role Change Access Sync
  description: When an employee changes roles or departments in Workday, updates their Okta group memberships for the new access profile and creates a ServiceNow change record.
  tags:
  - hr
  - identity
  - role-change
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-identity
    port: 8080
    tools:
    - name: sync-role-change-access
      description: Given a Workday employee ID and new role details, update Okta group memberships to align with the new access profile and log a ServiceNow change record. Invoke when an employee changes position or department in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role changed.
      - name: new_role
        in: body
        type: string
        description: The new job title.
      - name: new_department
        in: body
        type: string
        description: The new department.
      steps:
      - name: get-employee
        type: call
        call: workday-role.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta-role.update-user-groups
        with:
          login: '{{get-employee.work_email}}'
          department: '{{new_department}}'
      - name: log-change
        type: call
        call: servicenow-role.create-change
        with:
          short_description: 'Role change: {{get-employee.full_name}} → {{new_role}} in {{new_department}}'
          category: hr_role_change
  consumes:
  - type: http
    namespace: workday-role
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /nike/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-role
    baseUri: https://nike.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{login}}/groups
      inputParameters:
      - name: login
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: servicenow-role
    baseUri: https://nike.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → workday-role-change-access-sync.yml

Audits Google Tag Manager tags on Nike.com for compliance, logs in Snowflake, and notifies the web analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Tag Manager Nike.com Audit
  description: Audits Google Tag Manager tags on Nike.com for compliance, logs in Snowflake, and notifies the web analytics team via Microsoft Teams.
  tags:
  - analytics
  - google-tag-manager
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: google_tag_manager_n
    port: 8080
    tools:
    - name: google-tag
      description: Given an execution date, run the google tag manager nike.com audit process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GOOGLE_TAG_MANAGER_NIKE_COM_AUDIT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GOOGLE_TAG_MANAGER_NIKE_COM_AU_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_google_tag_manager_n_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-tag-manager-nike-com-audit.yml

Analyzes Zendesk ticket sentiment in Snowflake, escalates high-negativity patterns, creates ServiceNow cases, and alerts the customer experience team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Zendesk Customer Sentiment Escalation
  description: Analyzes Zendesk ticket sentiment in Snowflake, escalates high-negativity patterns, creates ServiceNow cases, and alerts the customer experience team via Microsoft Teams.
  tags:
  - support
  - zendesk
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: zendesk_customer_sen
    port: 8080
    tools:
    - name: zendesk-customer
      description: Given an execution date, run the zendesk customer sentiment escalation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ZENDESK_CUSTOMER_SENTIMENT_ESCALATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ZENDESK_CUSTOMER_SENTIMENT_ESC_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: support
          short_description: Zendesk Customer Sentiment Escalation processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_zendesk_customer_sen_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → zendesk-customer-sentiment-escalation.yml

At the start of a performance review cycle, fetches eligible employees from Workday and creates individual performance review tasks in ServiceNow for each manager.

naftiko: '0.5'
info:
  label: Workday Performance Review Campaign Launch
  description: At the start of a performance review cycle, fetches eligible employees from Workday and creates individual performance review tasks in ServiceNow for each manager.
  tags:
  - hr
  - performance-management
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-performance-reviews
      description: Given a review cycle name and department, fetch eligible employees from Workday and create review tasks in ServiceNow for each manager. Use to kick off annual or mid-year performance cycles.
      inputParameters:
      - name: review_cycle
        in: body
        type: string
        description: Performance review cycle name (e.g., 2026-Annual).
      - name: department
        in: body
        type: string
        description: Department to scope the review launch.
      steps:
      - name: get-eligible-employees
        type: call
        call: workday-perf.get-workers-by-department
        with:
          department: '{{department}}'
      - name: create-review-tasks
        type: call
        call: servicenow-perf.create-task
        with:
          short_description: 'Performance reviews {{review_cycle}}: {{department}}'
          category: hr_performance_review
  consumes:
  - type: http
    namespace: workday-perf
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers-by-department
      path: /nike/workers
      inputParameters:
      - name: department
        in: query
      operations:
      - name: get-workers-by-department
        method: GET
  - type: http
    namespace: servicenow-perf
    baseUri: https://nike.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
Open in Framework → View in Fleet → workday-performance-review-campaign-launch.yml

Analyzes Paradox recruiting chatbot engagement metrics in Snowflake, identifies conversion bottlenecks, and notifies the talent acquisition team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Paradox Recruiting Chatbot Analytics
  description: Analyzes Paradox recruiting chatbot engagement metrics in Snowflake, identifies conversion bottlenecks, and notifies the talent acquisition team via Microsoft Teams.
  tags:
  - hr
  - recruiting
  - paradox
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: paradox_recruiting_c
    port: 8080
    tools:
    - name: paradox-recruiting
      description: Given an execution date, run the paradox recruiting chatbot analytics process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PARADOX_RECRUITING_CHATBOT_ANALYTICS LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PARADOX_RECRUITING_CHATBOT_ANA_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_paradox_recruiting_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → paradox-recruiting-chatbot-analytics.yml

Monitors athlete endorsement contract milestones in Snowflake, flags upcoming renewals, creates Jira tasks, and notifies the sports marketing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Athlete Endorsement Contract Tracker
  description: Monitors athlete endorsement contract milestones in Snowflake, flags upcoming renewals, creates Jira tasks, and notifies the sports marketing team via Microsoft Teams.
  tags:
  - marketing
  - contracts
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athlete_endorsement_
    port: 8080
    tools:
    - name: athlete-endorsement
      description: Given an execution date, run the athlete endorsement contract tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ATHLETE_ENDORSEMENT_CONTRACT_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ATHLETE_ENDORSEMENT_CONTRACT_T_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Athlete Endorsement Contract Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_athlete_endorsement__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → athlete-endorsement-contract-tracker.yml

When a high-value expense report is submitted in SAP Concur, validates the claim against SAP cost center budgets and routes to the finance manager via Teams for approval.

naftiko: '0.5'
info:
  label: SAP Concur Expense Approval Escalation
  description: When a high-value expense report is submitted in SAP Concur, validates the claim against SAP cost center budgets and routes to the finance manager via Teams for approval.
  tags:
  - finance
  - expense-management
  - sap-concur
  - sap
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-expenses
    port: 8080
    tools:
    - name: escalate-expense-report
      description: Given a Concur expense report ID and total, validate remaining budget in SAP and notify the finance manager in Teams with the report details and approval link. Use when expense reports exceed policy thresholds.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: total_amount
        in: body
        type: number
        description: The total expense amount in USD.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center to validate budget against.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: check-budget
        type: call
        call: sap-exp.get-cost-center-balance
        with:
          cost_center: '{{cost_center}}'
      - name: notify-manager
        type: call
        call: msteams-exp.send-message
        with:
          recipient_upn: '{{get-report.manager_email}}'
          text: 'Expense report {{report_id}} for ${{total_amount}} requires approval. Budget remaining: {{check-budget.available}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: sap-exp
    baseUri: https://nike-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center-balance
        method: GET
  - type: http
    namespace: msteams-exp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-approval-escalation.yml

Routes Coupa procurement requests based on category rules in Snowflake, creates Jira approval tasks, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Coupa Procurement Request Router
  description: Routes Coupa procurement requests based on category rules in Snowflake, creates Jira approval tasks, and notifies the procurement team via Microsoft Teams.
  tags:
  - procurement
  - coupa
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: coupa_procurement_re
    port: 8080
    tools:
    - name: coupa-procurement
      description: Given an execution date, run the coupa procurement request router process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.COUPA_PROCUREMENT_REQUEST_ROUTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.COUPA_PROCUREMENT_REQUEST_ROUT_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Coupa Procurement Request Router - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_coupa_procurement_re_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → coupa-procurement-request-router.yml

Pulls weekly product campaign performance metrics from Adobe Analytics and posts a digest to the digital marketing team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Adobe Analytics Product Campaign Digest
  description: Pulls weekly product campaign performance metrics from Adobe Analytics and posts a digest to the digital marketing team's Microsoft Teams channel.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: digest-campaign-analytics
      description: Given an Adobe Analytics report suite ID and date range, fetch product campaign performance metrics and post a summary to the digital marketing Teams channel. Use for weekly campaign reviews.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: date_from
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: date_to
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: get-metrics
        type: call
        call: adobe-analytics.get-report
        with:
          report_suite_id: '{{report_suite_id}}'
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: post-digest
        type: call
        call: msteams-mkt.post-message
        with:
          channel_id: $secrets.digital_mkt_channel_id
          text: 'Campaign Analytics ({{date_from}}–{{date_to}}): Visits={{get-metrics.visits}}, Conversions={{get-metrics.conversions}}, Revenue={{get-metrics.revenue}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/{{report_suite_id}}
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      inputParameters:
      - name: report_suite_id
        in: path
      - name: date_from
        in: query
      - name: date_to
        in: query
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: msteams-mkt
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-product-campaign-digest.yml

Syncs product roadmap items from Notion to Jira epics, logs in Snowflake, and notifies the product management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Notion Product Roadmap Sync
  description: Syncs product roadmap items from Notion to Jira epics, logs in Snowflake, and notifies the product management team via Microsoft Teams.
  tags:
  - product-management
  - notion
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: notion_product_roadm
    port: 8080
    tools:
    - name: notion-product
      description: Given an execution date, run the notion product roadmap sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NOTION_PRODUCT_ROADMAP_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NOTION_PRODUCT_ROADMAP_SYNC_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Notion Product Roadmap Sync - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_notion_product_roadm_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → notion-product-roadmap-sync.yml

When a P1 incident is created in ServiceNow, triggers PagerDuty on-call escalation, creates a Datadog event, and posts a war-room notification to the IT ops Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident P1 Escalation
  description: When a P1 incident is created in ServiceNow, triggers PagerDuty on-call escalation, creates a Datadog event, and posts a war-room notification to the IT ops Teams channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow incident number and description, trigger PagerDuty, create a Datadog event marker, and notify the IT ops Teams channel. Invoke immediately on P1 incident creation.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: short_description
        in: body
        type: string
        description: Brief description of the incident.
      steps:
      - name: page-oncall
        type: call
        call: pagerduty.trigger-incident
        with:
          title: 'P1: {{short_description}}'
          severity: critical
          incident_key: '{{incident_number}}'
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'P1 Incident: {{incident_number}}'
          alert_type: error
          text: '{{short_description}}'
      - name: notify-ops
        type: call
        call: msteams-ops.post-message
        with:
          channel_id: $secrets.it_ops_channel_id
          text: 'P1 Incident {{incident_number}}: {{short_description}} | PagerDuty: {{page-oncall.incident_url}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: trigger-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-ops
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-incident-p1-escalation.yml

Enriches Salesforce leads with ZoomInfo data, stores enriched profiles in Snowflake, and notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce ZoomInfo Lead Enrichment
  description: Enriches Salesforce leads with ZoomInfo data, stores enriched profiles in Snowflake, and notifies the sales team via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - zoominfo
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_zoominfo_
    port: 8080
    tools:
    - name: salesforce-zoominfo
      description: Given an execution date, run the salesforce zoominfo lead enrichment process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_ZOOMINFO_LEAD_ENRICHMENT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_ZOOMINFO_LEAD_ENRIC_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_zoominfo__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-zoominfo-lead-enrichment.yml

Validates SAP period-close readiness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Period Close Checklist Automation
  description: Validates SAP period-close readiness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_period_close_che
    port: 8080
    tools:
    - name: sap-period
      description: Given an execution date, run the sap period close checklist automation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PERIOD_CLOSE_CHECKLIST_AUTOMATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PERIOD_CLOSE_CHECKLIST_AUT_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Period Close Checklist Automation processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_period_close_che_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-close-checklist-automation.yml

Tracks DocuSign contract execution status, logs in Snowflake, creates Jira follow-up tasks for unsigned contracts, and notifies the legal team via Microsoft Teams.

naftiko: '0.5'
info:
  label: DocuSign Contract Execution Tracker
  description: Tracks DocuSign contract execution status, logs in Snowflake, creates Jira follow-up tasks for unsigned contracts, and notifies the legal team via Microsoft Teams.
  tags:
  - legal
  - docusign
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: docusign_contract_ex
    port: 8080
    tools:
    - name: docusign-contract
      description: Given an execution date, run the docusign contract execution tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DOCUSIGN_CONTRACT_EXECUTION_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DOCUSIGN_CONTRACT_EXECUTION_TR_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: DocuSign Contract Execution Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_docusign_contract_ex_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → docusign-contract-execution-tracker.yml

Analyzes Nike app user engagement metrics in Snowflake, identifies churn risks, and distributes insights to the digital team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Nike App User Engagement Analyzer
  description: Analyzes Nike app user engagement metrics in Snowflake, identifies churn risks, and distributes insights to the digital team via Microsoft Teams.
  tags:
  - analytics
  - mobile
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nike_app_user_engage
    port: 8080
    tools:
    - name: nike-app
      description: Given an execution date, run the nike app user engagement analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NIKE_APP_USER_ENGAGEMENT_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NIKE_APP_USER_ENGAGEMENT_ANALY_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_nike_app_user_engage_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nike-app-user-engagement-analyzer.yml

Fetches SLO compliance metrics from Datadog and posts a weekly service health report to the technology leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Weekly Report
  description: Fetches SLO compliance metrics from Datadog and posts a weekly service health report to the technology leadership Microsoft Teams channel.
  tags:
  - observability
  - slo
  - datadog
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: publish-slo-report
      description: Query Datadog for all SLO statuses and post a weekly compliance report to the technology leadership Teams channel. Use for weekly engineering reviews and executive technology briefings.
      steps:
      - name: get-slos
        type: call
        call: datadog-slo.list-slos
      - name: post-report
        type: call
        call: msteams-slo.post-message
        with:
          channel_id: $secrets.tech_leadership_channel_id
          text: 'Weekly SLO Report: {{get-slos.count}} SLOs monitored. See Datadog for full compliance details.'
  consumes:
  - type: http
    namespace: datadog-slo
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: msteams-slo
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-weekly-report.yml

Processes GitHub Dependabot alerts, logs in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert Triage
  description: Processes GitHub Dependabot alerts, logs in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.
  tags:
  - security
  - github
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_dependabot_al
    port: 8080
    tools:
    - name: github-dependabot
      description: Given an execution date, run the github dependabot alert triage process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_DEPENDABOT_ALERT_TRIAGE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_DEPENDABOT_ALERT_TRIAGE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: GitHub Dependabot Alert Triage - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_dependabot_al_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-alert-triage.yml

When a new procurement request is submitted in SAP Ariba, validates the budget in SAP S/4HANA, routes to the appropriate approver, and notifies them via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Request Routing
  description: When a new procurement request is submitted in SAP Ariba, validates the budget in SAP S/4HANA, routes to the appropriate approver, and notifies them via Microsoft Teams.
  tags:
  - procurement
  - finance
  - sap-ariba
  - sap
  - approval
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: route-procurement-request
      description: Given an Ariba requisition ID and cost center, validate available budget in SAP S/4HANA and route the request to the cost center manager for approval via Teams. Use for automated procurement approval routing.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba purchase requisition ID.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center code for budget validation.
      - name: amount
        in: body
        type: number
        description: The requisition total amount in USD.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: check-budget
        type: call
        call: sap-budget.get-cost-center-budget
        with:
          cost_center: '{{cost_center}}'
      - name: notify-approver
        type: call
        call: msteams-proc.send-message
        with:
          recipient_upn: '{{get-requisition.requester_email}}'
          text: 'Procurement request {{requisition_id}} for ${{amount}} submitted. Budget available: {{check-budget.available}}. Pending approval.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-requisitions/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: sap-budget
    baseUri: https://nike-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center-budget
        method: GET
  - type: http
    namespace: msteams-proc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-procurement-request-routing.yml

Retrieves cost center details from SAP.

naftiko: '0.5'
info:
  label: SAP Cost Center Lookup
  description: Retrieves cost center details from SAP.
  tags:
  - finance
  - sap
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-cost-center
      description: Given a SAP cost center ID, retrieve details. Use for financial reporting.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center ID.
      call: sap.get-cost-center
      with:
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.CostCenterDescription
  consumes:
  - type: http
    namespace: sap
    baseUri: https://nike-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center
        method: GET
Open in Framework → View in Fleet → sap-cost-center-lookup.yml

Checks the health status of a specified Azure resource.

naftiko: '0.5'
info:
  label: Azure Resource Health Check
  description: Checks the health status of a specified Azure resource.
  tags:
  - cloud
  - microsoft-azure
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: cloud
    port: 8080
    tools:
    - name: get-resource-health
      description: Given an Azure resource ID, check availability. Use for infrastructure monitoring.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: The Azure resource ID.
      call: azure.get-resource-health
      with:
        resource_id: '{{resource_id}}'
      outputParameters:
      - name: availability_state
        type: string
        mapping: $.properties.availabilityState
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: resource-health
      path: /{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current
      inputParameters:
      - name: resource_id
        in: path
      operations:
      - name: get-resource-health
        method: GET
Open in Framework → View in Fleet → azure-resource-health-check.yml

Collects product feedback from Slack channels, creates Jira feature requests, logs in Snowflake, and notifies the product management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Slack to Jira Product Feedback Pipeline
  description: Collects product feedback from Slack channels, creates Jira feature requests, logs in Snowflake, and notifies the product management team via Microsoft Teams.
  tags:
  - product-management
  - slack
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: slack_to_jira_produc
    port: 8080
    tools:
    - name: slack-to
      description: Given an execution date, run the slack to jira product feedback pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SLACK_TO_JIRA_PRODUCT_FEEDBACK_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SLACK_TO_JIRA_PRODUCT_FEEDBACK_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Slack to Jira Product Feedback Pipeline - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_slack_to_jira_produc_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → slack-to-jira-product-feedback-pipeline.yml

Sends a message to a specified Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message Sender
  description: Sends a message to a specified Microsoft Teams channel.
  tags:
  - collaboration
  - microsoft-teams
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: send-channel-message
      description: Given team ID, channel ID, and message, post to the channel. Use for notifications.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: The channel ID.
      - name: message_text
        in: body
        type: string
        description: The message body.
      call: msteams.send-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        text: '{{message_text}}'
      outputParameters:
      - name: message_id
        type: string
        mapping: $.id
  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: send-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message-sender.yml

Scans Docker container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Docker Container Vulnerability Scanner
  description: Scans Docker container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.
  tags:
  - security
  - docker
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: docker_container_vul
    port: 8080
    tools:
    - name: docker-container
      description: Given an execution date, run the docker container vulnerability scanner process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DOCKER_CONTAINER_VULNERABILITY_SCANNER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DOCKER_CONTAINER_VULNERABILITY_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Docker Container Vulnerability Scanner - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_docker_container_vul_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → docker-container-vulnerability-scanner.yml

Tracks product sample status from Airtable, logs updates in Snowflake, creates Jira tasks for overdue samples, and notifies the product development team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Airtable Sample Tracking Workflow
  description: Tracks product sample status from Airtable, logs updates in Snowflake, creates Jira tasks for overdue samples, and notifies the product development team via Microsoft Teams.
  tags:
  - product-development
  - airtable
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: airtable_sample_trac
    port: 8080
    tools:
    - name: airtable-sample
      description: Given an execution date, run the airtable sample tracking workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AIRTABLE_SAMPLE_TRACKING_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AIRTABLE_SAMPLE_TRACKING_WORKF_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Airtable Sample Tracking Workflow - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_airtable_sample_trac_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → airtable-sample-tracking-workflow.yml

Calculates import duty estimates from SAP trade data in Snowflake, flags discrepancies, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Customs Import Duty Calculator
  description: Calculates import duty estimates from SAP trade data in Snowflake, flags discrepancies, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.
  tags:
  - compliance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_customs_import_d
    port: 8080
    tools:
    - name: sap-customs
      description: Given an execution date, run the sap customs import duty calculator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CUSTOMS_IMPORT_DUTY_CALCULATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CUSTOMS_IMPORT_DUTY_CALCUL_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: SAP Customs Import Duty Calculator processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_customs_import_d_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-customs-import-duty-calculator.yml

Tracks GitHub Copilot usage and adoption metrics in Snowflake, computes productivity gains, and distributes reports to engineering leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Copilot Adoption Tracker
  description: Tracks GitHub Copilot usage and adoption metrics in Snowflake, computes productivity gains, and distributes reports to engineering leadership via Microsoft Teams.
  tags:
  - devops
  - github-copilot
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_copilot_adopt
    port: 8080
    tools:
    - name: github-copilot
      description: Given an execution date, run the github copilot adoption tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_COPILOT_ADOPTION_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_COPILOT_ADOPTION_TRACKE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_copilot_adopt_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-copilot-adoption-tracker.yml

When a Workday integration fails, logs the error in Snowflake, creates a ServiceNow incident, and alerts the HRIS team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Integration Failure Handler
  description: When a Workday integration fails, logs the error in Snowflake, creates a ServiceNow incident, and alerts the HRIS team via Microsoft Teams.
  tags:
  - hr
  - workday
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_integration_
    port: 8080
    tools:
    - name: workday-integration
      description: Given an execution date, run the workday integration failure handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_INTEGRATION_FAILURE_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_INTEGRATION_FAILURE_HA_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: hr
          short_description: Workday Integration Failure Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_integration__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-integration-failure-handler.yml

When a Salesforce opportunity is marked Closed-Won, creates a SAP sales order, provisions a customer account in ServiceNow, and sends a welcome email from Salesforce Marketing Cloud.

naftiko: '0.5'
info:
  label: Salesforce Customer Onboarding Orchestrator
  description: When a Salesforce opportunity is marked Closed-Won, creates a SAP sales order, provisions a customer account in ServiceNow, and sends a welcome email from Salesforce Marketing Cloud.
  tags:
  - sales
  - crm
  - customer-onboarding
  - salesforce
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: onboard-new-customer
      description: Given a Salesforce opportunity ID, create a SAP sales order, open a ServiceNow customer account record, and trigger a welcome email via Salesforce Marketing Cloud. Invoke when a B2B opportunity moves to Closed-Won.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID (18-character).
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-order
        type: call
        call: sap-sales.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_sap_id}}'
          amount: '{{get-opportunity.amount}}'
      - name: create-snow-account
        type: call
        call: servicenow-acct.create-record
        with:
          account_name: '{{get-opportunity.account_name}}'
          sap_order_id: '{{create-sap-order.order_id}}'
      - name: send-welcome-email
        type: call
        call: sfmc.trigger-email
        with:
          email: '{{get-opportunity.contact_email}}'
          template_id: welcome_customer
          account_name: '{{get-opportunity.account_name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nike.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap-sales
    baseUri: https://nike-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
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: servicenow-acct
    baseUri: https://nike.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: accounts
      path: /table/customer_account
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sfmc
    baseUri: https://api.salesforce.com/marketing/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: email-triggers
      path: /messaging/v1/email/messages
      operations:
      - name: trigger-email
        method: POST
Open in Framework → View in Fleet → salesforce-customer-onboarding-orchestrator.yml

Retrieves a Jira issue by key.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves a Jira issue by key.
  tags:
  - project-management
  - jira
  - issue-tracking
capability:
  exposes:
  - type: mcp
    namespace: project-management
    port: 8080
    tools:
    - name: get-issue
      description: Given a Jira issue key, retrieve details. Use for status updates.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-lookup.yml

When AWS Cost Explorer detects a spending anomaly, creates a Jira FinOps review ticket and posts an alert to the cloud cost Microsoft Teams channel.

naftiko: '0.5'
info:
  label: AWS Cloud Cost Anomaly Alert
  description: When AWS Cost Explorer detects a spending anomaly, creates a Jira FinOps review ticket and posts an alert to the cloud cost Microsoft Teams channel.
  tags:
  - cloud
  - finops
  - aws
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS service name, anomaly ID, and estimated excess cost, create a Jira cost-review task and notify the FinOps Teams channel. Invoke when AWS Cost Anomaly Detection fires.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: The AWS Cost Explorer anomaly detection ID.
      - name: service_name
        in: body
        type: string
        description: The AWS service name experiencing the anomaly.
      - name: excess_cost_usd
        in: body
        type: number
        description: The estimated excess spend in USD.
      steps:
      - name: create-review-ticket
        type: call
        call: jira-finops.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'AWS cost anomaly: {{service_name}} — ${{excess_cost_usd}}'
          description: 'Anomaly ID: {{anomaly_id}}

            Estimated excess: ${{excess_cost_usd}}'
      - name: alert-finops
        type: call
        call: msteams-finops.post-message
        with:
          channel_id: $secrets.finops_channel_id
          text: 'Cost Anomaly: {{service_name}} | ${{excess_cost_usd}} excess | Jira: {{create-review-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-finops
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-cloud-cost-anomaly-alert.yml

Identifies employees who haven't completed benefits enrollment, logs in Snowflake, and sends reminders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Benefits Open Enrollment Reminder
  description: Identifies employees who haven't completed benefits enrollment, logs in Snowflake, and sends reminders via Microsoft Teams.
  tags:
  - hr
  - benefits
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_benefits_ope
    port: 8080
    tools:
    - name: workday-benefits
      description: Given an execution date, run the workday benefits open enrollment reminder process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLMENT_REMINDE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLME_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_benefits_ope_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-benefits-open-enrollment-reminder.yml

Reconciles Workday payroll data against financial records in Snowflake, flags discrepancies, creates ServiceNow cases, and notifies the payroll team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Payroll Reconciliation Workflow
  description: Reconciles Workday payroll data against financial records in Snowflake, flags discrepancies, creates ServiceNow cases, and notifies the payroll team via Microsoft Teams.
  tags:
  - hr
  - payroll
  - workday
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_payroll_reco
    port: 8080
    tools:
    - name: workday-payroll
      description: Given an execution date, run the workday payroll reconciliation workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_PAYROLL_RECONCILIATION_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_PAYROLL_RECONCILIATION_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: hr
          short_description: Workday Payroll Reconciliation Workflow processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_payroll_reco_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-reconciliation-workflow.yml

Looks up an Okta user by login email.

naftiko: '0.5'
info:
  label: Okta User Lookup
  description: Looks up an Okta user by login email.
  tags:
  - identity
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user
      description: Given an Okta user login, retrieve profile details. Use for identity verification.
      inputParameters:
      - name: user_login
        in: body
        type: string
        description: The Okta user login email.
      call: okta.get-user
      with:
        user_login: '{{user_login}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: okta
    baseUri: https://nike.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_login}}
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-lookup.yml

Generates seasonal product allocation plans from SAP data in Snowflake, creates Jira distribution tasks, and notifies the merchandising team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Seasonal Allocation Planner
  description: Generates seasonal product allocation plans from SAP data in Snowflake, creates Jira distribution tasks, and notifies the merchandising team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_seasonal_allocat
    port: 8080
    tools:
    - name: sap-seasonal
      description: Given an execution date, run the sap seasonal allocation planner process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_SEASONAL_ALLOCATION_PLANNER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_SEASONAL_ALLOCATION_PLANNE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: SAP Seasonal Allocation Planner - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_seasonal_allocat_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-seasonal-allocation-planner.yml

When a new lead is created in Salesforce, enriches it with company firmographics from ZoomInfo and updates the lead record with employee count, revenue, and industry data.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment via ZoomInfo
  description: When a new lead is created in Salesforce, enriches it with company firmographics from ZoomInfo and updates the lead record with employee count, revenue, and industry data.
  tags:
  - sales
  - crm
  - lead-management
  - salesforce
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-salesforce-lead
      description: Given a Salesforce lead ID, fetch firmographic data from ZoomInfo and update the lead with company size, industry, and revenue. Use when a new lead is created or when lead data is incomplete.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-data
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{get-lead.company}}'
          email: '{{get-lead.email}}'
      - name: update-lead
        type: call
        call: salesforce-lead-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          employees: '{{enrich-data.employee_count}}'
          annual_revenue: '{{enrich-data.revenue}}'
          industry: '{{enrich-data.industry}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://nike.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-search
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce-lead-update
    baseUri: https://nike.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment-via-zoominfo.yml

Computes Kubernetes cluster cost allocation from Snowflake metrics, generates chargeback reports, creates Jira budget tasks, and notifies the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Kubernetes Cluster Cost Allocation Reporter
  description: Computes Kubernetes cluster cost allocation from Snowflake metrics, generates chargeback reports, creates Jira budget tasks, and notifies the platform team via Microsoft Teams.
  tags:
  - infrastructure
  - kubernetes
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: kubernetes_cluster_c
    port: 8080
    tools:
    - name: kubernetes-cluster
      description: Given an execution date, run the kubernetes cluster cost allocation reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.KUBERNETES_CLUSTER_COST_ALLOCATION_REPOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.KUBERNETES_CLUSTER_COST_ALLOCA_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Kubernetes Cluster Cost Allocation Reporter - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_kubernetes_cluster_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kubernetes-cluster-cost-allocation-reporter.yml

Processes RMA requests in SAP, validates return eligibility in Snowflake, creates ServiceNow cases, and notifies the returns team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Return Merchandise Authorization Processor
  description: Processes RMA requests in SAP, validates return eligibility in Snowflake, creates ServiceNow cases, and notifies the returns team via Microsoft Teams.
  tags:
  - logistics
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_return_merchandi
    port: 8080
    tools:
    - name: sap-return
      description: Given an execution date, run the sap return merchandise authorization processor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_RETURN_MERCHANDISE_AUTHORIZATION_PRO LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_RETURN_MERCHANDISE_AUTHORI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: logistics
          short_description: SAP Return Merchandise Authorization Processor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_return_merchandi_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-return-merchandise-authorization-processor.yml

Onboards new footwear suppliers in SAP Ariba, creates ServiceNow vendor setup requests, logs in Snowflake, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Footwear Supplier Onboarding
  description: Onboards new footwear suppliers in SAP Ariba, creates ServiceNow vendor setup requests, logs in Snowflake, and notifies the procurement team via Microsoft Teams.
  tags:
  - procurement
  - sap
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_ariba_footwear_s
    port: 8080
    tools:
    - name: sap-ariba
      description: Given an execution date, run the sap ariba footwear supplier onboarding process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_ARIBA_FOOTWEAR_SUPPLIER_ONBOARDING LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_ARIBA_FOOTWEAR_SUPPLIER_ON_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: procurement
          short_description: SAP Ariba Footwear Supplier Onboarding processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_ariba_footwear_s_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-footwear-supplier-onboarding.yml

Syncs Marketo campaign performance metrics to Snowflake, computes engagement scores, and distributes insights to the marketing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Marketo Campaign Performance Sync
  description: Syncs Marketo campaign performance metrics to Snowflake, computes engagement scores, and distributes insights to the marketing team via Microsoft Teams.
  tags:
  - marketing
  - marketo
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketo_campaign_per
    port: 8080
    tools:
    - name: marketo-campaign
      description: Given an execution date, run the marketo campaign performance sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.MARKETO_CAMPAIGN_PERFORMANCE_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.MARKETO_CAMPAIGN_PERFORMANCE_S_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_marketo_campaign_per_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → marketo-campaign-performance-sync.yml

Generates retail store staffing forecasts from Workday data in Snowflake, compares to demand projections, and notifies store operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Retail Staffing Forecast
  description: Generates retail store staffing forecasts from Workday data in Snowflake, compares to demand projections, and notifies store operations via Microsoft Teams.
  tags:
  - hr
  - retail
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_retail_staff
    port: 8080
    tools:
    - name: workday-retail
      description: Given an execution date, run the workday retail staffing forecast process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_RETAIL_STAFFING_FORECAST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_RETAIL_STAFFING_FORECA_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_retail_staff_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-retail-staffing-forecast.yml

Monitors inventory aging data from SAP in Snowflake, flags slow-moving SKUs, creates Jira markdown action items, and notifies the merchandise planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Inventory Aging Alert
  description: Monitors inventory aging data from SAP in Snowflake, flags slow-moving SKUs, creates Jira markdown action items, and notifies the merchandise planning team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_inventory_aging_
    port: 8080
    tools:
    - name: sap-inventory
      description: Given an execution date, run the sap inventory aging alert process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_INVENTORY_AGING_ALERT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_INVENTORY_AGING_ALERT_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: SAP Inventory Aging Alert - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_inventory_aging__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-inventory-aging-alert.yml

On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog deployment event, and alerts the engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Response
  description: On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog deployment event, and alerts the engineering team in Microsoft Teams.
  tags:
  - devops
  - ci-cd
  - github
  - jira
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-ci
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions run ID, repository, branch, failing job, and commit SHA, open a Jira bug, create a Datadog deployment event, and alert the engineering Teams channel. Invoke on any protected-branch workflow failure.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: branch
        in: body
        type: string
        description: The branch that failed.
      - name: job_name
        in: body
        type: string
        description: The failed job name.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the run.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: TECH
          issuetype: Bug
          summary: '[CI Failure] {{repository}} / {{branch}} — {{job_name}}'
      - name: create-dd-event
        type: call
        call: datadog-ci.create-event
        with:
          title: 'CI Failure: {{repository}} {{branch}}'
          alert_type: error
          tags: repo:{{repository}},branch:{{branch}}
      - name: alert-engineering
        type: call
        call: msteams-ci.post-message
        with:
          channel_id: $secrets.engineering_channel_id
          text: 'Build Failure: {{repository}} | Branch: {{branch}} | Job: {{job_name}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog-ci
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-ci
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-response.yml

Tracks sustainable material sourcing metrics in Snowflake, computes Move to Zero progress, creates Jira tasks, and notifies the sustainability team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sustainable Materials Sourcing Tracker
  description: Tracks sustainable material sourcing metrics in Snowflake, computes Move to Zero progress, creates Jira tasks, and notifies the sustainability team via Microsoft Teams.
  tags:
  - sustainability
  - sourcing
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainable_material
    port: 8080
    tools:
    - name: sustainable-materials
      description: Given an execution date, run the sustainable materials sourcing tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SUSTAINABLE_MATERIALS_SOURCING_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SUSTAINABLE_MATERIALS_SOURCING_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Sustainable Materials Sourcing Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sustainable_material_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainable-materials-sourcing-tracker.yml

Analyzes warehouse pick-pack-ship metrics in Snowflake, identifies bottlenecks, creates ServiceNow optimization requests, and notifies the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Pick Pack Ship Optimizer
  description: Analyzes warehouse pick-pack-ship metrics in Snowflake, identifies bottlenecks, creates ServiceNow optimization requests, and notifies the logistics team via Microsoft Teams.
  tags:
  - logistics
  - warehouse
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse_pick_pack_
    port: 8080
    tools:
    - name: warehouse-pick
      description: Given an execution date, run the warehouse pick pack ship optimizer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WAREHOUSE_PICK_PACK_SHIP_OPTIMIZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WAREHOUSE_PICK_PACK_SHIP_OPTIM_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: logistics
          short_description: Warehouse Pick Pack Ship Optimizer processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_warehouse_pick_pack__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → warehouse-pick-pack-ship-optimizer.yml

Polls Snowflake task history for failed or stalled e-commerce data pipeline tasks and opens a Jira incident if failures are detected, notifying the data engineering team in Teams.

naftiko: '0.5'
info:
  label: Snowflake E-Commerce Data Pipeline Monitor
  description: Polls Snowflake task history for failed or stalled e-commerce data pipeline tasks and opens a Jira incident if failures are detected, notifying the data engineering team in Teams.
  tags:
  - data
  - e-commerce
  - snowflake
  - jira
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: monitor-ecommerce-pipelines
      description: Query Snowflake task history for e-commerce pipeline failures and open a Jira incident if failures are found. Post a health summary to the data engineering Teams channel. Use for automated e-commerce data platform monitoring.
      inputParameters:
      - name: lookback_hours
        in: body
        type: integer
        description: Number of hours to look back for failed pipeline tasks.
      steps:
      - name: query-failures
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as count FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY()) WHERE state='FAILED' AND scheduled_time > DATEADD(hour, -{{lookback_hours}}, CURRENT_TIMESTAMP())
      - name: create-incident
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: E-commerce pipeline failures in last {{lookback_hours}}h
      - name: notify-data-team
        type: call
        call: msteams-data.post-message
        with:
          channel_id: $secrets.data_eng_channel_id
          text: 'Pipeline Monitor: {{query-failures.count}} failures in last {{lookback_hours}}h. Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira-data
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-data
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-e-commerce-data-pipeline-monitor.yml

Launches Workday performance review cycles, tracks completion in Snowflake, creates Jira tasks for lagging teams, and notifies HR via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launcher
  description: Launches Workday performance review cycles, tracks completion in Snowflake, creates Jira tasks for lagging teams, and notifies HR via Microsoft Teams.
  tags:
  - hr
  - performance
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_performance_
    port: 8080
    tools:
    - name: workday-performance
      description: Given an execution date, run the workday performance review cycle launcher process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_PERFORMANCE_REVIEW_CYCLE_LAUNCHE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_PERFORMANCE_REVIEW_CYC_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Workday Performance Review Cycle Launcher - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_performance__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launcher.yml

When a job requisition is approved in Workday, automatically publishes the role to LinkedIn and sends a notification to the talent acquisition team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Job Requisition to LinkedIn Posting
  description: When a job requisition is approved in Workday, automatically publishes the role to LinkedIn and sends a notification to the talent acquisition team in Microsoft Teams.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: publish-job-posting
      description: Given a Workday requisition ID, fetch job details and publish the position to LinkedIn, then notify the TA team in Teams. Use when a new job requisition is approved in Workday.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-requisition
        type: call
        call: workday-rec.get-job-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: post-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{get-requisition.job_title}}'
          description: '{{get-requisition.description}}'
          location: '{{get-requisition.location}}'
          company_urn: $secrets.nike_linkedin_org_urn
      - name: notify-ta
        type: call
        call: msteams-ta.post-message
        with:
          channel_id: $secrets.ta_channel_id
          text: 'Job posted: {{get-requisition.job_title}} | LinkedIn: {{post-linkedin.job_url}}'
  consumes:
  - type: http
    namespace: workday-rec
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /nike/jobRequisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
  - type: http
    namespace: msteams-ta
    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: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-job-requisition-to-linkedin-posting.yml

Monitors nike.com checkout conversion rates in Snowflake, flags drops below threshold, creates ServiceNow incidents, and alerts the digital commerce team via Microsoft Teams.

naftiko: '0.5'
info:
  label: E-Commerce Checkout Conversion Monitor
  description: Monitors nike.com checkout conversion rates in Snowflake, flags drops below threshold, creates ServiceNow incidents, and alerts the digital commerce team via Microsoft Teams.
  tags:
  - e-commerce
  - analytics
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ecommerce_checkout_c
    port: 8080
    tools:
    - name: ecommerce-checkout
      description: Given an execution date, run the e-commerce checkout conversion monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ECOMMERCE_CHECKOUT_CONVERSION_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ECOMMERCE_CHECKOUT_CONVERSION__RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: e-commerce
          short_description: E-Commerce Checkout Conversion Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_ecommerce_checkout_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → e-commerce-checkout-conversion-monitor.yml

Monitors SNKRS app launch metrics in Snowflake during product drops, flags performance issues, creates ServiceNow incidents, and alerts the digital platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SNKRS App Release Monitoring Chain
  description: Monitors SNKRS app launch metrics in Snowflake during product drops, flags performance issues, creates ServiceNow incidents, and alerts the digital platform team via Microsoft Teams.
  tags:
  - e-commerce
  - mobile
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: snkrs_app_release_mo
    port: 8080
    tools:
    - name: snkrs-app
      description: Given an execution date, run the snkrs app release monitoring chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SNKRS_APP_RELEASE_MONITORING_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SNKRS_APP_RELEASE_MONITORING_C_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: e-commerce
          short_description: SNKRS App Release Monitoring Chain processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_snkrs_app_release_mo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nike.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snkrs-app-release-monitoring-chain.yml

Generates product descriptions using the Anthropic API, stores in Snowflake, creates Jira review tasks, and notifies the content team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Anthropic Product Content Generator
  description: Generates product descriptions using the Anthropic API, stores in Snowflake, creates Jira review tasks, and notifies the content team via Microsoft Teams.
  tags:
  - ai
  - anthropic
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: anthropic_product_co
    port: 8080
    tools:
    - name: anthropic-product
      description: Given an execution date, run the anthropic product content generator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ANTHROPIC_PRODUCT_CONTENT_GENERATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ANTHROPIC_PRODUCT_CONTENT_GENE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Anthropic Product Content Generator - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_anthropic_product_co_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → anthropic-product-content-generator.yml

Pulls Nike.com traffic metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and distributes daily digests via Microsoft Teams.

naftiko: '0.5'
info:
  label: Adobe Analytics Nike.com Traffic Digest
  description: Pulls Nike.com traffic metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and distributes daily digests via Microsoft Teams.
  tags:
  - analytics
  - adobe-analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: adobe_analytics_nike
    port: 8080
    tools:
    - name: adobe-analytics
      description: Given an execution date, run the adobe analytics nike.com traffic digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ADOBE_ANALYTICS_NIKE_COM_TRAFFIC_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ADOBE_ANALYTICS_NIKE_COM_TRAFF_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_adobe_analytics_nike_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-nike-com-traffic-digest.yml

Retrieves product catalog entries from Airtable.

naftiko: '0.5'
info:
  label: Airtable Product Catalog Lookup
  description: Retrieves product catalog entries from Airtable.
  tags:
  - product-management
  - airtable
  - catalog
capability:
  exposes:
  - type: mcp
    namespace: product-catalog
    port: 8080
    tools:
    - name: get-record
      description: Given an Airtable base and record ID, retrieve catalog entry. Use for product lookups.
      inputParameters:
      - name: base_id
        in: body
        type: string
        description: The Airtable base ID.
      - name: record_id
        in: body
        type: string
        description: The record ID.
      call: airtable.get-record
      with:
        base_id: '{{base_id}}'
        record_id: '{{record_id}}'
      outputParameters:
      - name: product_name
        type: string
        mapping: $.fields.Name
      - name: sku
        type: string
        mapping: $.fields.SKU
  consumes:
  - type: http
    namespace: airtable
    baseUri: https://api.airtable.com/v0
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /{{base_id}}/Products/{{record_id}}
      inputParameters:
      - name: base_id
        in: path
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → airtable-product-catalog-lookup.yml

At the end of each financial period, queries SAP S/4HANA for open journal entries and unposted items, then creates a ServiceNow period-close task for the accounting team.

naftiko: '0.5'
info:
  label: SAP Period-End Close Checklist
  description: At the end of each financial period, queries SAP S/4HANA for open journal entries and unposted items, then creates a ServiceNow period-close task for the accounting team.
  tags:
  - finance
  - period-close
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-period-close-checklist
      description: Given a fiscal period and year, query SAP for open items and unposted journals, then create a ServiceNow checklist task. Use at month-end or quarter-end to support the accounting close process.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period number (e.g., '006' for June).
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year (e.g., '2026').
      steps:
      - name: get-open-items
        type: call
        call: sap-close.get-open-journal-entries
        with:
          period: '{{fiscal_period}}'
          year: '{{fiscal_year}}'
      - name: create-checklist
        type: call
        call: servicenow-close.create-task
        with:
          short_description: Period close checklist FY{{fiscal_year}}/P{{fiscal_period}}
          description: 'Open items: {{get-open-items.count}}. Please resolve before period close.'
  consumes:
  - type: http
    namespace: sap-close
    baseUri: https://nike-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntryItem
      inputParameters:
      - name: period
        in: query
      - name: year
        in: query
      operations:
      - name: get-open-journal-entries
        method: GET
  - type: http
    namespace: servicenow-close
    baseUri: https://nike.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
Open in Framework → View in Fleet → sap-period-end-close-checklist.yml

Retrieves metadata for a GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Repository Info Lookup
  description: Retrieves metadata for a GitHub repository.
  tags:
  - devops
  - github
  - source-control
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: get-repo-info
      description: Given org and repo name, retrieve metadata. Use for developer onboarding.
      inputParameters:
      - name: org
        in: body
        type: string
        description: The GitHub organization.
      - name: repo
        in: body
        type: string
        description: The repository name.
      call: github.get-repo
      with:
        org: '{{org}}'
        repo: '{{repo}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.full_name
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{org}}/{{repo}}
      inputParameters:
      - name: org
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-info-lookup.yml

Aggregates pre-launch demand signals from Nike.com and SNKRS app in Snowflake, adjusts inventory allocation, and notifies the merchandising team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sneaker Launch Demand Signal Processor
  description: Aggregates pre-launch demand signals from Nike.com and SNKRS app in Snowflake, adjusts inventory allocation, and notifies the merchandising team via Microsoft Teams.
  tags:
  - retail
  - e-commerce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sneaker_launch_deman
    port: 8080
    tools:
    - name: sneaker-launch
      description: Given an execution date, run the sneaker launch demand signal processor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SNEAKER_LAUNCH_DEMAND_SIGNAL_PROCESSOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SNEAKER_LAUNCH_DEMAND_SIGNAL_P_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sneaker_launch_deman_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sneaker-launch-demand-signal-processor.yml

Aggregates Salesforce wholesale pipeline data in Snowflake, refreshes Power BI dashboards, and distributes weekly digests to sales leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Wholesale Pipeline Digest
  description: Aggregates Salesforce wholesale pipeline data in Snowflake, refreshes Power BI dashboards, and distributes weekly digests to sales leadership via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_wholesale
    port: 8080
    tools:
    - name: salesforce-wholesale
      description: Given an execution date, run the salesforce wholesale pipeline digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_WHOLESALE_PIPELINE_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_WHOLESALE_PIPELINE__RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_wholesale_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-wholesale-pipeline-digest.yml

Analyzes retail store traffic data in Snowflake, computes conversion rates, and distributes insights to store operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Store Traffic Analytics Pipeline
  description: Analyzes retail store traffic data in Snowflake, computes conversion rates, and distributes insights to store operations via Microsoft Teams.
  tags:
  - retail
  - analytics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail_store_traffic
    port: 8080
    tools:
    - name: retail-store
      description: Given an execution date, run the retail store traffic analytics pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.RETAIL_STORE_TRAFFIC_ANALYTICS_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.RETAIL_STORE_TRAFFIC_ANALYTICS_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_retail_store_traffic_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-store-traffic-analytics-pipeline.yml

During open enrollment, pulls active employees from Workday and syncs benefit elections to ADP, then confirms enrollment via a Teams notification to each employee.

naftiko: '0.5'
info:
  label: Open Enrollment Benefits Sync
  description: During open enrollment, pulls active employees from Workday and syncs benefit elections to ADP, then confirms enrollment via a Teams notification to each employee.
  tags:
  - hr
  - benefits
  - open-enrollment
  - workday
  - adp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-benefits
    port: 8080
    tools:
    - name: sync-benefit-elections
      description: Given an employee ID and benefit plan selection, sync the election from Workday to ADP and send a Teams confirmation. Use during open enrollment or qualifying life events.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the enrolling employee.
      - name: benefit_plan_id
        in: body
        type: string
        description: The ADP benefit plan ID the employee selected.
      steps:
      - name: get-employee
        type: call
        call: workday-ben.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: submit-election
        type: call
        call: adp.update-benefit-election
        with:
          associate_oid: '{{get-employee.adp_oid}}'
          plan_id: '{{benefit_plan_id}}'
      - name: confirm-enrollment
        type: call
        call: msteams-ben.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Your benefit election for plan {{benefit_plan_id}} has been successfully submitted.
  consumes:
  - type: http
    namespace: workday-ben
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /nike/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: benefit-elections
      path: /benefits/v2/workers/{{associate_oid}}/benefit-elections
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-benefit-election
        method: POST
  - type: http
    namespace: msteams-ben
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /chats
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → open-enrollment-benefits-sync.yml

Submits product attributes to Anthropic Claude to generate SEO-optimized product descriptions, then updates the product record in Salesforce with the generated content.

naftiko: '0.5'
info:
  label: Anthropic Product Description Generator
  description: Submits product attributes to Anthropic Claude to generate SEO-optimized product descriptions, then updates the product record in Salesforce with the generated content.
  tags:
  - ai
  - content
  - anthropic
  - salesforce
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: ai-content
    port: 8080
    tools:
    - name: generate-product-description
      description: Given a product ID, category, and key attributes, generate an SEO-optimized product description using Anthropic Claude and update the Salesforce product record. Use for bulk product catalog updates or new product launches.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The Salesforce product ID to update.
      - name: product_name
        in: body
        type: string
        description: The product name.
      - name: attributes
        in: body
        type: string
        description: Comma-separated product attributes (e.g., color, material, technology).
      - name: category
        in: body
        type: string
        description: Product category (e.g., Running Shoes, Training Apparel).
      steps:
      - name: generate-description
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          content: 'Write a compelling 2-3 sentence SEO-optimized product description for a {{category}} named {{product_name}} with these attributes: {{attributes}}.'
      - name: update-product
        type: call
        call: salesforce-product.update-product
        with:
          product_id: '{{product_id}}'
          description: '{{generate-description.text}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: salesforce-product
    baseUri: https://nike.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: products
      path: /sobjects/Product2/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: update-product
        method: PATCH
Open in Framework → View in Fleet → anthropic-product-description-generator.yml

Retrieves a Canva design by ID, returning title, status, and last edit time.

naftiko: '0.5'
info:
  label: Canva Design Asset Lookup
  description: Retrieves a Canva design by ID, returning title, status, and last edit time.
  tags:
  - design
  - canva
  - creative
capability:
  exposes:
  - type: mcp
    namespace: creative
    port: 8080
    tools:
    - name: get-design
      description: Given a Canva design ID, retrieve details. Use for creative asset management.
      inputParameters:
      - name: design_id
        in: body
        type: string
        description: The Canva design ID.
      call: canva.get-design
      with:
        design_id: '{{design_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.design.title
      - name: status
        type: string
        mapping: $.design.status
  consumes:
  - type: http
    namespace: canva
    baseUri: https://api.canva.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.canva_token
    resources:
    - name: designs
      path: /designs/{{design_id}}
      inputParameters:
      - name: design_id
        in: path
      operations:
      - name: get-design
        method: GET
Open in Framework → View in Fleet → canva-design-asset-lookup.yml

When a Figma design is approved, creates Jira development stories, links design assets, and notifies the engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Design to Development Handoff
  description: When a Figma design is approved, creates Jira development stories, links design assets, and notifies the engineering team via Microsoft Teams.
  tags:
  - design
  - figma
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product_design_to_de
    port: 8080
    tools:
    - name: product-design
      description: Given an execution date, run the product design to development handoff process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PRODUCT_DESIGN_TO_DEVELOPMENT_HANDOFF LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PRODUCT_DESIGN_TO_DEVELOPMENT__RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Product Design to Development Handoff - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_product_design_to_de_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-design-to-development-handoff.yml

Routes new Workday job requisitions through approval chains in Snowflake, creates Jira tracking tasks, and notifies approvers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Job Requisition Approval Chain
  description: Routes new Workday job requisitions through approval chains in Snowflake, creates Jira tracking tasks, and notifies approvers via Microsoft Teams.
  tags:
  - hr
  - recruiting
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_job_requisit
    port: 8080
    tools:
    - name: workday-job
      description: Given an execution date, run the workday job requisition approval chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_JOB_REQUISITION_APPROVAL_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_JOB_REQUISITION_APPROV_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: NKOPS
          issue_type: Task
          summary: Workday Job Requisition Approval Chain - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_job_requisit_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nike.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-job-requisition-approval-chain.yml

Runs product recommendation models in Databricks, stores predictions in Snowflake, and notifies the data science team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Databricks Product Recommendation Pipeline
  description: Runs product recommendation models in Databricks, stores predictions in Snowflake, and notifies the data science team via Microsoft Teams.
  tags:
  - data-science
  - databricks
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: databricks_product_r
    port: 8080
    tools:
    - name: databricks-product
      description: Given an execution date, run the databricks product recommendation pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DATABRICKS_PRODUCT_RECOMMENDATION_PIPELI LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DATABRICKS_PRODUCT_RECOMMENDAT_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_databricks_product_r_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-product-recommendation-pipeline.yml

Looks up a Workday worker profile by employee ID.

naftiko: '0.5'
info:
  label: Workday Worker Profile Lookup
  description: Looks up a Workday worker profile by employee ID.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-worker-profile
      description: Given a Workday employee ID, retrieve the worker profile. Use for HR inquiries.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.worker.fullName
      - name: job_title
        type: string
        mapping: $.worker.jobTitle
  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: /nike/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-worker-profile-lookup.yml

Aggregates sustainability metrics from SAP in Snowflake, refreshes Power BI ESG dashboards, and distributes to the sustainability team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Sustainability Reporting Pipeline
  description: Aggregates sustainability metrics from SAP in Snowflake, refreshes Power BI ESG dashboards, and distributes to the sustainability team via Microsoft Teams.
  tags:
  - sustainability
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_sustainability_r
    port: 8080
    tools:
    - name: sap-sustainability
      description: Given an execution date, run the sap sustainability reporting pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_SUSTAINABILITY_REPORTING_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_SUSTAINABILITY_REPORTING_P_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_sustainability_r_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nike.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-sustainability-reporting-pipeline.yml

Optimizes Direct Store Delivery routes by analyzing Salesforce retail accounts, checking SAP regional inventory, and posting optimized routes to Microsoft Teams.

naftiko: '0.5'
info:
  label: DSD Route Delivery Optimization
  description: Optimizes Direct Store Delivery routes by analyzing Salesforce retail accounts, checking SAP regional inventory, and posting optimized routes to Microsoft Teams.
  tags:
  - distribution
  - supply-chain
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dsd-optimization
    port: 8080
    tools:
    - name: optimize-dsd-routes
      description: 'Optimize DSD routes: analyze Salesforce accounts, check SAP inventory, post routes.'
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The distribution region code.
      - name: delivery_date
        in: body
        type: string
        description: Target delivery date.
      steps:
      - name: get-retail-accounts
        type: call
        call: salesforce.get-region-accounts
        with:
          region: '{{region_code}}'
      - name: check-warehouse-stock
        type: call
        call: sap.get-regional-stock
        with:
          region: '{{region_code}}'
      - name: post-optimized-routes
        type: call
        call: msteams.send-message
        with:
          channel_id: dsd-{{region_code}}
          text: 'DSD Route Optimization for {{region_code}} on {{delivery_date}}: Accounts: {{get-retail-accounts.count}}. Stock: {{check-warehouse-stock.total_cases}} cases.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query?q=SELECT+Id,Name+FROM+Account+WHERE+Region__c='{{region}}'
      inputParameters:
      - name: region
        in: query
      operations:
      - name: get-region-accounts
        method: GET
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: regional-stock
      path: /RegionalInventory('{{region}}')
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-regional-stock
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dsd-route-delivery-optimization.yml

Queries SAP HANA for real-time sales data by product group, returning total revenue, units sold, and top-selling SKU.

naftiko: '0.5'
info:
  label: SAP HANA Real-Time Sales Query
  description: Queries SAP HANA for real-time sales data by product group, returning total revenue, units sold, and top-selling SKU.
  tags:
  - analytics
  - sap-hana
  - sales
capability:
  exposes:
  - type: mcp
    namespace: real-time-analytics
    port: 8080
    tools:
    - name: get-real-time-sales
      description: Query SAP HANA for real-time sales by product group. Returns total revenue, units sold, and top SKU.
      inputParameters:
      - name: product_group
        in: body
        type: string
        description: The product group code, e.g. SNACKS, BEVERAGES.
      - name: date
        in: body
        type: string
        description: The date in YYYY-MM-DD format.
      call: sap-hana.get-sales-summary
      with:
        product_group: '{{product_group}}'
        date: '{{date}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.results[0].total_revenue
      - name: units_sold
        type: string
        mapping: $.results[0].units_sold
      - name: top_sku
        type: string
        mapping: $.results[0].top_sku
  consumes:
  - type: http
    namespace: sap-hana
    baseUri: https://pepsico-hana.sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_hana_token
    resources:
    - name: sales-summary
      path: /sales/summary?product_group={{product_group}}&date={{date}}
      inputParameters:
      - name: product_group
        in: query
      - name: date
        in: query
      operations:
      - name: get-sales-summary
        method: GET
Open in Framework → View in Fleet → sap-hana-real-time-sales-query.yml

Manages snack seasoning formulation changes by updating the SAP recipe master, creating a change request in ServiceNow, and notifying R&D and manufacturing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Snack Seasoning Formulation Change
  description: Manages snack seasoning formulation changes by updating the SAP recipe master, creating a change request in ServiceNow, and notifying R&D and manufacturing via Microsoft Teams.
  tags:
  - manufacturing
  - brand-management
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: formulation
    port: 8080
    tools:
    - name: manage-formulation-change
      description: 'Manage seasoning formulation change: update SAP recipe, create ServiceNow change request, notify teams.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the seasoning.
      - name: change_description
        in: body
        type: string
        description: Description of the formulation change.
      - name: effective_date
        in: body
        type: string
        description: Effective date in YYYY-MM-DD format.
      steps:
      - name: get-current-recipe
        type: call
        call: sap.get-recipe-master
        with:
          material_number: '{{material_number}}'
      - name: create-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Seasoning formulation change: {{material_number}}'
          description: '{{change_description}}. Current: {{get-current-recipe.description}}. Effective: {{effective_date}}.'
          category: formulation_change
          assignment_group: RnD_Formulation
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: rd-formulation
          text: 'Formulation Change: Material {{material_number}}. Change: {{change_description}}. Effective: {{effective_date}}. CR: {{create-change-request.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: recipes
      path: /RecipeMaster('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-recipe-master
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snack-seasoning-formulation-change.yml

Optimizes vending machine refills by pulling telemetry data, checking regional SAP inventory, and creating route-optimized refill tasks in ServiceNow.

naftiko: '0.5'
info:
  label: Pepsi Vending Machine Refill Optimization
  description: Optimizes vending machine refills by pulling telemetry data, checking regional SAP inventory, and creating route-optimized refill tasks in ServiceNow.
  tags:
  - distribution
  - supply-chain
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vending-ops
    port: 8080
    tools:
    - name: optimize-refill-routes
      description: 'Optimize vending refills: pull telemetry, check SAP inventory, create ServiceNow tasks.'
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The regional distribution code.
      - name: threshold_percent
        in: body
        type: string
        description: Stock threshold percentage.
      steps:
      - name: get-machine-telemetry
        type: call
        call: sap.get-vending-telemetry
        with:
          region: '{{region_code}}'
          threshold: '{{threshold_percent}}'
      - name: check-regional-inventory
        type: call
        call: sap.get-regional-stock
        with:
          region: '{{region_code}}'
      - name: create-refill-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vending refill: Region {{region_code}}'
          description: 'Low stock machines: {{get-machine-telemetry.low_stock_count}}. Regional stock: {{check-regional-inventory.available_cases}} cases.'
          category: vending_refill
          assignment_group: Distribution_{{region_code}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_VENDING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: telemetry
      path: /VendingMachineStatus?$filter=Region eq '{{region}}'
      inputParameters:
      - name: region
        in: query
      - name: threshold
        in: query
      operations:
      - name: get-vending-telemetry
        method: GET
    - name: regional-stock
      path: /RegionalInventory('{{region}}')
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-regional-stock
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.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
Open in Framework → View in Fleet → pepsi-vending-machine-refill-optimization.yml

Triggers a refresh of the executive KPI Power BI dataset and posts a confirmation to the CFO's Microsoft Teams channel when the refresh is complete.

naftiko: '0.5'
info:
  label: Power BI Executive KPI Refresh
  description: Triggers a refresh of the executive KPI Power BI dataset and posts a confirmation to the CFO's Microsoft Teams channel when the refresh is complete.
  tags:
  - data
  - analytics
  - power-bi
  - finance
  - microsoft-teams
  - executive-reporting
capability:
  exposes:
  - type: mcp
    namespace: executive-bi
    port: 8080
    tools:
    - name: refresh-executive-kpis
      description: Trigger a Power BI refresh for the executive KPI dashboard and post a refresh confirmation to the CFO's Teams channel.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the executive KPI dashboard.
      - name: notify_upn
        in: body
        type: string
        description: The Teams UPN of the executive to notify upon refresh initiation.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-executive
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{notify_upn}}'
          text: 'Executive KPI dashboard refresh initiated. Dataset {{dataset_id}} is updating. Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-kpi-refresh.yml

Monitors frying oil quality at Frito-Lay plants by pulling quality test results from SAP, comparing against thresholds, and alerting quality teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Potato Chip Oil Quality Monitoring
  description: Monitors frying oil quality at Frito-Lay plants by pulling quality test results from SAP, comparing against thresholds, and alerting quality teams via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: oil-quality
    port: 8080
    tools:
    - name: monitor-oil-quality
      description: 'Monitor frying oil quality: pull SAP test results, compare thresholds, alert quality team.'
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The Frito-Lay plant code.
      - name: production_line
        in: body
        type: string
        description: The production line ID.
      steps:
      - name: get-oil-test-results
        type: call
        call: sap.get-quality-test
        with:
          plant: '{{plant_code}}'
          line: '{{production_line}}'
          test_type: oil_quality
      - name: create-quality-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Oil quality check: Plant {{plant_code}} Line {{production_line}}'
          description: 'FFA level: {{get-oil-test-results.ffa_level}}. Color index: {{get-oil-test-results.color_index}}.'
          category: quality_monitoring
          assignment_group: QA_FritoLay
      - name: alert-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: fritolay-quality
          text: 'Oil Quality: Plant {{plant_code}}, Line {{production_line}}. FFA: {{get-oil-test-results.ffa_level}}. Color: {{get-oil-test-results.color_index}}. Status: {{get-oil-test-results.pass_fail}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_QUALITYTEST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality-tests
      path: /QualityTest(Plant='{{plant}}',Line='{{line}}',TestType='{{test_type}}')
      inputParameters:
      - name: plant
        in: path
      - name: line
        in: path
      - name: test_type
        in: path
      operations:
      - name: get-quality-test
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → potato-chip-oil-quality-monitoring.yml

Monitors weather impacts on Tropicana orange supply by checking SAP inventory levels, assessing supplier risk, and alerting supply chain planners via Microsoft Teams.

naftiko: '0.5'
info:
  label: Tropicana Supply Chain Weather Alert
  description: Monitors weather impacts on Tropicana orange supply by checking SAP inventory levels, assessing supplier risk, and alerting supply chain planners via Microsoft Teams.
  tags:
  - supply-chain
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: weather-risk
    port: 8080
    tools:
    - name: assess-weather-impact
      description: 'Assess weather impact on Tropicana supply: check SAP inventory, assess risk, alert planners.'
      inputParameters:
      - name: region
        in: body
        type: string
        description: The growing region, e.g. Florida, Brazil.
      - name: severity
        in: body
        type: string
        description: 'Weather event severity: low, medium, high.'
      steps:
      - name: check-citrus-inventory
        type: call
        call: sap.get-material-stock
        with:
          material_number: CITRUS-CONCENTRATE
          plant: TROPICANA-MAIN
      - name: create-risk-assessment
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Weather risk: {{region}} - {{severity}}'
          description: 'Current citrus concentrate stock: {{check-citrus-inventory.available_stock}} {{check-citrus-inventory.unit}}. Weather severity: {{severity}}.'
          category: supply_chain_risk
          assignment_group: Tropicana_Supply_Chain
      - name: alert-planners
        type: call
        call: msteams.send-message
        with:
          channel_id: tropicana-supply
          text: 'WEATHER ALERT: {{region}} ({{severity}}). Citrus stock: {{check-citrus-inventory.available_stock}} {{check-citrus-inventory.unit}}. Risk assessment: {{create-risk-assessment.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tropicana-supply-chain-weather-alert.yml

Processes fountain equipment service requests by looking up the Salesforce customer, creating a ServiceNow ticket, and notifying the technician via Microsoft Teams.

naftiko: '0.5'
info:
  label: Beverage Fountain Equipment Service
  description: Processes fountain equipment service requests by looking up the Salesforce customer, creating a ServiceNow ticket, and notifying the technician via Microsoft Teams.
  tags:
  - distribution
  - customer-service
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: create-fountain-service
      description: 'Process fountain service: look up Salesforce customer, create ServiceNow ticket, notify tech.'
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: equipment_serial
        in: body
        type: string
        description: The fountain serial number.
      - name: issue_description
        in: body
        type: string
        description: The service issue.
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fountain service: {{equipment_serial}} at {{get-customer.name}}'
          description: '{{issue_description}}'
          category: fountain_equipment
          assignment_group: Fountain_Service
      - name: notify-tech
        type: call
        call: msteams.send-message
        with:
          channel_id: fountain-service
          text: 'Fountain service: {{get-customer.name}}. Equipment: {{equipment_serial}}. Issue: {{issue_description}}. Ticket: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → beverage-fountain-equipment-service.yml

Verifies a goods receipt posting in SAP S/4HANA for a given purchase order and returns the material document number and posting status.

naftiko: '0.5'
info:
  label: SAP S/4HANA Goods Receipt Verification
  description: Verifies a goods receipt posting in SAP S/4HANA for a given purchase order and returns the material document number and posting status.
  tags:
  - supply-chain
  - sap
  - goods-receipt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: verify-goods-receipt
      description: Given a SAP purchase order number, query the materials management module for posted goods receipts and return the material document number and posting date.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number to verify goods receipt against.
      call: sap.get-goods-receipt
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: material_document
        type: string
        mapping: $.d.results[0].MaterialDocument
      - name: posting_date
        type: string
        mapping: $.d.results[0].PostingDate
      - name: quantity
        type: string
        mapping: $.d.results[0].QuantityInPurchaseOrderUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentItem
      inputParameters:
      - name: po_number
        in: query
      operations:
      - name: get-goods-receipt
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-goods-receipt-verification.yml

Initiates a performance review cycle in Workday for a given business unit and notifies all managers via Microsoft Teams to complete their reviews.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Trigger
  description: Initiates a performance review cycle in Workday for a given business unit and notifies all managers via Microsoft Teams to complete their reviews.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: trigger-review-cycle
      description: Given a business unit code and review period, initiate a Workday performance review cycle and send a Teams notification to all managers in the BU to begin employee reviews.
      inputParameters:
      - name: business_unit
        in: body
        type: string
        description: The PepsiCo business unit code for the review cycle (e.g., 'PBNA', 'FLNA').
      - name: review_period
        in: body
        type: string
        description: The performance review period label (e.g., 'Q2-2026', 'Annual-2025').
      - name: due_date
        in: body
        type: string
        description: The review completion deadline in YYYY-MM-DD format.
      - name: manager_channel_id
        in: body
        type: string
        description: Teams channel ID for the manager notification.
      steps:
      - name: initiate-review
        type: call
        call: workday.create-review-cycle
        with:
          business_unit: '{{business_unit}}'
          review_period: '{{review_period}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{manager_channel_id}}'
          text: 'Performance review cycle ''{{review_period}}'' has been initiated for {{business_unit}}. Please complete all reviews by {{due_date}}. Workday cycle ID: {{initiate-review.cycle_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: review-cycles
      path: /pepsico/performanceReviews
      operations:
      - name: create-review-cycle
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-trigger.yml

Syncs email campaign results from MailChimp to Salesforce and posts a performance summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: MailChimp Consumer Email Campaign Sync
  description: Syncs email campaign results from MailChimp to Salesforce and posts a performance summary to Microsoft Teams.
  tags:
  - marketing
  - mailchimp
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: sync-email-results
      description: Sync MailChimp results to Salesforce and post summary to Teams.
      inputParameters:
      - name: mailchimp_campaign_id
        in: body
        type: string
        description: The MailChimp campaign ID.
      - name: sf_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      steps:
      - name: get-report
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{mailchimp_campaign_id}}'
      - name: update-sf
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{sf_campaign_id}}'
          emails_sent: '{{get-report.emails_sent}}'
          open_rate: '{{get-report.open_rate}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: marketing-campaigns
          text: 'Email Report: {{get-report.campaign_title}}. Sent: {{get-report.emails_sent}}. Open: {{get-report.open_rate}}%. Click: {{get-report.click_rate}}%.'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mailchimp-consumer-email-campaign-sync.yml

When a Frito-Lay production line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Frito-Lay Production Line Downtime Response
  description: When a Frito-Lay production line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: handle-line-downtime
      description: 'Orchestrate Frito-Lay line downtime response: check SAP equipment, create ServiceNow ticket, notify plant ops.'
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID for the production line.
      - name: plant_code
        in: body
        type: string
        description: The Frito-Lay plant code.
      steps:
      - name: get-equipment-status
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{equipment_id}}'
      - name: create-maintenance-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Production line downtime: {{equipment_id}} at plant {{plant_code}}'
          category: plant_maintenance
          urgency: '1'
          assignment_group: FritoLay_Maintenance_{{plant_code}}
      - name: notify-plant-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: fritolay-plant-ops-{{plant_code}}
          text: 'ALERT: Production line {{equipment_id}} down at Frito-Lay plant {{plant_code}}. Status: {{get-equipment-status.system_status}}. Ticket: {{create-maintenance-ticket.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → frito-lay-production-line-downtime-response.yml

Queries SAP S/4HANA for materials below their reorder point and posts a restocking alert digest to the supply chain operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Supply Chain Inventory Alert
  description: Queries SAP S/4HANA for materials below their reorder point and posts a restocking alert digest to the supply chain operations Microsoft Teams channel.
  tags:
  - supply-chain
  - sap
  - inventory
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-reporting
    port: 8080
    tools:
    - name: alert-low-inventory
      description: Query SAP for materials at or below their safety stock level within a given plant and post a restocking digest to the supply chain Teams channel.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code to check inventory levels for (e.g., '1000').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the supply chain alert.
      steps:
      - name: get-low-stock
        type: call
        call: sap.get-low-stock-materials
        with:
          plant: '{{plant_code}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Inventory Alert — Plant {{plant_code}}: {{get-low-stock.count}} materials below safety stock. Critical items: {{get-low-stock.critical_materials}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod
      inputParameters:
      - name: plant
        in: query
      operations:
      - name: get-low-stock-materials
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-inventory-alert.yml

Fetches PepsiCo LinkedIn company page engagement metrics (impressions, shares, reactions) and posts a weekly digest to the brand marketing Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Brand Engagement Digest
  description: Fetches PepsiCo LinkedIn company page engagement metrics (impressions, shares, reactions) and posts a weekly digest to the brand marketing Teams channel.
  tags:
  - marketing
  - linkedin
  - social
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-reporting
    port: 8080
    tools:
    - name: digest-linkedin-engagement
      description: Retrieve LinkedIn organization page engagement statistics for the past 30 days and post a branded performance digest to the marketing Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The LinkedIn organization ID for PepsiCo's company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the brand marketing digest.
      steps:
      - name: get-engagement
        type: call
        call: linkedin.get-share-statistics
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'LinkedIn Brand Digest (30d): Impressions: {{get-engagement.impressions}} | Reactions: {{get-engagement.likes}} | Shares: {{get-engagement.shares}} | Comments: {{get-engagement.comments}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: share-statistics
      path: /organizationalEntityShareStatistics
      inputParameters:
      - name: organization_id
        in: query
      operations:
      - name: get-share-statistics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-brand-engagement-digest.yml

Exports current active headcount from Workday grouped by business unit and cost center, then posts a summary to the HR Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot by Business Unit
  description: Exports current active headcount from Workday grouped by business unit and cost center, then posts a summary to the HR Microsoft Teams channel.
  tags:
  - hr
  - workforce-planning
  - workday
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Retrieve current active headcount from Workday by business unit and post a formatted summary to the HR leadership Teams channel.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The snapshot date in YYYY-MM-DD format.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the HR summary.
      steps:
      - name: export-headcount
        type: call
        call: workday.list-workers
        with:
          status: active
          as_of_date: '{{as_of_date}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'PepsiCo Headcount as of {{as_of_date}}: {{export-headcount.total}} active employees across {{export-headcount.bu_count}} business units.'
  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: /pepsico/workers
      inputParameters:
      - name: status
        in: query
      - name: as_of_date
        in: query
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-snapshot-by-business-unit.yml

Fetches the current status of all monitored Datadog hosts in a given tag group and posts a health digest to the infrastructure Teams channel.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Dashboard Digest
  description: Fetches the current status of all monitored Datadog hosts in a given tag group and posts a health digest to the infrastructure Teams channel.
  tags:
  - observability
  - datadog
  - reporting
  - microsoft-teams
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: infra-reporting
    port: 8080
    tools:
    - name: digest-host-health
      description: Given a Datadog host tag filter, list all matching hosts and their statuses, then post a health digest to the infrastructure Teams channel.
      inputParameters:
      - name: host_tag
        in: body
        type: string
        description: The Datadog tag filter to scope the host list (e.g., 'env:production').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the infrastructure digest.
      steps:
      - name: list-hosts
        type: call
        call: datadog.list-hosts
        with:
          filter: '{{host_tag}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Infrastructure Health ({{host_tag}}): {{list-hosts.total}} hosts | Up: {{list-hosts.up_count}} | Down: {{list-hosts.down_count}} | Muted: {{list-hosts.muted_count}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: hosts
      path: /hosts
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: list-hosts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-health-dashboard-digest.yml

Given a vendor contract document, uses Anthropic Claude to extract key terms, payment conditions, and renewal clauses, then posts the summary to the legal team's Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Contract Intelligence
  description: Given a vendor contract document, uses Anthropic Claude to extract key terms, payment conditions, and renewal clauses, then posts the summary to the legal team's Teams channel.
  tags:
  - ai
  - legal
  - anthropic
  - microsoft-teams
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: legal-ai
    port: 8080
    tools:
    - name: extract-contract-terms
      description: Given contract text content, invoke Anthropic Claude to identify and extract payment terms, renewal clauses, liability caps, and key obligations, then post the extraction to the legal Teams channel.
      inputParameters:
      - name: contract_text
        in: body
        type: string
        description: The full text content of the vendor contract to analyze.
      - name: vendor_name
        in: body
        type: string
        description: The name of the vendor associated with the contract.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the legal team digest.
      steps:
      - name: extract-terms
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Extract the following from this vendor contract for {{vendor_name}}: 1) Payment terms, 2) Contract duration and renewal clauses, 3) Liability caps, 4) Key obligations for each party. Contract text: {{contract_text}}'
      - name: post-extraction
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Contract Intelligence — {{vendor_name}}:

            {{extract-terms.content}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-contract-intelligence.yml

Looks up a Datadog alert and, when resolved, updates the linked ServiceNow incident to resolved status and posts a closure notification in Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog Alert Resolution Tracker
  description: Looks up a Datadog alert and, when resolved, updates the linked ServiceNow incident to resolved status and posts a closure notification in Microsoft Teams.
  tags:
  - observability
  - datadog
  - servicenow
  - incident-response
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: alert-resolution
    port: 8080
    tools:
    - name: resolve-alert-and-incident
      description: Given a Datadog alert ID and linked ServiceNow incident number, check if the alert is resolved, then update the SNOW incident to Resolved and post a closure notice in Teams.
      inputParameters:
      - name: datadog_alert_id
        in: body
        type: string
        description: The Datadog monitor alert ID that has been resolved.
      - name: snow_incident_number
        in: body
        type: string
        description: The ServiceNow incident number linked to this alert.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to post the closure notification.
      steps:
      - name: get-alert-status
        type: call
        call: datadog.get-alert
        with:
          alert_id: '{{datadog_alert_id}}'
      - name: resolve-incident
        type: call
        call: servicenow.resolve-incident
        with:
          number: '{{snow_incident_number}}'
          close_code: Solved (Permanently)
          close_notes: Datadog alert {{datadog_alert_id}} resolved. Auto-closed.
      - name: post-closure
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Incident Resolved: SNOW {{snow_incident_number}} closed. Datadog alert {{datadog_alert_id}} status: {{get-alert-status.status}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: alerts
      path: /monitor/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: resolve-incident
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-resolution-tracker.yml

Traces Quaker Oats ingredients by pulling batch records from SAP, checking supplier certifications in ServiceNow, and posting a traceability report to Microsoft Teams.

naftiko: '0.5'
info:
  label: Quaker Oats Ingredient Traceability
  description: Traces Quaker Oats ingredients by pulling batch records from SAP, checking supplier certifications in ServiceNow, and posting a traceability report to Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ingredient-trace
    port: 8080
    tools:
    - name: trace-ingredients
      description: 'Trace Quaker ingredients: pull SAP batches, check certifications, post report.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The production batch number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-batch-info
        type: call
        call: sap.get-batch
        with:
          material_number: '{{material_number}}'
          batch_number: '{{batch_number}}'
      - name: check-supplier-certs
        type: call
        call: servicenow.get-supplier-certifications
        with:
          supplier_id: '{{get-batch-info.supplier_id}}'
      - name: post-trace-report
        type: call
        call: msteams.send-message
        with:
          channel_id: quaker-quality
          text: 'Ingredient Trace: Batch {{batch_number}}. Supplier: {{get-batch-info.supplier_name}}. Production: {{get-batch-info.production_date}}. Certifications: {{check-supplier-certs.cert_status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')
      inputParameters:
      - name: material_number
        in: path
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: certifications
      path: /table/supplier_certification?sysparm_query=supplier_id={{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: query
      operations:
      - name: get-supplier-certifications
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quaker-oats-ingredient-traceability.yml

Looks up a SAP vendor invoice by document number and returns its posting status, payment due date, and amount for accounts payable tracking.

naftiko: '0.5'
info:
  label: SAP Invoice Processing Status
  description: Looks up a SAP vendor invoice by document number and returns its posting status, payment due date, and amount for accounts payable tracking.
  tags:
  - finance
  - accounts-payable
  - sap
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: ap-lookup
    port: 8080
    tools:
    - name: get-invoice-status
      description: Given a SAP invoice document number and fiscal year, return the invoice posting status, payment due date, gross amount, and vendor.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: The SAP accounts payable document number.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year of the invoice document (e.g., '2025').
      call: sap.get-invoice
      with:
        document_number: '{{document_number}}'
        fiscal_year: '{{fiscal_year}}'
      outputParameters:
      - name: posting_status
        type: string
        mapping: $.d.PostingStatus
      - name: payment_due_date
        type: string
        mapping: $.d.PaymentDueDate
      - name: gross_amount
        type: string
        mapping: $.d.GrossAmount
      - name: vendor_name
        type: string
        mapping: $.d.SupplierName
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice(DocumentNumber='{{document_number}}',FiscalYear='{{fiscal_year}}')
      inputParameters:
      - name: document_number
        in: path
      - name: fiscal_year
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → sap-invoice-processing-status.yml

Submits a ServiceNow change request for a planned infrastructure or application change and notifies the change advisory board via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Management Request
  description: Submits a ServiceNow change request for a planned infrastructure or application change and notifies the change advisory board via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-ops
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, affected system, planned start, and CAB Teams channel, create a ServiceNow change request and notify the change advisory board in Teams.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the change including scope, justification, and rollback plan.
      - name: affected_system
        in: body
        type: string
        description: The PepsiCo system or service being changed.
      - name: planned_start
        in: body
        type: string
        description: Planned change start datetime in ISO 8601 format.
      - name: cab_channel_id
        in: body
        type: string
        description: Teams channel ID for the change advisory board notification.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Change: {{affected_system}} — {{change_description}}'
          planned_start: '{{planned_start}}'
          category: application
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{cab_channel_id}}'
          text: 'Change Request Submitted: {{affected_system}} | CHG: {{create-change.number}} | Planned: {{planned_start}} | Scope: {{change_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-request.yml

Retrieves a pending SAP Ariba purchase requisition and submits it for approval, then notifies the requester via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Purchase Requisition Approval
  description: Retrieves a pending SAP Ariba purchase requisition and submits it for approval, then notifies the requester via Microsoft Teams.
  tags:
  - procurement
  - sap-ariba
  - approval
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: approve-requisition
      description: Given an SAP Ariba requisition ID, fetch its details and submit the approval action, then notify the requester in Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba purchase requisition ID.
      - name: approver_comment
        in: body
        type: string
        description: Optional comment to attach to the approval action.
      - name: requester_teams_upn
        in: body
        type: string
        description: The Teams UPN of the requisition requester.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: submit-approval
        type: call
        call: ariba.approve-requisition
        with:
          requisition_id: '{{requisition_id}}'
          comment: '{{approver_comment}}'
      - name: notify-requester
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{requester_teams_upn}}'
          text: 'Your requisition {{requisition_id}} ({{get-requisition.description}}, ${{get-requisition.total}}) has been approved. Ariba status: {{submit-approval.status}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-requisitions/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
      - name: approve-requisition
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-purchase-requisition-approval.yml

Retrieves the compensation band and pay grade for a given job profile from Workday for use in offer letter generation and budget planning.

naftiko: '0.5'
info:
  label: Workday Compensation Band Lookup
  description: Retrieves the compensation band and pay grade for a given job profile from Workday for use in offer letter generation and budget planning.
  tags:
  - hr
  - compensation
  - workday
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-comp
    port: 8080
    tools:
    - name: get-compensation-band
      description: Given a Workday job profile ID, return the compensation grade, pay range minimum and maximum, and currency for use in offer generation or headcount budgeting.
      inputParameters:
      - name: job_profile_id
        in: body
        type: string
        description: The Workday job profile ID to retrieve compensation data for.
      call: workday.get-comp-grade
      with:
        job_profile_id: '{{job_profile_id}}'
      outputParameters:
      - name: grade
        type: string
        mapping: $.compensationGrade.descriptor
      - name: pay_min
        type: string
        mapping: $.compensationGradeProfile.minimumSalary
      - name: pay_max
        type: string
        mapping: $.compensationGradeProfile.maximumSalary
      - name: currency
        type: string
        mapping: $.compensationGradeProfile.currency
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation-grades
      path: /pepsico/compensationGrades/{{job_profile_id}}
      inputParameters:
      - name: job_profile_id
        in: path
      operations:
      - name: get-comp-grade
        method: GET
Open in Framework → View in Fleet → workday-compensation-band-lookup.yml

Retrieves a SAP demand forecast for a product category and uses Anthropic Claude to generate a plain-language executive summary for the supply chain leadership team.

naftiko: '0.5'
info:
  label: AI-Assisted Demand Forecast Summary
  description: Retrieves a SAP demand forecast for a product category and uses Anthropic Claude to generate a plain-language executive summary for the supply chain leadership team.
  tags:
  - ai
  - supply-chain
  - sap
  - anthropic
  - microsoft-teams
  - forecasting
capability:
  exposes:
  - type: mcp
    namespace: forecast-ai
    port: 8080
    tools:
    - name: summarize-demand-forecast
      description: Given a SAP material number and planning horizon, retrieve the demand forecast from SAP, generate a plain-language executive summary using Anthropic Claude, and post it to the supply chain Teams channel.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number to retrieve demand forecast for.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code for the forecast.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the supply chain forecast summary.
      steps:
      - name: get-forecast
        type: call
        call: sap.get-demand-forecast
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Summarize the following demand forecast data for material {{material_number}} at plant {{plant_code}} in 3 bullet points for a supply chain executive: {{get-forecast.forecast_data}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Demand Forecast Summary — {{material_number}} (Plant {{plant_code}}):

            {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV_01
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: demand-forecasts
      path: /A_MrpMaterial(Material='{{material}}',MRPArea='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-demand-forecast
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-demand-forecast-summary.yml

Checks the status of SAP financial period-end close activities and posts a completion summary to the finance leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Period-End Close Status Monitor
  description: Checks the status of SAP financial period-end close activities and posts a completion summary to the finance leadership Microsoft Teams channel.
  tags:
  - finance
  - period-close
  - sap
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: monitor-period-close
      description: Given a fiscal period and company code, check the SAP period-end close task status and post a completion percentage digest to the finance Teams channel.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The SAP fiscal period to monitor (e.g., '006/2026' for June 2026).
      - name: company_code
        in: body
        type: string
        description: The SAP company code (e.g., 'US01' for PepsiCo US).
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance close status report.
      steps:
      - name: get-close-status
        type: call
        call: sap.get-close-tasks
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: post-status
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Period Close Status {{fiscal_period}} ({{company_code}}): {{get-close-status.completed}}/{{get-close-status.total}} tasks complete ({{get-close-status.completion_pct}}%). Open blockers: {{get-close-status.blockers}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/FCO_PI_CLOSE_COCKPIT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: close-tasks
      path: /ClosingTaskSet
      inputParameters:
      - name: fiscal_period
        in: query
      - name: company_code
        in: query
      operations:
      - name: get-close-tasks
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-end-close-status-monitor.yml

Schedules snack production by checking raw material availability in SAP, creating production orders, and notifying the Frito-Lay plant via Microsoft Teams.

naftiko: '0.5'
info:
  label: Snack Production Scheduling
  description: Schedules snack production by checking raw material availability in SAP, creating production orders, and notifying the Frito-Lay plant via Microsoft Teams.
  tags:
  - manufacturing
  - supply-chain
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: production-scheduling
    port: 8080
    tools:
    - name: schedule-snack-production
      description: 'Schedule snack production: check SAP materials, create order, notify plant.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The Frito-Lay plant code.
      - name: quantity
        in: body
        type: string
        description: Quantity to produce.
      - name: production_date
        in: body
        type: string
        description: Target date.
      steps:
      - name: check-materials
        type: call
        call: sap.check-material-availability
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{quantity}}'
      - name: create-order
        type: call
        call: sap.create-production-order
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
          quantity: '{{quantity}}'
          start_date: '{{production_date}}'
      - name: notify-plant
        type: call
        call: msteams.send-message
        with:
          channel_id: fritolay-plant-{{plant_code}}
          text: 'Production scheduled: {{material_number}}. Qty: {{quantity}}. Date: {{production_date}}. Order: {{create-order.order_number}}. Material status: {{check-materials.availability_status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /MaterialAvailability(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: check-material-availability
        method: GET
    - name: production-orders
      path: /A_ProductionOrder_2
      operations:
      - name: create-production-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snack-production-scheduling.yml

When a P1 production incident is raised, creates a ServiceNow incident, annotates Datadog, and alerts the engineering on-call team in Microsoft Teams.

naftiko: '0.5'
info:
  label: P1 Incident Response Chain
  description: When a P1 production incident is raised, creates a ServiceNow incident, annotates Datadog, and alerts the engineering on-call team in Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given an affected service and impact summary, create a ServiceNow P1 incident, create a Datadog event annotation, and alert the engineering team in Teams.
      inputParameters:
      - name: affected_service
        in: body
        type: string
        description: The name of the affected PepsiCo service or system.
      - name: impact_summary
        in: body
        type: string
        description: A brief description of the business impact.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the on-call alert.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'P1 Incident: {{affected_service}} — {{impact_summary}}'
          urgency: '1'
          category: application
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'P1 Production Incident: {{affected_service}}'
          text: SNOW {{create-snow-incident.number}} — {{impact_summary}}
          alert_type: error
      - name: alert-oncall
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'P1 INCIDENT: {{affected_service}} | Impact: {{impact_summary}} | SNOW: {{create-snow-incident.number}} | Datadog: {{annotate-datadog.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → p1-incident-response-chain.yml

Tracks Gatorade sports sponsorship performance by pulling social engagement from LinkedIn, campaign metrics from Salesforce, and posting a digest to Microsoft Teams.

naftiko: '0.5'
info:
  label: Gatorade Sports Sponsorship Performance
  description: Tracks Gatorade sports sponsorship performance by pulling social engagement from LinkedIn, campaign metrics from Salesforce, and posting a digest to Microsoft Teams.
  tags:
  - marketing
  - brand-management
  - linkedin
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sponsorship
    port: 8080
    tools:
    - name: track-sponsorship-performance
      description: 'Track Gatorade sponsorship: pull LinkedIn engagement, Salesforce metrics, post digest.'
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce sponsorship campaign ID.
      - name: linkedin_campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      steps:
      - name: get-linkedin-engagement
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{linkedin_campaign_id}}'
      - name: get-sf-campaign
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: gatorade-marketing
          text: 'Gatorade Sponsorship: {{get-sf-campaign.name}}. LinkedIn impressions: {{get-linkedin-engagement.impressions}}. Engagements: {{get-linkedin-engagement.engagements}}. Budget used: ${{get-sf-campaign.actual_cost}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gatorade-sports-sponsorship-performance.yml

Checks the status of a Snowflake data pipeline task, returning execution state, rows processed, and error messages.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Status
  description: Checks the status of a Snowflake data pipeline task, returning execution state, rows processed, and error messages.
  tags:
  - analytics
  - snowflake
  - data-pipeline
capability:
  exposes:
  - type: mcp
    namespace: data-platform
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Check Snowflake data pipeline task status. Returns execution state, rows loaded, and any error messages.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name.
      call: snowflake.get-task-status
      with:
        task_name: '{{task_name}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.data[0].state
      - name: rows_loaded
        type: string
        mapping: $.data[0].rows_loaded
      - name: error_message
        type: string
        mapping: $.data[0].error_message
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pepsico.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: tasks
      path: /statements
      operations:
      - name: get-task-status
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-status.yml

Generates Azure cloud cost optimization reports by pulling cost data, identifying anomalies in Datadog, and posting recommendations to Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Optimization Report
  description: Generates Azure cloud cost optimization reports by pulling cost data, identifying anomalies in Datadog, and posting recommendations to Microsoft Teams.
  tags:
  - it-operations
  - finance
  - azure-devops
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: generate-cost-report
      description: 'Generate Azure cost report: pull cost data, check Datadog anomalies, post recommendations.'
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID.
      - name: period
        in: body
        type: string
        description: The billing period.
      steps:
      - name: get-azure-costs
        type: call
        call: azure.get-cost-summary
        with:
          subscription_id: '{{subscription_id}}'
          period: '{{period}}'
      - name: check-anomalies
        type: call
        call: datadog.get-cost-anomalies
        with:
          subscription: '{{subscription_id}}'
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: cloud-finops
          text: 'Azure Cost Report ({{period}}): Total: ${{get-azure-costs.total_cost}}. vs. Budget: ${{get-azure-costs.budget}}. Anomalies: {{check-anomalies.anomaly_count}}.'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: costs
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query?api-version=2023-11-01
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-cost-summary
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      value: $secrets.datadog_api_key
    resources:
    - name: anomalies
      path: /cost/anomalies?subscription={{subscription}}
      inputParameters:
      - name: subscription
        in: query
      operations:
      - name: get-cost-anomalies
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-optimization-report.yml

When Azure Cost Management detects a spend anomaly, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Responder
  description: When Azure Cost Management detects a spend anomaly, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
  tags:
  - finops
  - cloud
  - azure
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure subscription ID, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps alert to Teams.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID where the cost anomaly was detected.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group driving the anomaly.
      - name: estimated_overage_usd
        in: body
        type: number
        description: The estimated spend overage in US dollars.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}} overage
          category: cloud_cost
          urgency: '2'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: finops-alerts
          text: 'Azure Cost Anomaly: {{resource_group}} (sub: {{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-responder.yml

Creates a new Salesforce account and contact for an onboarded distributor, then opens a ServiceNow onboarding task for the commercial operations team.

naftiko: '0.5'
info:
  label: Salesforce Distributor Onboarding
  description: Creates a new Salesforce account and contact for an onboarded distributor, then opens a ServiceNow onboarding task for the commercial operations team.
  tags:
  - sales
  - crm
  - salesforce
  - servicenow
  - onboarding
  - distributor
capability:
  exposes:
  - type: mcp
    namespace: distributor-onboarding
    port: 8080
    tools:
    - name: onboard-distributor
      description: Given distributor company name, primary contact, and region, create a Salesforce account and contact, then open a ServiceNow commercial onboarding task.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The distributor's legal company name.
      - name: contact_name
        in: body
        type: string
        description: The primary contact's full name at the distributor.
      - name: contact_email
        in: body
        type: string
        description: The primary contact's email address.
      - name: region
        in: body
        type: string
        description: The sales region for the distributor (e.g., 'NA', 'LATAM', 'EMEA').
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{company_name}}'
          type: Distributor
          region: '{{region}}'
      - name: create-contact
        type: call
        call: salesforce.create-contact
        with:
          account_id: '{{create-account.id}}'
          name: '{{contact_name}}'
          email: '{{contact_email}}'
      - name: open-onboarding-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Distributor onboarding: {{company_name}} — {{region}}'
          category: commercial_onboarding
          description: 'Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}}).'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.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
Open in Framework → View in Fleet → salesforce-distributor-onboarding.yml

Syncs trade promotion opportunity data from Salesforce to the planning team's Power BI dataset for near-real-time revenue reporting.

naftiko: '0.5'
info:
  label: Salesforce Trade Promotion Opportunity Sync
  description: Syncs trade promotion opportunity data from Salesforce to the planning team's Power BI dataset for near-real-time revenue reporting.
  tags:
  - sales
  - crm
  - salesforce
  - power-bi
  - reporting
  - trade-promotion
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: sync-trade-promotion-data
      description: Query Salesforce for trade promotion opportunities updated in the past 24 hours and push the results to the Power BI dataset for revenue planning.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to push updated opportunity data into.
      - name: table_name
        in: body
        type: string
        description: The Power BI table name within the dataset (e.g., 'TradeOpportunities').
      steps:
      - name: query-opportunities
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE RecordType.Name = 'Trade Promotion' AND LastModifiedDate = LAST_N_DAYS:1
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          table_name: '{{table_name}}'
          rows: '{{query-opportunities.records}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-records
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: rows
      path: /datasets/{{dataset_id}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → salesforce-trade-promotion-opportunity-sync.yml

Monitors Snowflake sales analytics pipelines, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.

naftiko: '0.5'
info:
  label: Snowflake Sales Analytics Pipeline Monitor
  description: Monitors Snowflake sales analytics pipelines, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.
  tags:
  - analytics
  - snowflake
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-sales-pipeline
      description: 'Monitor Snowflake sales pipeline: check status, verify Datadog metrics, create ServiceNow incident on failure.'
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name.
      steps:
      - name: get-task-status
        type: call
        call: snowflake.get-task-status
        with:
          task_name: '{{task_name}}'
      - name: check-datadog-metrics
        type: call
        call: datadog.get-pipeline-metrics
        with:
          pipeline_name: '{{task_name}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Sales pipeline alert: {{task_name}}'
          description: 'State: {{get-task-status.state}}. Rows loaded: {{get-task-status.rows_loaded}}. Error: {{get-task-status.error_message}}.'
          category: data_pipeline
          assignment_group: Data_Engineering
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pepsico.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: tasks
      path: /statements
      operations:
      - name: get-task-status
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      value: $secrets.datadog_api_key
    resources:
    - name: pipeline-metrics
      path: /metrics/query?query=pipeline:{{pipeline_name}}
      inputParameters:
      - name: pipeline_name
        in: query
      operations:
      - name: get-pipeline-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pepsico.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
Open in Framework → View in Fleet → snowflake-sales-analytics-pipeline-monitor.yml

Orchestrates new supplier onboarding by creating a vendor in SAP Ariba, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Onboarding Orchestrator
  description: Orchestrates new supplier onboarding by creating a vendor in SAP Ariba, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.
  tags:
  - procurement
  - sap-ariba
  - sharepoint
  - microsoft-teams
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: procurement-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: 'Orchestrate supplier onboarding: create SAP Ariba vendor, set up SharePoint workspace, notify procurement.'
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The supplier company name.
      - name: vendor_country
        in: body
        type: string
        description: The supplier country code.
      - name: category
        in: body
        type: string
        description: The procurement category.
      steps:
      - name: create-ariba-vendor
        type: call
        call: ariba.create-supplier
        with:
          name: '{{vendor_name}}'
          country: '{{vendor_country}}'
          category: '{{category}}'
      - name: create-contract-workspace
        type: call
        call: sharepoint.create-folder
        with:
          site_id: procurement
          folder_path: Vendors/{{vendor_name}}
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-ops
          text: 'New supplier onboarded: {{vendor_name}} ({{vendor_country}}). Ariba ID: {{create-ariba-vendor.supplier_id}}. Category: {{category}}. SharePoint workspace created.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-onboarding-orchestrator.yml

Orchestrates a snack brand campaign launch by creating the campaign in Salesforce, configuring Google Analytics tracking, and posting the announcement to Microsoft Teams.

naftiko: '0.5'
info:
  label: Snack Brand Marketing Campaign Launch
  description: Orchestrates a snack brand campaign launch by creating the campaign in Salesforce, configuring Google Analytics tracking, and posting the announcement to Microsoft Teams.
  tags:
  - marketing
  - brand-management
  - salesforce
  - google-analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: launch-snack-campaign
      description: Orchestrate snack brand campaign launch across Salesforce, Google Analytics, and Teams.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The campaign name.
      - name: brand
        in: body
        type: string
        description: The PepsiCo snack brand, e.g. Lay's, Doritos, Cheetos.
      - name: start_date
        in: body
        type: string
        description: Campaign start date in YYYY-MM-DD format.
      - name: budget
        in: body
        type: string
        description: Campaign budget in USD.
      steps:
      - name: create-sf-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          brand: '{{brand}}'
          start_date: '{{start_date}}'
          budgeted_cost: '{{budget}}'
      - name: setup-ga-tracking
        type: call
        call: ga.create-custom-dimension
        with:
          campaign_id: '{{create-sf-campaign.id}}'
          campaign_name: '{{campaign_name}}'
      - name: announce-launch
        type: call
        call: msteams.send-message
        with:
          channel_id: snack-marketing
          text: 'New campaign launched: {{campaign_name}} for {{brand}}. Salesforce ID: {{create-sf-campaign.id}}. Budget: ${{budget}}. Start: {{start_date}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: ga
    baseUri: https://analyticsadmin.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: custom-dimensions
      path: /properties/pepsico/customDimensions
      operations:
      - name: create-custom-dimension
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snack-brand-marketing-campaign-launch.yml

Retrieves key account metrics from Salesforce for a major consumer account and posts an account health digest to the key account manager's Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Consumer Account Health Digest
  description: Retrieves key account metrics from Salesforce for a major consumer account and posts an account health digest to the key account manager's Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - key-account
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: kam-ops
    port: 8080
    tools:
    - name: digest-key-account-health
      description: Given a Salesforce account ID and key account manager's Teams UPN, fetch open opportunities, last activity, and revenue metrics and post an account health digest.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the key consumer account.
      - name: kam_teams_upn
        in: body
        type: string
        description: The Teams UPN of the key account manager.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{kam_teams_upn}}'
          text: 'Key Account Health: {{get-account.Name}} | Annual Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCases}} | Last Activity: {{get-account.LastActivityDate}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pepsico.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-consumer-account-health-digest.yml

Retrieves Salesforce retail account metrics for a P&G brand and posts an account health digest to the key account manager's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Brand Account Health Digest
  description: Retrieves Salesforce retail account metrics for a P&G brand and posts an account health digest to the key account manager's Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - key-account
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: kam-reporting
    port: 8080
    tools:
    - name: digest-account-health
      description: Given a Salesforce account ID and KAM Teams UPN, fetch open opportunities, recent activity date, and revenue metrics, then post an account health digest.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the retail partner account.
      - name: kam_teams_upn
        in: body
        type: string
        description: The Teams UPN of the key account manager to notify.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{kam_teams_upn}}'
          text: 'Account Health: {{get-account.Name}} | Annual Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCasesCount}} | Last Activity: {{get-account.LastActivityDate}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-brand-account-health-digest.yml

Processes Cobalt penetration test findings, logs in Snowflake, creates Jira remediation tickets for critical issues, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cobalt Penetration Test Result Processor
  description: Processes Cobalt penetration test findings, logs in Snowflake, creates Jira remediation tickets for critical issues, and alerts the security team via Microsoft Teams.
  tags:
  - security
  - cobalt
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cobalt_penetration_t
    port: 8080
    tools:
    - name: cobalt-penetration
      description: Given an execution date, run the cobalt penetration test result processor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.COBALT_PENETRATION_TEST_RESULT_PROCESSOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.COBALT_PENETRATION_TEST_RESULT_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Cobalt Penetration Test Result Processor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_cobalt_penetration_t_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cobalt-penetration-test-result-processor.yml

When a Figma design is marked for review, creates Jira review tasks, assigns to the UX team, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Figma Design Review Workflow
  description: When a Figma design is marked for review, creates Jira review tasks, assigns to the UX team, and notifies stakeholders via Microsoft Teams.
  tags:
  - design
  - figma
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: figma_design_review_
    port: 8080
    tools:
    - name: figma-design
      description: Given an execution date, run the figma design review workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.FIGMA_DESIGN_REVIEW_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.FIGMA_DESIGN_REVIEW_WORKFLOW_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Figma Design Review Workflow - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_figma_design_review__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → figma-design-review-workflow.yml

Creates a new vendor profile in SAP Ariba for a qualified supplier and opens a ServiceNow vendor setup task for the procurement team.

naftiko: '0.5'
info:
  label: SAP Ariba Vendor Onboarding
  description: Creates a new vendor profile in SAP Ariba for a qualified supplier and opens a ServiceNow vendor setup task for the procurement team.
  tags:
  - procurement
  - sap-ariba
  - vendor-management
  - servicenow
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Given a vendor company name, contact email, and country, register the vendor in SAP Ariba and create a ServiceNow vendor setup task for procurement.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The legal company name of the new vendor.
      - name: vendor_email
        in: body
        type: string
        description: The primary contact email address at the vendor.
      - name: country
        in: body
        type: string
        description: The vendor's country of incorporation (ISO 2-letter code).
      steps:
      - name: register-vendor
        type: call
        call: ariba.create-supplier
        with:
          name: '{{vendor_name}}'
          email: '{{vendor_email}}'
          country: '{{country}}'
      - name: create-setup-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor Onboarding: {{vendor_name}} ({{country}})'
          category: vendor_management
          description: 'New vendor registered in Ariba: {{register-vendor.vendor_id}}. Contact: {{vendor_email}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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
Open in Framework → View in Fleet → sap-ariba-vendor-onboarding.yml

Fetches P&G LinkedIn company page engagement metrics and posts a monthly brand performance digest to the global communications Microsoft Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Brand Performance Digest
  description: Fetches P&G LinkedIn company page engagement metrics and posts a monthly brand performance digest to the global communications Microsoft Teams channel.
  tags:
  - marketing
  - linkedin
  - social
  - reporting
  - microsoft-teams
  - brand
capability:
  exposes:
  - type: mcp
    namespace: brand-social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-performance
      description: Retrieve LinkedIn company page follower and engagement statistics for the past 30 days and post a brand performance digest to the global communications Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The LinkedIn organization ID for P&G's company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the global communications team.
      steps:
      - name: get-follower-stats
        type: call
        call: linkedin.get-follower-statistics
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'P&G LinkedIn Performance (30d): Followers: {{get-follower-stats.follower_count}} | New Followers: +{{get-follower-stats.gained_30d}} | Engagement Rate: {{get-follower-stats.engagement_rate}}%'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: follower-statistics
      path: /organizationalEntityFollowerStatistics
      inputParameters:
      - name: organization_id
        in: query
      operations:
      - name: get-follower-statistics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-brand-performance-digest.yml

Monitors MRP exception messages in SAP via Snowflake, flags critical shortages, creates ServiceNow tickets, and alerts the supply planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Material Requirements Planning Alert
  description: Monitors MRP exception messages in SAP via Snowflake, flags critical shortages, creates ServiceNow tickets, and alerts the supply planning team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_material_require
    port: 8080
    tools:
    - name: sap-material
      description: Given an execution date, run the sap material requirements planning alert process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_MATERIAL_REQUIREMENTS_PLANNING_ALERT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_MATERIAL_REQUIREMENTS_PLAN_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: supply-chain
          short_description: SAP Material Requirements Planning Alert processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_material_require_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-material-requirements-planning-alert.yml

Calculates warehouse space utilization from SAP data in Snowflake, flags facilities approaching capacity, and notifies the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Warehouse Space Utilization Report
  description: Calculates warehouse space utilization from SAP data in Snowflake, flags facilities approaching capacity, and notifies the logistics team via Microsoft Teams.
  tags:
  - logistics
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_warehouse_space_
    port: 8080
    tools:
    - name: sap-warehouse
      description: Given an execution date, run the sap warehouse space utilization report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_WAREHOUSE_SPACE_UTILIZATION_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_WAREHOUSE_SPACE_UTILIZATIO_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_warehouse_space__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-warehouse-space-utilization-report.yml

Validates new product launch readiness across SAP material master, marketing assets, and retail distribution, then notifies the brand team via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Launch Readiness Checker
  description: Validates new product launch readiness across SAP material master, marketing assets, and retail distribution, then notifies the brand team via Microsoft Teams.
  tags:
  - product-launch
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: new_product_launch_r
    port: 8080
    tools:
    - name: new-product
      description: Given an execution date, run the new product launch readiness checker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NEW_PRODUCT_LAUNCH_READINESS_CHECKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NEW_PRODUCT_LAUNCH_READINESS_C_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_new_product_launch_r_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-launch-readiness-checker.yml

When Azure costs approach budget thresholds, logs the alert in Snowflake, creates a ServiceNow request for review, and notifies the cloud governance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure FinOps Budget Alert Handler
  description: When Azure costs approach budget thresholds, logs the alert in Snowflake, creates a ServiceNow request for review, and notifies the cloud governance team via Microsoft Teams.
  tags:
  - cloud
  - microsoft-azure
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_finops_budget_
    port: 8080
    tools:
    - name: azure-finops
      description: Given an execution date, run the azure finops budget alert handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_FINOPS_BUDGET_ALERT_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_FINOPS_BUDGET_ALERT_HAND_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: cloud
          short_description: Azure FinOps Budget Alert Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_finops_budget__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-finops-budget-alert-handler.yml

When a P1 production incident is declared, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: P1 Production Incident Response Chain
  description: When a P1 production incident is declared, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given an affected P&G system and impact description, create a ServiceNow P1 incident, add a Datadog event annotation, and alert the engineering team via Teams.
      inputParameters:
      - name: affected_system
        in: body
        type: string
        description: The P&G system or service experiencing the incident.
      - name: impact_description
        in: body
        type: string
        description: Brief description of the business impact.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the engineering on-call alert.
      steps:
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'P1: {{affected_system}} — {{impact_description}}'
          urgency: '1'
          priority: '1'
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'P1 Incident: {{affected_system}}'
          text: SNOW {{create-p1-incident.number}} — {{impact_description}}
          alert_type: error
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'P1 INCIDENT: {{affected_system}} | Impact: {{impact_description}} | SNOW: {{create-p1-incident.number}} | Datadog: {{annotate-datadog.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → p1-production-incident-response-chain.yml

Monitors Informatica data quality job results in Snowflake, creates Jira tickets for failed rules, and notifies the data governance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Informatica Data Quality Job Monitor
  description: Monitors Informatica data quality job results in Snowflake, creates Jira tickets for failed rules, and notifies the data governance team via Microsoft Teams.
  tags:
  - data-quality
  - informatica
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: informatica_data_qua
    port: 8080
    tools:
    - name: informatica-data
      description: Given an execution date, run the informatica data quality job monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.INFORMATICA_DATA_QUALITY_JOB_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.INFORMATICA_DATA_QUALITY_JOB_M_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Informatica Data Quality Job Monitor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_informatica_data_qua_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-job-monitor.yml

Initiates performance calibration sessions by pulling ratings from Snowflake, creates Jira tasks for HR partners, and notifies managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Calibration Workflow
  description: Initiates performance calibration sessions by pulling ratings from Snowflake, creates Jira tasks for HR partners, and notifies managers via Microsoft Teams.
  tags:
  - hr
  - performance
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_performance_
    port: 8080
    tools:
    - name: workday-performance
      description: Given an execution date, run the workday performance calibration workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_PERFORMANCE_CALIBRATION_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_PERFORMANCE_CALIBRATIO_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Workday Performance Calibration Workflow - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_performance__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-calibration-workflow.yml

When a product recall is initiated, traces affected batches in SAP, logs the scope in Snowflake, creates a ServiceNow crisis case, and alerts the quality and legal teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Batch Recall Coordination Chain
  description: When a product recall is initiated, traces affected batches in SAP, logs the scope in Snowflake, creates a ServiceNow crisis case, and alerts the quality and legal teams via Microsoft Teams.
  tags:
  - quality
  - recall
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_batch_recall_coo
    port: 8080
    tools:
    - name: sap-batch
      description: Given an execution date, run the sap batch recall coordination chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_BATCH_RECALL_COORDINATION_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_BATCH_RECALL_COORDINATION__RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: quality
          short_description: SAP Batch Recall Coordination Chain processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_batch_recall_coo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-batch-recall-coordination-chain.yml

Monitors consumer panel data refresh status in Snowflake, flags delayed feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Panel Data Refresh Monitor
  description: Monitors consumer panel data refresh status in Snowflake, flags delayed feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams.
  tags:
  - analytics
  - consumer-insights
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer_panel_data_
    port: 8080
    tools:
    - name: consumer-panel
      description: Given an execution date, run the consumer panel data refresh monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CONSUMER_PANEL_DATA_REFRESH_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CONSUMER_PANEL_DATA_REFRESH_MO_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: analytics
          short_description: Consumer Panel Data Refresh Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_consumer_panel_data__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-panel-data-refresh-monitor.yml

Analyzes plant energy consumption data in Snowflake, identifies optimization opportunities, creates Jira improvement tasks, and notifies the sustainability team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Plant Energy Consumption Optimizer
  description: Analyzes plant energy consumption data in Snowflake, identifies optimization opportunities, creates Jira improvement tasks, and notifies the sustainability team via Microsoft Teams.
  tags:
  - sustainability
  - manufacturing
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: plant_energy_consump
    port: 8080
    tools:
    - name: plant-energy
      description: Given an execution date, run the plant energy consumption optimizer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PLANT_ENERGY_CONSUMPTION_OPTIMIZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PLANT_ENERGY_CONSUMPTION_OPTIM_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Plant Energy Consumption Optimizer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_plant_energy_consump_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plant-energy-consumption-optimizer.yml

Triggers a Power BI dataset refresh for the global consumer goods revenue dashboard and notifies the commercial analytics team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Consumer Goods Revenue Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the global consumer goods revenue dashboard and notifies the commercial analytics team in Microsoft Teams.
  tags:
  - data
  - analytics
  - power-bi
  - finance
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: refresh-revenue-dashboard
      description: Trigger a Power BI refresh for the P&G global revenue dashboard and notify the commercial analytics team in Teams.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the global revenue dashboard.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the analytics team notification.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Global revenue dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-consumer-goods-revenue-dashboard-refresh.yml

When a Temporal workflow fails, captures error details, creates a ServiceNow incident, logs in Snowflake, and notifies the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Temporal Workflow Failure Handler
  description: When a Temporal workflow fails, captures error details, creates a ServiceNow incident, logs in Snowflake, and notifies the platform team via Microsoft Teams.
  tags:
  - automation
  - temporal
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: temporal_workflow_fa
    port: 8080
    tools:
    - name: temporal-workflow
      description: Given an execution date, run the temporal workflow failure handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.TEMPORAL_WORKFLOW_FAILURE_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.TEMPORAL_WORKFLOW_FAILURE_HAND_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: automation
          short_description: Temporal Workflow Failure Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_temporal_workflow_fa_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → temporal-workflow-failure-handler.yml

Syncs trade promotion opportunities from Salesforce to Snowflake, computes pipeline forecasts, and notifies sales leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce CPG Promotion Pipeline Sync
  description: Syncs trade promotion opportunities from Salesforce to Snowflake, computes pipeline forecasts, and notifies sales leadership via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_cpg_promo
    port: 8080
    tools:
    - name: salesforce-cpg
      description: Given an execution date, run the salesforce cpg promotion pipeline sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_CPG_PROMOTION_PIPELINE_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_CPG_PROMOTION_PIPEL_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_cpg_promo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-cpg-promotion-pipeline-sync.yml

Identifies employees with incomplete mandatory training in Workday, logs in Snowflake, creates ServiceNow follow-up tasks, and sends reminders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Learning Enrollment Reminder
  description: Identifies employees with incomplete mandatory training in Workday, logs in Snowflake, creates ServiceNow follow-up tasks, and sends reminders via Microsoft Teams.
  tags:
  - hr
  - learning
  - workday
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_learning_enr
    port: 8080
    tools:
    - name: workday-learning
      description: Given an execution date, run the workday learning enrollment reminder process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_LEARNING_ENROLLMENT_REMINDER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_LEARNING_ENROLLMENT_RE_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: hr
          short_description: Workday Learning Enrollment Reminder processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_learning_enr_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-learning-enrollment-reminder.yml

Monitors retail shelf availability data in Snowflake, creates Jira tasks for field reps when out-of-stock thresholds are breached, and notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Shelf Availability Alert
  description: Monitors retail shelf availability data in Snowflake, creates Jira tasks for field reps when out-of-stock thresholds are breached, and notifies the sales team via Microsoft Teams.
  tags:
  - retail
  - supply-chain
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail_shelf_availab
    port: 8080
    tools:
    - name: retail-shelf
      description: Given an execution date, run the retail shelf availability alert process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.RETAIL_SHELF_AVAILABILITY_ALERT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.RETAIL_SHELF_AVAILABILITY_ALER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Retail Shelf Availability Alert - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_retail_shelf_availab_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-shelf-availability-alert.yml

Aggregates brand health metrics from Salesforce and Snowflake, refreshes Power BI dashboards, and sends weekly digests to brand leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Brand Health Digest
  description: Aggregates brand health metrics from Salesforce and Snowflake, refreshes Power BI dashboards, and sends weekly digests to brand leadership via Microsoft Teams.
  tags:
  - marketing
  - salesforce
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_brand_hea
    port: 8080
    tools:
    - name: salesforce-brand
      description: Given an execution date, run the salesforce brand health digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_BRAND_HEALTH_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_BRAND_HEALTH_DIGEST_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_brand_hea_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-brand-health-digest.yml

Compares actual Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Headcount vs Plan Variance
  description: Compares actual Workday headcount against plan in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_headcount_vs
    port: 8080
    tools:
    - name: workday-headcount
      description: Given an execution date, run the workday headcount vs plan variance process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_VARIANCE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_VARI_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_headcount_vs_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-vs-plan-variance.yml

Tracks aging of open requisitions from Workday in Snowflake, creates Jira follow-up tasks for stale positions, and alerts recruiting managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Open Position Aging Report
  description: Tracks aging of open requisitions from Workday in Snowflake, creates Jira follow-up tasks for stale positions, and alerts recruiting managers via Microsoft Teams.
  tags:
  - hr
  - recruiting
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_open_positio
    port: 8080
    tools:
    - name: workday-open
      description: Given an execution date, run the workday open position aging report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_OPEN_POSITION_AGING_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_OPEN_POSITION_AGING_RE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Workday Open Position Aging Report - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_open_positio_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-open-position-aging-report.yml

Retrieves stock overview for a material across all plants in SAP.

naftiko: '0.5'
info:
  label: SAP Plant Stock Overview
  description: Retrieves stock overview for a material across all plants in SAP.
  tags:
  - supply-chain
  - sap
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-stock-overview
      description: Given a SAP material number, retrieve stock levels across all plants. Use for inventory management.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-stock
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: total_stock
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-plant-stock-overview.yml

Checks the refresh status of consumer insights Power BI datasets.

naftiko: '0.5'
info:
  label: Power BI Consumer Dashboard Refresh Status
  description: Checks the refresh status of consumer insights Power BI datasets.
  tags:
  - analytics
  - power-bi
  - consumer-insights
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-refresh-status
      description: Given a Power BI dataset ID, check the last refresh status. Use for dashboard monitoring.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].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: get-refresh
        method: GET
Open in Framework → View in Fleet → power-bi-consumer-dashboard-refresh-status.yml

Exports active headcount from Workday grouped by region and business unit, then posts a summary to the HR leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot by Region
  description: Exports active headcount from Workday grouped by region and business unit, then posts a summary to the HR leadership Microsoft Teams channel.
  tags:
  - hr
  - workforce-planning
  - workday
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-regional-headcount
      description: Retrieve active employee headcount from Workday grouped by region and post a formatted headcount digest to the HR Teams channel.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The snapshot date in YYYY-MM-DD format.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the HR leadership headcount report.
      steps:
      - name: export-headcount
        type: call
        call: workday.list-workers
        with:
          status: active
          as_of_date: '{{as_of_date}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'P&G Headcount Snapshot ({{as_of_date}}): {{export-headcount.total}} active employees across {{export-headcount.region_count}} regions.'
  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: /pg/workers
      inputParameters:
      - name: status
        in: query
      - name: as_of_date
        in: query
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-snapshot-by-region.yml

Queries Salesforce for open retail opportunities by brand category and posts a pipeline digest to the commercial sales leadership Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Retail Opportunity Pipeline Digest
  description: Queries Salesforce for open retail opportunities by brand category and posts a pipeline digest to the commercial sales leadership Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: commercial-reporting
    port: 8080
    tools:
    - name: digest-retail-pipeline
      description: Given a Salesforce brand category and Teams channel, query open opportunities and post a retail pipeline digest with deal counts and total value.
      inputParameters:
      - name: brand_category
        in: body
        type: string
        description: The P&G brand category to filter opportunities (e.g., 'Fabric Care', 'Baby Care', 'Beauty').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the sales leadership digest.
      steps:
      - name: query-opportunities
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE Brand_Category__c = '{{brand_category}}' AND IsClosed = false
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Retail Pipeline — {{brand_category}}: {{query-opportunities.totalSize}} open opportunities | Pipeline value: ${{query-opportunities.total_amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-records
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-retail-opportunity-pipeline-digest.yml

Validates SAP period-close readiness by checking open items in Snowflake, creates ServiceNow tasks for blockers, and notifies the accounting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Period Close Readiness Checker
  description: Validates SAP period-close readiness by checking open items in Snowflake, creates ServiceNow tasks for blockers, and notifies the accounting team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_period_close_rea
    port: 8080
    tools:
    - name: sap-period
      description: Given an execution date, run the sap period close readiness checker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PERIOD_CLOSE_READINESS_CHECKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PERIOD_CLOSE_READINESS_CHE_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Period Close Readiness Checker processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_period_close_rea_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-close-readiness-checker.yml

Monitors retail POS data ingestion pipelines in Snowflake, flags missing retailer feeds, creates ServiceNow incidents, and alerts the data operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail POS Data Ingestion Monitor
  description: Monitors retail POS data ingestion pipelines in Snowflake, flags missing retailer feeds, creates ServiceNow incidents, and alerts the data operations team via Microsoft Teams.
  tags:
  - data-engineering
  - retail
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail_pos_data_inge
    port: 8080
    tools:
    - name: retail-pos
      description: Given an execution date, run the retail pos data ingestion monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.RETAIL_POS_DATA_INGESTION_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.RETAIL_POS_DATA_INGESTION_MONI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: data-engineering
          short_description: Retail POS Data Ingestion Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_retail_pos_data_inge_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-pos-data-ingestion-monitor.yml

Queries Datadog for the health of P&G e-commerce platform services.

naftiko: '0.5'
info:
  label: Datadog E-Commerce Service Health
  description: Queries Datadog for the health of P&G e-commerce platform services.
  tags:
  - monitoring
  - datadog
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-ecommerce-health
      description: Given a Datadog service name, retrieve health status. Use for e-commerce platform monitoring.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-service-health
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.status
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: services
      path: /service_level_objectives?query={{service_name}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-service-health
        method: GET
Open in Framework → View in Fleet → datadog-e-commerce-service-health.yml

Aggregates social media sentiment data in Snowflake, runs trend analysis, refreshes Power BI dashboards, and notifies the consumer insights team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Sentiment Analysis Pipeline
  description: Aggregates social media sentiment data in Snowflake, runs trend analysis, refreshes Power BI dashboards, and notifies the consumer insights team via Microsoft Teams.
  tags:
  - analytics
  - consumer-insights
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer_sentiment_a
    port: 8080
    tools:
    - name: consumer-sentiment
      description: Given an execution date, run the consumer sentiment analysis pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CONSUMER_SENTIMENT_ANALYSIS_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CONSUMER_SENTIMENT_ANALYSIS_PI_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_consumer_sentiment_a_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-sentiment-analysis-pipeline.yml

Pulls Azure DevOps sprint velocity data into Snowflake, computes team trends, and sends sprint reports to engineering managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Sprint Velocity Reporter
  description: Pulls Azure DevOps sprint velocity data into Snowflake, computes team trends, and sends sprint reports to engineering managers via Microsoft Teams.
  tags:
  - devops
  - azure-devops
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_devops_sprint_
    port: 8080
    tools:
    - name: azure-devops
      description: Given an execution date, run the azure devops sprint velocity reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_DEVOPS_SPRINT_VELOCITY_REPORTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_DEVOPS_SPRINT_VELOCITY_R_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_devops_sprint__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-sprint-velocity-reporter.yml

Monitors Datadog for eCommerce application performance alerts and creates a ServiceNow incident when a critical monitor fires on the P&G.com platform.

naftiko: '0.5'
info:
  label: Datadog eCommerce Monitoring Alert
  description: Monitors Datadog for eCommerce application performance alerts and creates a ServiceNow incident when a critical monitor fires on the P&G.com platform.
  tags:
  - observability
  - datadog
  - servicenow
  - ecommerce
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-ops
    port: 8080
    tools:
    - name: handle-ecommerce-alert
      description: Given a Datadog monitor ID, alert severity, and affected eCommerce service, create a ServiceNow incident and alert the digital operations team in Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that fired the eCommerce alert.
      - name: monitor_name
        in: body
        type: string
        description: The human-readable Datadog monitor name.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: ''critical'' or ''warning''.'
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the digital operations team.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'eCommerce Alert [{{severity}}]: {{monitor_name}}'
          category: ecommerce_monitoring
          urgency: '1'
      - name: alert-digital-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'eCommerce Alert [{{severity}}]: {{monitor_name}} | Monitor: {{monitor_id}} | SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-ecommerce-monitoring-alert.yml

Monitors recipe formula changes in SAP, validates compliance in Snowflake, creates ServiceNow change records, and notifies the R&D team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Recipe Management Change Tracker
  description: Monitors recipe formula changes in SAP, validates compliance in Snowflake, creates ServiceNow change records, and notifies the R&D team via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_recipe_managemen
    port: 8080
    tools:
    - name: sap-recipe
      description: Given an execution date, run the sap recipe management change tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_RECIPE_MANAGEMENT_CHANGE_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_RECIPE_MANAGEMENT_CHANGE_T_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: manufacturing
          short_description: SAP Recipe Management Change Tracker processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_recipe_managemen_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-recipe-management-change-tracker.yml

Retrieves a goods movement document from SAP by document number, returning material, quantity, movement type, and posting date.

naftiko: '0.5'
info:
  label: SAP Goods Movement Lookup
  description: Retrieves a goods movement document from SAP by document number, returning material, quantity, movement type, and posting date.
  tags:
  - logistics
  - sap
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: goods-movement
    port: 8080
    tools:
    - name: get-goods-movement
      description: Given a SAP material document number, retrieve goods movement details including movement type, quantity, and storage location. Use for inventory transaction audits.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: The SAP material document number.
      call: sap.get-goods-movement
      with:
        document_number: '{{document_number}}'
      outputParameters:
      - name: movement_type
        type: string
        mapping: $.d.GoodsMovementType
      - name: quantity
        type: string
        mapping: $.d.QuantityInEntryUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentHeader('{{document_number}}')
      inputParameters:
      - name: document_number
        in: path
      operations:
      - name: get-goods-movement
        method: GET
Open in Framework → View in Fleet → sap-goods-movement-lookup.yml

Audits Google Tag Manager containers for compliance with tagging standards, logs findings in Snowflake, and notifies the web analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Audit
  description: Audits Google Tag Manager containers for compliance with tagging standards, logs findings in Snowflake, and notifies the web analytics team via Microsoft Teams.
  tags:
  - analytics
  - google-tag-manager
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: google_tag_manager_c
    port: 8080
    tools:
    - name: google-tag
      description: Given an execution date, run the google tag manager container audit process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GOOGLE_TAG_MANAGER_CONTAINER_AUDIT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GOOGLE_TAG_MANAGER_CONTAINER_A_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_google_tag_manager_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-tag-manager-container-audit.yml

Pulls LinkedIn employer brand metrics, stores in Snowflake, and distributes talent acquisition insights to the HR team via Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Analytics
  description: Pulls LinkedIn employer brand metrics, stores in Snowflake, and distributes talent acquisition insights to the HR team via Microsoft Teams.
  tags:
  - hr
  - linkedin
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: linkedin_employer_br
    port: 8080
    tools:
    - name: linkedin-employer
      description: Given an execution date, run the linkedin employer brand analytics process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.LINKEDIN_EMPLOYER_BRAND_ANALYTICS LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.LINKEDIN_EMPLOYER_BRAND_ANALYT_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_linkedin_employer_br_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-analytics.yml

Given a consumer complaint narrative, uses Anthropic Claude to classify the complaint category and urgency, then creates a Salesforce case for the consumer affairs team.

naftiko: '0.5'
info:
  label: AI-Assisted Consumer Complaint Triage
  description: Given a consumer complaint narrative, uses Anthropic Claude to classify the complaint category and urgency, then creates a Salesforce case for the consumer affairs team.
  tags:
  - ai
  - consumer-affairs
  - anthropic
  - salesforce
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: consumer-affairs-ai
    port: 8080
    tools:
    - name: triage-consumer-complaint
      description: Given a consumer complaint text and product name, invoke Anthropic Claude to classify the complaint type and urgency, then create a Salesforce consumer affairs case.
      inputParameters:
      - name: complaint_text
        in: body
        type: string
        description: The full consumer complaint narrative text.
      - name: product_name
        in: body
        type: string
        description: The P&G product associated with the complaint (e.g., 'Tide Pods', 'Pampers Size 4').
      - name: consumer_email
        in: body
        type: string
        description: The consumer's email address for case creation.
      steps:
      - name: classify-complaint
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Classify this consumer complaint about {{product_name}} into: 1) Category (Product Quality, Packaging, Performance, Safety, Other), 2) Urgency (Immediate, High, Standard), 3) Recommended action. Complaint: {{complaint_text}}'
      - name: create-sf-case
        type: call
        call: salesforce.create-case
        with:
          subject: Consumer Complaint — {{product_name}}
          description: '{{complaint_text}}


            AI Classification: {{classify-complaint.content}}'
          suppliedEmail: '{{consumer_email}}'
          origin: AI Triage
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://pg.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
Open in Framework → View in Fleet → ai-assisted-consumer-complaint-triage.yml

Processes Salesforce Einstein lead scores into Snowflake, identifies high-priority leads, and notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Einstein Lead Scoring Pipeline
  description: Processes Salesforce Einstein lead scores into Snowflake, identifies high-priority leads, and notifies the sales team via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_einstein_
    port: 8080
    tools:
    - name: salesforce-einstein
      description: Given an execution date, run the salesforce einstein lead scoring pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_EINSTEIN_LEAD_SCORING_PIPELIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_EINSTEIN_LEAD_SCORI_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_einstein__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-einstein-lead-scoring-pipeline.yml

Collects Cisco Webex meeting usage data, aggregates in Snowflake, and distributes adoption reports to IT leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cisco Webex Meeting Usage Analytics
  description: Collects Cisco Webex meeting usage data, aggregates in Snowflake, and distributes adoption reports to IT leadership via Microsoft Teams.
  tags:
  - collaboration
  - cisco-webex
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cisco_webex_meeting_
    port: 8080
    tools:
    - name: cisco-webex
      description: Given an execution date, run the cisco webex meeting usage analytics process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CISCO_WEBEX_MEETING_USAGE_ANALYTICS LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CISCO_WEBEX_MEETING_USAGE_ANAL_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_cisco_webex_meeting__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cisco-webex-meeting-usage-analytics.yml

When a quality hold is placed on a batch in SAP, creates a ServiceNow investigation case, logs in Snowflake, and notifies the quality assurance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Quality Hold Release Workflow
  description: When a quality hold is placed on a batch in SAP, creates a ServiceNow investigation case, logs in Snowflake, and notifies the quality assurance team via Microsoft Teams.
  tags:
  - quality
  - sap
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_quality_hold_rel
    port: 8080
    tools:
    - name: sap-quality
      description: Given an execution date, run the sap quality hold release workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_QUALITY_HOLD_RELEASE_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_QUALITY_HOLD_RELEASE_WORKF_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: quality
          short_description: SAP Quality Hold Release Workflow processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_quality_hold_rel_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-quality-hold-release-workflow.yml

Analyzes Coupa procurement spend data in Snowflake, identifies savings opportunities, creates Jira action items, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Coupa Procurement Spend Analyzer
  description: Analyzes Coupa procurement spend data in Snowflake, identifies savings opportunities, creates Jira action items, and notifies the procurement team via Microsoft Teams.
  tags:
  - procurement
  - coupa
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: coupa_procurement_sp
    port: 8080
    tools:
    - name: coupa-procurement
      description: Given an execution date, run the coupa procurement spend analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.COUPA_PROCUREMENT_SPEND_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.COUPA_PROCUREMENT_SPEND_ANALYZ_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Coupa Procurement Spend Analyzer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_coupa_procurement_sp_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → coupa-procurement-spend-analyzer.yml

Syncs Adobe Campaign email performance metrics to Snowflake, analyzes engagement trends, and distributes reports to the digital marketing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Adobe Campaign Email Performance Sync
  description: Syncs Adobe Campaign email performance metrics to Snowflake, analyzes engagement trends, and distributes reports to the digital marketing team via Microsoft Teams.
  tags:
  - marketing
  - adobe-campaign
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: adobe_campaign_email
    port: 8080
    tools:
    - name: adobe-campaign
      description: Given an execution date, run the adobe campaign email performance sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ADOBE_CAMPAIGN_EMAIL_PERFORMANCE_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ADOBE_CAMPAIGN_EMAIL_PERFORMAN_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_adobe_campaign_email_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adobe-campaign-email-performance-sync.yml

Computes vendor performance scorecards from SAP data in Snowflake, flags underperforming suppliers, creates Jira review tasks, and notifies procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Vendor Performance Scorecard
  description: Computes vendor performance scorecards from SAP data in Snowflake, flags underperforming suppliers, creates Jira review tasks, and notifies procurement via Microsoft Teams.
  tags:
  - procurement
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_vendor_performan
    port: 8080
    tools:
    - name: sap-vendor
      description: Given an execution date, run the sap vendor performance scorecard process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_VENDOR_PERFORMANCE_SCORECARD LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_VENDOR_PERFORMANCE_SCORECA_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: SAP Vendor Performance Scorecard - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_vendor_performan_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-vendor-performance-scorecard.yml

Tracks packaging waste metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sustainability Packaging Waste Tracker
  description: Tracks packaging waste metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams.
  tags:
  - sustainability
  - manufacturing
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainability_packa
    port: 8080
    tools:
    - name: sustainability-packaging
      description: Given an execution date, run the sustainability packaging waste tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SUSTAINABILITY_PACKAGING_WASTE_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SUSTAINABILITY_PACKAGING_WASTE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sustainability_packa_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainability-packaging-waste-tracker.yml

Reviews SAP Concur travel bookings for policy compliance in Snowflake, creates ServiceNow exceptions for violations, and notifies the travel team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel Booking Compliance
  description: Reviews SAP Concur travel bookings for policy compliance in Snowflake, creates ServiceNow exceptions for violations, and notifies the travel team via Microsoft Teams.
  tags:
  - travel
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_concur_travel_bo
    port: 8080
    tools:
    - name: sap-concur
      description: Given an execution date, run the sap concur travel booking compliance process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CONCUR_TRAVEL_BOOKING_COMPLIANCE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CONCUR_TRAVEL_BOOKING_COMP_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: travel
          short_description: SAP Concur Travel Booking Compliance processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_concur_travel_bo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-booking-compliance.yml

Monitors MuleSoft API integration health metrics in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams.

naftiko: '0.5'
info:
  label: MuleSoft API Integration Health Check
  description: Monitors MuleSoft API integration health metrics in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams.
  tags:
  - integration
  - mulesoft
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mulesoft_api_integra
    port: 8080
    tools:
    - name: mulesoft-api
      description: Given an execution date, run the mulesoft api integration health check process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.MULESOFT_API_INTEGRATION_HEALTH_CHECK LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.MULESOFT_API_INTEGRATION_HEALT_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: integration
          short_description: MuleSoft API Integration Health Check processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_mulesoft_api_integra_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mulesoft-api-integration-health-check.yml

Analyzes GitHub Actions build quality metrics in Snowflake, flags degrading build success rates, creates Jira tickets, and notifies engineering via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Build Quality Monitor
  description: Analyzes GitHub Actions build quality metrics in Snowflake, flags degrading build success rates, creates Jira tickets, and notifies engineering via Microsoft Teams.
  tags:
  - devops
  - github
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_cicd_build_qu
    port: 8080
    tools:
    - name: github-cicd
      description: Given an execution date, run the github ci/cd build quality monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_CICD_BUILD_QUALITY_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_CICD_BUILD_QUALITY_MONI_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: GitHub CI/CD Build Quality Monitor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_cicd_build_qu_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-build-quality-monitor.yml

Checks SAP period-end close task completion for a fiscal period and company code, posting a status digest to the finance leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Period-End Close Monitor
  description: Checks SAP period-end close task completion for a fiscal period and company code, posting a status digest to the finance leadership Microsoft Teams channel.
  tags:
  - finance
  - sap
  - period-close
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: monitor-period-close
      description: Given a fiscal period and company code, check SAP period-end close completion percentage and post a status digest to the finance Teams channel.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The SAP fiscal period to monitor (e.g., '006/2026').
      - name: company_code
        in: body
        type: string
        description: The SAP company code (e.g., 'US01').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance leadership status digest.
      steps:
      - name: get-close-status
        type: call
        call: sap.get-close-tasks
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: post-status
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Period Close Status {{fiscal_period}} ({{company_code}}): {{get-close-status.completion_pct}}% complete. Open tasks: {{get-close-status.open_count}}. Blockers: {{get-close-status.blockers}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pg-s4.sap.com/sap/opu/odata/sap/FCO_PI_CLOSE_COCKPIT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: close-tasks
      path: /ClosingTaskSet
      inputParameters:
      - name: fiscal_period
        in: query
      - name: company_code
        in: query
      operations:
      - name: get-close-tasks
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-end-close-monitor.yml

Lists Okta users in privileged groups who lack MFA enrollment and creates a ServiceNow security task for remediation.

naftiko: '0.5'
info:
  label: Okta Privileged Access MFA Audit
  description: Lists Okta users in privileged groups who lack MFA enrollment and creates a ServiceNow security task for remediation.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - compliance
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-privileged-mfa
      description: Given an Okta privileged access group ID, list members without MFA enrollment and create a ServiceNow security remediation task.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta privileged group ID to audit for MFA compliance.
      steps:
      - name: list-users-without-mfa
        type: call
        call: okta.list-users
        with:
          group_id: '{{okta_group_id}}'
      - name: create-remediation-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: MFA Remediation — {{list-users-without-mfa.count}} privileged users lack MFA
          category: security_compliance
          description: 'Users without MFA in privileged group {{okta_group_id}}: {{list-users-without-mfa.emails}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://pg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_key
      placement: header
    resources:
    - name: users
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pg.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
Open in Framework → View in Fleet → okta-privileged-access-mfa-audit.yml

When consumer complaints in Salesforce exceed thresholds for a product, creates a ServiceNow quality investigation, logs in Snowflake, and alerts the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Complaint Quality Escalation
  description: When consumer complaints in Salesforce exceed thresholds for a product, creates a ServiceNow quality investigation, logs in Snowflake, and alerts the quality team via Microsoft Teams.
  tags:
  - quality
  - salesforce
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer_complaint_q
    port: 8080
    tools:
    - name: consumer-complaint
      description: Given an execution date, run the consumer complaint quality escalation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CONSUMER_COMPLAINT_QUALITY_ESCALATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CONSUMER_COMPLAINT_QUALITY_ESC_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: quality
          short_description: Consumer Complaint Quality Escalation processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_consumer_complaint_q_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-complaint-quality-escalation.yml

Fetches Adobe Analytics campaign performance data for a P&G brand campaign and posts a consumer engagement digest to the brand marketing Teams channel.

naftiko: '0.5'
info:
  label: Consumer Insight Campaign Performance Digest
  description: Fetches Adobe Analytics campaign performance data for a P&G brand campaign and posts a consumer engagement digest to the brand marketing Teams channel.
  tags:
  - marketing
  - analytics
  - reporting
  - microsoft-teams
  - campaign
  - consumer
capability:
  exposes:
  - type: mcp
    namespace: brand-analytics
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given an Adobe Analytics report suite ID and campaign ID, retrieve visits, conversions, and revenue metrics, then post a performance digest to the brand marketing Teams channel.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID for the brand (e.g., 'pg-tide-global').
      - name: campaign_id
        in: body
        type: string
        description: The campaign tracking code or ID to filter metrics.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the brand marketing digest.
      steps:
      - name: get-campaign-metrics
        type: call
        call: adobe-analytics.get-report
        with:
          report_suite: '{{report_suite_id}}'
          campaign: '{{campaign_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Brand Campaign Digest — {{campaign_id}}: Visits: {{get-campaign-metrics.visits}} | Conversions: {{get-campaign-metrics.conversions}} | Revenue: ${{get-campaign-metrics.revenue}} | Bounce Rate: {{get-campaign-metrics.bounce_rate}}%'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{report_suite_id}}/reports
      inputParameters:
      - name: report_suite_id
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-insight-campaign-performance-digest.yml

Monitors customs declaration status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Customs Declaration Monitor
  description: Monitors customs declaration status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.
  tags:
  - compliance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_customs_declarat
    port: 8080
    tools:
    - name: sap-customs
      description: Given an execution date, run the sap customs declaration monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CUSTOMS_DECLARATION_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CUSTOMS_DECLARATION_MONITO_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: SAP Customs Declaration Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_customs_declarat_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-customs-declaration-monitor.yml

Monitors in-transit shipments in SAP via Snowflake, flags delayed deliveries, creates ServiceNow cases, and alerts the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Transportation Shipment Tracker
  description: Monitors in-transit shipments in SAP via Snowflake, flags delayed deliveries, creates ServiceNow cases, and alerts the logistics team via Microsoft Teams.
  tags:
  - logistics
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_transportation_s
    port: 8080
    tools:
    - name: sap-transportation
      description: Given an execution date, run the sap transportation shipment tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_TRANSPORTATION_SHIPMENT_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_TRANSPORTATION_SHIPMENT_TR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: logistics
          short_description: SAP Transportation Shipment Tracker processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_transportation_s_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-transportation-shipment-tracker.yml

Identifies privileged access accounts in Okta for certification review, logs in Snowflake, creates ServiceNow audit tasks, and notifies the IAM team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Okta Privileged Access Certification
  description: Identifies privileged access accounts in Okta for certification review, logs in Snowflake, creates ServiceNow audit tasks, and notifies the IAM team via Microsoft Teams.
  tags:
  - security
  - okta
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: okta_privileged_acce
    port: 8080
    tools:
    - name: okta-privileged
      description: Given an execution date, run the okta privileged access certification process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.OKTA_PRIVILEGED_ACCESS_CERTIFICATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.OKTA_PRIVILEGED_ACCESS_CERTIFI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: Okta Privileged Access Certification processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_okta_privileged_acce_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-certification.yml

Pulls DTC website conversion funnel metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and sends insights to the e-commerce team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Adobe Analytics DTC Conversion Funnel
  description: Pulls DTC website conversion funnel metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and sends insights to the e-commerce team via Microsoft Teams.
  tags:
  - analytics
  - adobe-analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: adobe_analytics_dtc_
    port: 8080
    tools:
    - name: adobe-analytics
      description: Given an execution date, run the adobe analytics dtc conversion funnel process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ADOBE_ANALYTICS_DTC_CONVERSION_FUNNEL LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ADOBE_ANALYTICS_DTC_CONVERSION_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_adobe_analytics_dtc__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-dtc-conversion-funnel.yml

Compares demand forecasts against actual sales in Snowflake, flags significant variances, and notifies the demand planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Demand Forecast Accuracy Monitor
  description: Compares demand forecasts against actual sales in Snowflake, flags significant variances, and notifies the demand planning team via Microsoft Teams.
  tags:
  - supply-chain
  - forecasting
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: demand_forecast_accu
    port: 8080
    tools:
    - name: demand-forecast
      description: Given an execution date, run the demand forecast accuracy monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DEMAND_FORECAST_ACCURACY_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DEMAND_FORECAST_ACCURACY_MONIT_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_demand_forecast_accu_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → demand-forecast-accuracy-monitor.yml

When SAP blocks a sales order due to credit limits, logs the event in Snowflake, creates a ServiceNow case, and notifies the credit management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Credit Management Block Handler
  description: When SAP blocks a sales order due to credit limits, logs the event in Snowflake, creates a ServiceNow case, and notifies the credit management team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_credit_managemen
    port: 8080
    tools:
    - name: sap-credit
      description: Given an execution date, run the sap credit management block handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CREDIT_MANAGEMENT_BLOCK_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CREDIT_MANAGEMENT_BLOCK_HA_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Credit Management Block Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_credit_managemen_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-credit-management-block-handler.yml

Creates a new retailer account and primary contact in Salesforce, opens a ServiceNow onboarding task, and notifies the assigned key account manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce New Retailer Account Onboarding
  description: Creates a new retailer account and primary contact in Salesforce, opens a ServiceNow onboarding task, and notifies the assigned key account manager in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - servicenow
  - onboarding
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retailer-onboarding
    port: 8080
    tools:
    - name: onboard-retailer
      description: Given retailer company name, primary contact details, region, and assigned KAM Teams UPN, create a Salesforce account and contact, open a ServiceNow onboarding task, and notify the KAM.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The retailer's legal company name.
      - name: contact_name
        in: body
        type: string
        description: Primary contact's full name at the retailer.
      - name: contact_email
        in: body
        type: string
        description: Primary contact's email address.
      - name: region
        in: body
        type: string
        description: The sales region (e.g., 'NA', 'EMEA', 'APAC').
      - name: kam_teams_upn
        in: body
        type: string
        description: The Teams UPN of the assigned key account manager.
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{company_name}}'
          type: Retailer
          region: '{{region}}'
      - name: create-contact
        type: call
        call: salesforce.create-contact
        with:
          account_id: '{{create-account.id}}'
          name: '{{contact_name}}'
          email: '{{contact_email}}'
      - name: open-onboarding-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Retailer Onboarding: {{company_name}} — {{region}}'
          category: retailer_onboarding
          description: 'Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}}).'
      - name: notify-kam
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{kam_teams_upn}}'
          text: 'New retailer onboarded: {{company_name}} ({{region}}). Salesforce account: {{create-account.id}}. SNOW setup task: {{open-onboarding-task.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-new-retailer-account-onboarding.yml

Analyzes transportation costs from SAP in Snowflake, identifies routing optimizations, creates Jira action items, and notifies the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Transportation Cost Optimizer
  description: Analyzes transportation costs from SAP in Snowflake, identifies routing optimizations, creates Jira action items, and notifies the logistics team via Microsoft Teams.
  tags:
  - logistics
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_transportation_c
    port: 8080
    tools:
    - name: sap-transportation
      description: Given an execution date, run the sap transportation cost optimizer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_TRANSPORTATION_COST_OPTIMIZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_TRANSPORTATION_COST_OPTIMI_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: SAP Transportation Cost Optimizer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_transportation_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-transportation-cost-optimizer.yml

When Azure Cost Management detects a spend anomaly on a P&G subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.

naftiko: '0.5'
info:
  label: Azure FinOps Cost Anomaly Responder
  description: When Azure Cost Management detects a spend anomaly on a P&G subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
  tags:
  - finops
  - cloud
  - azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure subscription, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps Teams alert.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID where the cost anomaly was detected.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group driving the anomaly.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated spend overage in US dollars.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}}
          category: cloud_cost
          urgency: '2'
      - name: post-finops-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: finops-alerts
          text: 'Azure Cost Anomaly: {{resource_group}} ({{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-finops-cost-anomaly-responder.yml

Scans AKS container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Kubernetes Container Vulnerability Scanner
  description: Scans AKS container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.
  tags:
  - security
  - microsoft-azure
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_kubernetes_con
    port: 8080
    tools:
    - name: azure-kubernetes
      description: Given an execution date, run the azure kubernetes container vulnerability scanner process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_KUBERNETES_CONTAINER_VULNERABILITY LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_KUBERNETES_CONTAINER_VUL_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: Azure Kubernetes Container Vulnerability Scanner - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_kubernetes_con_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-kubernetes-container-vulnerability-scanner.yml

Aggregates production line downtime events from SAP in Snowflake, creates Jira improvement tasks, and notifies plant management via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Production Line Downtime Reporter
  description: Aggregates production line downtime events from SAP in Snowflake, creates Jira improvement tasks, and notifies plant management via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_production_line_
    port: 8080
    tools:
    - name: sap-production
      description: Given an execution date, run the sap production line downtime reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PRODUCTION_LINE_DOWNTIME_REPORTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PRODUCTION_LINE_DOWNTIME_R_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: SAP Production Line Downtime Reporter - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_production_line__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-production-line-downtime-reporter.yml

Queries SAP S/4HANA for materials below safety stock at a given manufacturing plant and posts a restocking alert to the supply chain Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Supply Chain Inventory Low-Stock Alert
  description: Queries SAP S/4HANA for materials below safety stock at a given manufacturing plant and posts a restocking alert to the supply chain Microsoft Teams channel.
  tags:
  - supply-chain
  - sap
  - inventory
  - microsoft-teams
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: alert-low-inventory
      description: Given a SAP plant code, query for materials at or below their safety stock threshold and post a restocking alert to the supply chain Teams channel.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code to check inventory for (e.g., 'US10').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the supply chain alert.
      steps:
      - name: get-low-stock
        type: call
        call: sap.get-low-stock-materials
        with:
          plant: '{{plant_code}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Inventory Alert — Plant {{plant_code}}: {{get-low-stock.count}} materials below safety stock. Critical SKUs: {{get-low-stock.critical_materials}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pg-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MatlStkInAcctMod
      inputParameters:
      - name: plant
        in: query
      operations:
      - name: get-low-stock-materials
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-inventory-low-stock-alert.yml

Monitors NetApp storage utilization from Snowflake metrics, forecasts capacity needs, creates Jira procurement tasks, and notifies the infrastructure team via Microsoft Teams.

naftiko: '0.5'
info:
  label: NetApp Storage Capacity Planner
  description: Monitors NetApp storage utilization from Snowflake metrics, forecasts capacity needs, creates Jira procurement tasks, and notifies the infrastructure team via Microsoft Teams.
  tags:
  - infrastructure
  - netapp
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: netapp_storage_capac
    port: 8080
    tools:
    - name: netapp-storage
      description: Given an execution date, run the netapp storage capacity planner process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NETAPP_STORAGE_CAPACITY_PLANNER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NETAPP_STORAGE_CAPACITY_PLANNE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PGOPS
          issue_type: Task
          summary: NetApp Storage Capacity Planner - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_netapp_storage_capac_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → netapp-storage-capacity-planner.yml

Identifies equipment due for planned maintenance in SAP via Snowflake, creates ServiceNow work orders, and notifies plant maintenance teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Planned Maintenance Scheduler
  description: Identifies equipment due for planned maintenance in SAP via Snowflake, creates ServiceNow work orders, and notifies plant maintenance teams via Microsoft Teams.
  tags:
  - maintenance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_planned_maintena
    port: 8080
    tools:
    - name: sap-planned
      description: Given an execution date, run the sap planned maintenance scheduler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PLANNED_MAINTENANCE_SCHEDULER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PLANNED_MAINTENANCE_SCHEDU_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: maintenance
          short_description: SAP Planned Maintenance Scheduler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_planned_maintena_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-planned-maintenance-scheduler.yml

Monitors Snowflake task execution for the retail analytics pipelines and alerts the data engineering team in Teams if failures are detected in the last 24 hours.

naftiko: '0.5'
info:
  label: Snowflake Retail Analytics Pipeline Monitor
  description: Monitors Snowflake task execution for the retail analytics pipelines and alerts the data engineering team in Teams if failures are detected in the last 24 hours.
  tags:
  - data
  - analytics
  - snowflake
  - monitoring
  - microsoft-teams
  - retail
capability:
  exposes:
  - type: mcp
    namespace: retail-data-ops
    port: 8080
    tools:
    - name: monitor-retail-pipelines
      description: Given a Snowflake database and schema for retail analytics, check for task failures in the past 24 hours and post an alert to the data engineering Teams channel.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database name for retail analytics (e.g., 'RETAIL_ANALYTICS').
      - name: schema
        in: body
        type: string
        description: The Snowflake schema containing retail pipeline tasks.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for data engineering alerts.
      steps:
      - name: check-failures
        type: call
        call: snowflake.query-task-history
        with:
          database: '{{database}}'
          schema: '{{schema}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Retail Pipeline Health ({{database}}.{{schema}}): {{check-failures.failed_count}} failures in 24h. Failed: {{check-failures.failed_task_names}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/schemas/{{schema}}/tasks
      inputParameters:
      - name: database
        in: path
      - name: schema
        in: path
      operations:
      - name: query-task-history
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-retail-analytics-pipeline-monitor.yml

When a Revert API integration fails, logs the error in Snowflake, creates a ServiceNow incident, and notifies the integration team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Revert API Integration Failure Handler
  description: When a Revert API integration fails, logs the error in Snowflake, creates a ServiceNow incident, and notifies the integration team via Microsoft Teams.
  tags:
  - integration
  - revert
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: revert_api_integrati
    port: 8080
    tools:
    - name: revert-api
      description: Given an execution date, run the revert api integration failure handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.REVERT_API_INTEGRATION_FAILURE_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.REVERT_API_INTEGRATION_FAILURE_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: integration
          short_description: Revert API Integration Failure Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_revert_api_integrati_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pg.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → revert-api-integration-failure-handler.yml

Orchestrates e commerce content optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: E Commerce Content Optimization Pipeline
  description: Orchestrates e commerce content optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - e
  - reckitt
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: e
    port: 8080
    tools:
    - name: e-commerce-content-optimization-pipeline
      description: Orchestrates e commerce content optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/e
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/e
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/e
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → e-commerce-content-optimization-pipeline.yml

Orchestrates consumer insight mining pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Insight Mining Pipeline
  description: Orchestrates consumer insight mining pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-insight-mining-pipeline
      description: Orchestrates consumer insight mining pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-insight-mining-pipeline.yml

Retrieves manufacturing batch record lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Manufacturing Batch Record Lookup
  description: Retrieves manufacturing batch record lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - manufacturing
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-batch-record-lookup
      description: Retrieves manufacturing batch record lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.manufacturing-batch-record-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /manufacturing/batch/record/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: manufacturing-batch-record-lookup
        method: GET
Open in Framework → View in Fleet → manufacturing-batch-record-lookup.yml

When a BigCommerce order is placed, checks SAP inventory, creates a shipment in SAP, updates the BigCommerce order status, and notifies the customer via WhatsApp.

naftiko: '0.5'
info:
  label: E-Commerce Fulfillment Orchestrator
  description: When a BigCommerce order is placed, checks SAP inventory, creates a shipment in SAP, updates the BigCommerce order status, and notifies the customer via WhatsApp.
  tags:
  - e-commerce
  - fulfillment
  - bigcommerce
  - sap
  - whatsapp
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-fulfillment
    port: 8080
    tools:
    - name: fulfill-order
      description: Given a BigCommerce order ID, check SAP inventory, create a shipment, update order status, and notify the customer via WhatsApp.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-inventory
        type: call
        call: sap.check-stock
        with:
          material_number: '{{get-order.line_items[0].sku}}'
          plant: '{{get-order.shipping_warehouse}}'
      - name: create-shipment
        type: call
        call: sap.create-delivery
        with:
          sales_order: '{{get-order.erp_reference}}'
          shipping_address: '{{get-order.shipping_address}}'
      - name: update-order-status
        type: call
        call: bigcommerce.update-order
        with:
          order_id: '{{order_id}}'
          status: shipped
          tracking_number: '{{create-shipment.tracking_number}}'
      - name: notify-customer
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{get-order.customer_phone}}'
          message: 'Your Reckitt order #{{order_id}} has been shipped! Tracking: {{create-shipment.tracking_number}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/{{store_hash}}/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
      - name: update-order
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MaterialStock(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: check-stock
        method: GET
    - name: deliveries
      path: /A_OutbDeliveryHeader
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → e-commerce-fulfillment-orchestrator.yml

Sends a message to a Microsoft Teams channel, used by workflows to push notifications and alerts.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message
  description: Sends a message to a Microsoft Teams channel, used by workflows to push notifications and alerts.
  tags:
  - collaboration
  - messaging
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: comms-teams
    port: 8080
    tools:
    - name: send-channel-message
      description: Send a message to a Microsoft Teams channel by team and channel ID.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: The channel ID within the team.
      - name: message
        in: body
        type: string
        description: The message content.
      call: msteams.post-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        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-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message.yml

Orchestrates distribution network optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Distribution Network Optimization Pipeline
  description: Orchestrates distribution network optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - distribution
  - reckitt
  - teams
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: distribution
    port: 8080
    tools:
    - name: distribution-network-optimization-pipeline
      description: Orchestrates distribution network optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/distribution
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/distribution
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/distribution
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → distribution-network-optimization-pipeline.yml

Orchestrates consumer health claim validation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Health Claim Validation Pipeline
  description: Orchestrates consumer health claim validation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - snowflake
  - slack
  - sap
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-health-claim-validation-pipeline
      description: Orchestrates consumer health claim validation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-health-claim-validation-pipeline.yml

Orchestrates consumer complaint trending pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Complaint Trending Pipeline
  description: Orchestrates consumer complaint trending pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - confluence
  - datadog
  - reckitt
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-complaint-trending-pipeline
      description: Orchestrates consumer complaint trending pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: reckitt.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-complaint-trending-pipeline.yml

Orchestrates product regulatory approval pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Regulatory Approval Pipeline
  description: Orchestrates product regulatory approval pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - reckitt
  - jira
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-regulatory-approval-pipeline
      description: Orchestrates product regulatory approval pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-regulatory-approval-pipeline.yml

Creates a new folder in Box under a specified parent and returns the folder URL and ID.

naftiko: '0.5'
info:
  label: Box Folder Provisioning
  description: Creates a new folder in Box under a specified parent and returns the folder URL and ID.
  tags:
  - collaboration
  - storage
  - box
capability:
  exposes:
  - type: mcp
    namespace: storage-box
    port: 8080
    tools:
    - name: create-folder
      description: Create a new Box folder under a parent folder. Returns folder ID and URL.
      inputParameters:
      - name: folder_name
        in: body
        type: string
        description: The name of the new folder.
      - name: parent_folder_id
        in: body
        type: string
        description: The parent folder ID in Box.
      call: box.create-folder
      with:
        name: '{{folder_name}}'
        parent_id: '{{parent_folder_id}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
Open in Framework → View in Fleet → box-folder-provisioning.yml

Retrieves retail distribution coverage lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Retail Distribution Coverage Lookup
  description: Retrieves retail distribution coverage lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - retail
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: retail-distribution-coverage-lookup
      description: Retrieves retail distribution coverage lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.retail-distribution-coverage-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /retail/distribution/coverage/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: retail-distribution-coverage-lookup
        method: GET
Open in Framework → View in Fleet → retail-distribution-coverage-lookup.yml

Orchestrates manufacturing quality deviation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Quality Deviation Pipeline
  description: Orchestrates manufacturing quality deviation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - snowflake
  - slack
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-quality-deviation-pipeline
      description: Orchestrates manufacturing quality deviation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-quality-deviation-pipeline.yml

Retrieves brand equity score lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Brand Equity Score Lookup
  description: Retrieves brand equity score lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - brand
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand-equity-score-lookup
      description: Retrieves brand equity score lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.brand-equity-score-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /brand/equity/score/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: brand-equity-score-lookup
        method: GET
Open in Framework → View in Fleet → brand-equity-score-lookup.yml

Orchestrates product formulation change pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Formulation Change Pipeline
  description: Orchestrates product formulation change pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - reckitt
  - sap
  - teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-formulation-change-pipeline
      description: Orchestrates product formulation change pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-formulation-change-pipeline.yml

When a production line goes down, logs the event in SAP, creates a ServiceNow P1 incident, notifies the plant manager via Microsoft Teams, and records the downtime in Datadog.

naftiko: '0.5'
info:
  label: Production Line Downtime Orchestrator
  description: When a production line goes down, logs the event in SAP, creates a ServiceNow P1 incident, notifies the plant manager via Microsoft Teams, and records the downtime in Datadog.
  tags:
  - manufacturing
  - production
  - sap
  - servicenow
  - microsoft-teams
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: mfg-downtime
    port: 8080
    tools:
    - name: report-downtime
      description: Given a plant code and production line ID, log the downtime event across SAP, ServiceNow, Microsoft Teams, and Datadog.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      - name: line_id
        in: body
        type: string
        description: The production line identifier.
      - name: reason
        in: body
        type: string
        description: The downtime reason code.
      steps:
      - name: log-sap-event
        type: call
        call: sap.create-maintenance-order
        with:
          plant: '{{plant_code}}'
          equipment: '{{line_id}}'
          description: 'Unplanned downtime: {{reason}}'
          order_type: PM01
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Production line {{line_id}} down at plant {{plant_code}}
          priority: '1'
          category: production_downtime
          assigned_group: Plant_Maintenance_{{plant_code}}
          description: 'Line {{line_id}} is down. Reason: {{reason}}. SAP order: {{log-sap-event.order_number}}.'
      - name: notify-plant-manager
        type: call
        call: msteams.send-channel-message
        with:
          team_id: plant_{{plant_code}}
          channel: Production
          text: 'ALERT: Line {{line_id}} is DOWN. Reason: {{reason}}. Incident: {{create-p1-incident.number}}. SAP order: {{log-sap-event.order_number}}.'
      - name: record-metric
        type: call
        call: datadog.send-event
        with:
          title: 'Production downtime: {{line_id}} at {{plant_code}}'
          text: 'Reason: {{reason}}, Incident: {{create-p1-incident.number}}'
          alert_type: error
          tags: plant:{{plant_code}},line:{{line_id}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder
      operations:
      - name: create-maintenance-order
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → production-line-downtime-orchestrator.yml

Orchestrates supply chain demand planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Supply Chain Demand Planning Pipeline
  description: Orchestrates supply chain demand planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - supply
  - reckitt
  - teams
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: supply
    port: 8080
    tools:
    - name: supply-chain-demand-planning-pipeline
      description: Orchestrates supply chain demand planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/supply
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/supply
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/supply
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-planning-pipeline.yml

Runs a report in Adobe Analytics for a specified report suite and date range, returning page views, visits, and unique visitors.

naftiko: '0.5'
info:
  label: Adobe Analytics Report
  description: Runs a report in Adobe Analytics for a specified report suite and date range, returning page views, visits, and unique visitors.
  tags:
  - analytics
  - digital-marketing
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics-adobe
    port: 8080
    tools:
    - name: run-report
      description: Run an Adobe Analytics report for a report suite and date range. Returns page views, visits, and unique visitors.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: adobe-analytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api/reckitt
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-report.yml

Queries SAP HANA for current inventory levels for a material across all plants.

naftiko: '0.5'
info:
  label: SAP HANA Inventory Snapshot
  description: Queries SAP HANA for current inventory levels for a material across all plants.
  tags:
  - supply-chain
  - inventory
  - sap-hana
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-inventory
    port: 8080
    tools:
    - name: get-inventory-levels
      description: Query SAP HANA for inventory levels across all plants for a given material number.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: saphana.query-inventory
      with:
        material_number: '{{material_number}}'
  consumes:
  - type: http
    namespace: saphana
    baseUri: https://reckitt-hana.sap.com/sap/opu/odata/sap/INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: stock
      path: /MaterialStock?$filter=Material eq '{{material_number}}'
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: query-inventory
        method: GET
Open in Framework → View in Fleet → sap-hana-inventory-snapshot.yml

Orchestrates raw material sourcing optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Raw Material Sourcing Optimization Pipeline
  description: Orchestrates raw material sourcing optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - raw
  - reckitt
  - datadog
  - reckitt
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: raw
    port: 8080
    tools:
    - name: raw-material-sourcing-optimization-pipeline
      description: Orchestrates raw material sourcing optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: datadog.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: reckitt.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/raw
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/raw
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/raw
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → raw-material-sourcing-optimization-pipeline.yml

Retrieves a material master record from SAP S/4HANA by material number, returning description, unit of measure, and material group.

naftiko: '0.5'
info:
  label: SAP S/4HANA Material Master Lookup
  description: Retrieves a material master record from SAP S/4HANA by material number, returning description, unit of measure, and material group.
  tags:
  - erp
  - master-data
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: erp-materials
    port: 8080
    tools:
    - name: get-material
      description: Look up a SAP S/4HANA material master by material number. Returns description, UoM, material group, and weight.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-material
      with:
        material_number: '{{material_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-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('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-material-master-lookup.yml

Retrieves a Salesforce lead record by ID, returning contact info, lead source, status, and assigned owner.

naftiko: '0.5'
info:
  label: Salesforce Lead Lookup
  description: Retrieves a Salesforce lead record by ID, returning contact info, lead source, status, and assigned owner.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sales-crm
    port: 8080
    tools:
    - name: get-lead
      description: Look up a Salesforce lead by ID. Returns name, email, company, lead source, status, and owner.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID.
      call: salesforce.get-lead
      with:
        lead_id: '{{lead_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
Open in Framework → View in Fleet → salesforce-lead-lookup.yml

When a quality deviation is detected in SAP, creates a ServiceNow incident, notifies the plant quality team via Microsoft Teams, and logs the event in Datadog.

naftiko: '0.5'
info:
  label: Manufacturing Quality Alert Orchestrator
  description: When a quality deviation is detected in SAP, creates a ServiceNow incident, notifies the plant quality team via Microsoft Teams, and logs the event in Datadog.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
  - microsoft-teams
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: mfg-quality
    port: 8080
    tools:
    - name: raise-quality-alert
      description: Given a SAP quality notification ID, create a ServiceNow incident, alert the quality team in Microsoft Teams, and send an event to Datadog.
      inputParameters:
      - name: notification_id
        in: body
        type: string
        description: The SAP quality notification ID.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: get-notification
        type: call
        call: sap.get-quality-notification
        with:
          notification_id: '{{notification_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Quality deviation at plant {{plant_code}}: {{get-notification.description}}'
          category: quality
          assigned_group: Plant_Quality_{{plant_code}}
          priority: '2'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: quality_{{plant_code}}
          channel: Alerts
          text: 'Quality Alert: {{get-notification.description}} at plant {{plant_code}}. ServiceNow: {{create-incident.number}}. Material: {{get-notification.material_number}}.'
      - name: log-event
        type: call
        call: datadog.send-event
        with:
          title: 'Quality deviation: {{notification_id}}'
          text: Plant {{plant_code}}, material {{get-notification.material_number}}, incident {{create-incident.number}}
          tags: plant:{{plant_code}},type:quality
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /QualityNotifications('{{notification_id}}')
      inputParameters:
      - name: notification_id
        in: path
      operations:
      - name: get-quality-notification
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → manufacturing-quality-alert-orchestrator.yml

Orchestrates retailer joint business planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Retailer Joint Business Planning Pipeline
  description: Orchestrates retailer joint business planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - retailer
  - reckitt
  - sap
  - teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: retailer
    port: 8080
    tools:
    - name: retailer-joint-business-planning-pipeline
      description: Orchestrates retailer joint business planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/retailer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/retailer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/retailer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → retailer-joint-business-planning-pipeline.yml

Retrieves product packaging specification data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Product Packaging Specification
  description: Retrieves product packaging specification data from the Reckitt consumer health and hygiene products systems.
  tags:
  - product
  - reckitt
  - specification
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-packaging-specification
      description: Retrieves product packaging specification data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.product-packaging-specification
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /product/packaging/specification/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: product-packaging-specification
        method: GET
Open in Framework → View in Fleet → product-packaging-specification.yml

Retrieves product safety data sheet lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Product Safety Data Sheet Lookup
  description: Retrieves product safety data sheet lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - product
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-safety-data-sheet-lookup
      description: Retrieves product safety data sheet lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.product-safety-data-sheet-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /product/safety/data/sheet/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: product-safety-data-sheet-lookup
        method: GET
Open in Framework → View in Fleet → product-safety-data-sheet-lookup.yml

Orchestrates sustainability packaging transition pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Sustainability Packaging Transition Pipeline
  description: Orchestrates sustainability packaging transition pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - sustainability
  - reckitt
  - slack
  - sap
  - teams
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: sustainability-packaging-transition-pipeline
      description: Orchestrates sustainability packaging transition pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: sap.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/sustainability
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/sustainability
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/sustainability
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → sustainability-packaging-transition-pipeline.yml

Retrieves a travel booking from SAP Concur by trip ID, returning itinerary details, approval status, and estimated cost.

naftiko: '0.5'
info:
  label: SAP Concur Travel Booking Lookup
  description: Retrieves a travel booking from SAP Concur by trip ID, returning itinerary details, approval status, and estimated cost.
  tags:
  - travel
  - expense
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-concur
    port: 8080
    tools:
    - name: get-travel-booking
      description: Look up a SAP Concur travel booking by trip ID. Returns itinerary, approval status, and cost estimate.
      inputParameters:
      - name: trip_id
        in: body
        type: string
        description: The SAP Concur trip ID.
      call: concur.get-trip
      with:
        trip_id: '{{trip_id}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: trips
      path: /travel/trips/{{trip_id}}
      inputParameters:
      - name: trip_id
        in: path
      operations:
      - name: get-trip
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-booking-lookup.yml

Retrieves the latest CI/CD pipeline status from GitLab for a given project, returning status, duration, and stages.

naftiko: '0.5'
info:
  label: GitLab Pipeline Status
  description: Retrieves the latest CI/CD pipeline status from GitLab for a given project, returning status, duration, and stages.
  tags:
  - devops
  - ci-cd
  - gitlab
capability:
  exposes:
  - type: mcp
    namespace: devops-gitlab
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Get the latest GitLab CI/CD pipeline status for a project. Returns status, duration, and stage details.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      call: gitlab.get-pipelines
      with:
        project_id: '{{project_id}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.reckitt.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipelines?per_page=1
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-pipelines
        method: GET
Open in Framework → View in Fleet → gitlab-pipeline-status.yml

When an employee leaves in Workday, deactivates their Azure AD account, closes open ServiceNow tickets, revokes Box access, and logs the offboarding in Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Orchestrator
  description: When an employee leaves in Workday, deactivates their Azure AD account, closes open ServiceNow tickets, revokes Box access, and logs the offboarding in Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - azure-active-directory
  - servicenow
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: Given a Workday employee ID, deactivate Azure AD, close ServiceNow tickets, revoke Box access, and notify via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the departing employee.
      - name: last_day
        in: body
        type: string
        description: The employee's last working day in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: disable-ad-account
        type: call
        call: aad.disable-user
        with:
          upn: '{{get-employee.work_email}}'
      - name: close-tickets
        type: call
        call: servicenow.close-user-tickets
        with:
          caller_id: '{{get-employee.work_email}}'
          close_notes: 'Employee offboarding: {{get-employee.full_name}} last day {{last_day}}'
      - name: revoke-box-access
        type: call
        call: box.remove-collaborator
        with:
          user_email: '{{get-employee.work_email}}'
      - name: notify-hr
        type: call
        call: msteams.send-message
        with:
          recipient_upn: hr-team@reckitt.com
          text: 'Offboarding complete for {{get-employee.full_name}} ({{employee_id}}). AD disabled, tickets closed, Box access revoked. Last day: {{last_day}}.'
  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: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=caller_id={{caller_id}}^state!=7
      inputParameters:
      - name: caller_id
        in: path
      operations:
      - name: close-user-tickets
        method: PATCH
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: collaborations
      path: /collaborations
      operations:
      - name: remove-collaborator
        method: DELETE
  - 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
Open in Framework → View in Fleet → it-asset-lifecycle-orchestrator.yml

When a regulatory change is detected, creates a Confluence page with the change summary, opens a ServiceNow change request, and notifies the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Compliance Document Workflow
  description: When a regulatory change is detected, creates a Confluence page with the change summary, opens a ServiceNow change request, and notifies the compliance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory
  - confluence
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-regulatory
    port: 8080
    tools:
    - name: process-regulatory-change
      description: Given a regulatory change reference and description, create a Confluence page, open a ServiceNow change request, and alert the compliance team.
      inputParameters:
      - name: regulation_ref
        in: body
        type: string
        description: The regulatory reference identifier.
      - name: change_summary
        in: body
        type: string
        description: Summary of the regulatory change.
      - name: effective_date
        in: body
        type: string
        description: Effective date in YYYY-MM-DD format.
      steps:
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: COMPLIANCE
          title: 'Regulatory Change: {{regulation_ref}} — Effective {{effective_date}}'
          body: '{{change_summary}}'
      - name: open-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Regulatory change: {{regulation_ref}}'
          description: '{{change_summary}}. Effective date: {{effective_date}}. Confluence: {{create-page.url}}'
          category: regulatory_compliance
          assigned_group: Compliance_Team
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: compliance_team
          channel: Regulatory
          text: 'New regulatory change: {{regulation_ref}} effective {{effective_date}}. Change request: {{open-change-request.number}}. Details: {{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://reckitt.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: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-document-workflow.yml

Retrieves product regulatory status data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Product Regulatory Status
  description: Retrieves product regulatory status data from the Reckitt consumer health and hygiene products systems.
  tags:
  - product
  - reckitt
  - status
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-regulatory-status
      description: Retrieves product regulatory status data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.product-regulatory-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /product/regulatory/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: product-regulatory-status
        method: GET
Open in Framework → View in Fleet → product-regulatory-status.yml

When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Requisition Approval Pipeline
  description: When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams.
  tags:
  - procurement
  - ariba
  - sap-ariba
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: route-requisition-approval
      description: Given an Ariba requisition ID and requestor employee ID, check amount, resolve approver from Workday, and notify via Microsoft Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition identifier.
      - name: requestor_employee_id
        in: body
        type: string
        description: The Workday employee ID of the requestor.
      - name: spend_amount
        in: body
        type: number
        description: The total spend amount on the requisition.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_employee_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-requestor.manager_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-manager.work_email}}'
          text: 'Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for ${{spend_amount}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: 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
Open in Framework → View in Fleet → sap-ariba-requisition-approval-pipeline.yml

Queries Dynatrace for service-level performance data including response time, failure rate, and throughput.

naftiko: '0.5'
info:
  label: Dynatrace Service Performance
  description: Queries Dynatrace for service-level performance data including response time, failure rate, and throughput.
  tags:
  - monitoring
  - apm
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: ops-dynatrace
    port: 8080
    tools:
    - name: get-service-metrics
      description: Query Dynatrace for a service entity's performance metrics. Returns response time, failure rate, and throughput.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Dynatrace service entity ID.
      call: dynatrace.get-entity-metrics
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://reckitt.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate&entitySelector=entityId({{entity_id}})
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-service-performance.yml

Sends an email notification via Microsoft Outlook/Graph API to a specified recipient.

naftiko: '0.5'
info:
  label: Microsoft Outlook Email Notification
  description: Sends an email notification via Microsoft Outlook/Graph API to a specified recipient.
  tags:
  - communications
  - email
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: comms-email
    port: 8080
    tools:
    - name: send-email
      description: Send an email via Microsoft Graph. Specify recipient, subject, and body.
      inputParameters:
      - name: to_email
        in: body
        type: string
        description: The recipient email address.
      - name: subject
        in: body
        type: string
        description: The email subject.
      - name: body
        in: body
        type: string
        description: The email body content.
      call: outlook.send-mail
      with:
        to: '{{to_email}}'
        subject: '{{subject}}'
        body: '{{body}}'
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-email-notification.yml

When SAP inventory drops below threshold, creates a purchase requisition in SAP Ariba, notifies the procurement team via Microsoft Teams, and logs the event in ServiceNow.

naftiko: '0.5'
info:
  label: Inventory Replenishment Orchestrator
  description: When SAP inventory drops below threshold, creates a purchase requisition in SAP Ariba, notifies the procurement team via Microsoft Teams, and logs the event in ServiceNow.
  tags:
  - supply-chain
  - inventory
  - sap
  - sap-ariba
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-replenishment
    port: 8080
    tools:
    - name: trigger-replenishment
      description: Given a material number and plant code, check inventory, create an Ariba requisition, notify procurement, and log in ServiceNow.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The plant code where stock is low.
      - name: reorder_quantity
        in: body
        type: number
        description: The quantity to reorder.
      steps:
      - name: check-stock
        type: call
        call: sap.check-stock
        with:
          material_number: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          material: '{{material_number}}'
          quantity: '{{reorder_quantity}}'
          plant: '{{plant_code}}'
          description: Auto-replenishment for {{material_number}} at plant {{plant_code}}
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: procurement_team
          channel: Replenishment
          text: 'Auto-replenishment triggered: {{material_number}} at plant {{plant_code}}. Quantity: {{reorder_quantity}}. Ariba requisition: {{create-requisition.requisition_id}}.'
      - name: log-event
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Inventory replenishment: {{material_number}} at {{plant_code}}'
          description: 'Stock level: {{check-stock.available_quantity}}. Reorder: {{reorder_quantity}}. Requisition: {{create-requisition.requisition_id}}.'
          category: inventory_replenishment
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: check-stock
        method: GET
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → inventory-replenishment-orchestrator.yml

Retrieves trade promotion status data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Trade Promotion Status
  description: Retrieves trade promotion status data from the Reckitt consumer health and hygiene products systems.
  tags:
  - trade
  - reckitt
  - status
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-promotion-status
      description: Retrieves trade promotion status data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.trade-promotion-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /trade/promotion/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: trade-promotion-status
        method: GET
Open in Framework → View in Fleet → trade-promotion-status.yml

Retrieves product shelf life lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Product Shelf Life Lookup
  description: Retrieves product shelf life lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - product
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-shelf-life-lookup
      description: Retrieves product shelf life lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.product-shelf-life-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /product/shelf/life/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: product-shelf-life-lookup
        method: GET
Open in Framework → View in Fleet → product-shelf-life-lookup.yml

Orchestrates retailer compliance audit pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Retailer Compliance Audit Pipeline
  description: Orchestrates retailer compliance audit pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - retailer
  - reckitt
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: retailer
    port: 8080
    tools:
    - name: retailer-compliance-audit-pipeline
      description: Orchestrates retailer compliance audit pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/retailer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/retailer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/retailer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → retailer-compliance-audit-pipeline.yml

Retrieves DNS records for a Cloudflare zone by record type, returning record names, values, and TTL.

naftiko: '0.5'
info:
  label: Cloudflare DNS Record Lookup
  description: Retrieves DNS records for a Cloudflare zone by record type, returning record names, values, and TTL.
  tags:
  - infrastructure
  - dns
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: infra-dns
    port: 8080
    tools:
    - name: get-dns-records
      description: List DNS records for a Cloudflare zone filtered by record type. Returns record name, content, and TTL.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The Cloudflare zone ID.
      - name: record_type
        in: body
        type: string
        description: The DNS record type (A, CNAME, MX, etc.).
      call: cloudflare.list-dns-records
      with:
        zone_id: '{{zone_id}}'
        type: '{{record_type}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: dns-records
      path: /zones/{{zone_id}}/dns_records?type={{type}}
      inputParameters:
      - name: zone_id
        in: path
      - name: type
        in: path
      operations:
      - name: list-dns-records
        method: GET
Open in Framework → View in Fleet → cloudflare-dns-record-lookup.yml

Orchestrates manufacturing equipment maintenance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Equipment Maintenance Pipeline
  description: Orchestrates manufacturing equipment maintenance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - jira
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-equipment-maintenance-pipeline
      description: Orchestrates manufacturing equipment maintenance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-equipment-maintenance-pipeline.yml

Orchestrates manufacturing batch release pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Batch Release Pipeline
  description: Orchestrates manufacturing batch release pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-batch-release-pipeline
      description: Orchestrates manufacturing batch release pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-batch-release-pipeline.yml

Orchestrates retail execution monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Retail Execution Monitoring Pipeline
  description: Orchestrates retail execution monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - retail
  - reckitt
  - slack
  - sap
  - teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: retail-execution-monitoring-pipeline
      description: Orchestrates retail execution monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: sap.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/retail
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/retail
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/retail
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → retail-execution-monitoring-pipeline.yml

Triggers a Tableau workbook extract refresh and returns the refresh job status.

naftiko: '0.5'
info:
  label: Tableau Workbook Refresh
  description: Triggers a Tableau workbook extract refresh and returns the refresh job status.
  tags:
  - analytics
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics-tableau
    port: 8080
    tools:
    - name: refresh-workbook
      description: Trigger a Tableau workbook extract refresh by workbook ID. Returns the refresh job ID and status.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      - name: site_id
        in: body
        type: string
        description: The Tableau site ID.
      call: tableau.refresh-workbook
      with:
        workbook_id: '{{workbook_id}}'
        site_id: '{{site_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://reckitt.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-workbook-refresh.yml

Orchestrates product launch readiness pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Launch Readiness Pipeline
  description: Orchestrates product launch readiness pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - reckitt
  - confluence
  - datadog
  - reckitt
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-launch-readiness-pipeline
      description: Orchestrates product launch readiness pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: reckitt.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-launch-readiness-pipeline.yml

Retrieves a production order from SAP S/4HANA by order number, returning status, quantity, scheduled dates, and material details.

naftiko: '0.5'
info:
  label: SAP S/4HANA Production Order Tracking
  description: Retrieves a production order from SAP S/4HANA by order number, returning status, quantity, scheduled dates, and material details.
  tags:
  - manufacturing
  - production
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: mfg-production
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP S/4HANA production order. Returns status, planned quantity, scheduled start/finish, and material.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-production-order
      with:
        order_number: '{{order_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDERS
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-production-order-tracking.yml

Retrieves consumer satisfaction score lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Consumer Satisfaction Score Lookup
  description: Retrieves consumer satisfaction score lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - consumer
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-satisfaction-score-lookup
      description: Retrieves consumer satisfaction score lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.consumer-satisfaction-score-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /consumer/satisfaction/score/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: consumer-satisfaction-score-lookup
        method: GET
Open in Framework → View in Fleet → consumer-satisfaction-score-lookup.yml

Triggers a dataset refresh in Power BI and returns the refresh status for supply chain and finance reporting dashboards.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresh
  description: Triggers a dataset refresh in Power BI and returns the refresh status for supply chain and finance reporting dashboards.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh by dataset ID and return the current refresh status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
        group_id: '{{group_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-dashboard-refresh.yml

Uploads a file to a specified Google Drive folder and returns the file ID and shareable link.

naftiko: '0.5'
info:
  label: Google Drive File Upload
  description: Uploads a file to a specified Google Drive folder and returns the file ID and shareable link.
  tags:
  - collaboration
  - storage
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: storage-gdrive
    port: 8080
    tools:
    - name: upload-file
      description: Upload a file to a Google Drive folder. Returns file ID and shareable link.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: The Google Drive folder ID.
      - name: file_name
        in: body
        type: string
        description: The name for the uploaded file.
      - name: content_type
        in: body
        type: string
        description: The MIME type of the file.
      call: gdrive.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
        mimeType: '{{content_type}}'
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?uploadType=multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → google-drive-file-upload.yml

Orchestrates product counterfeit detection pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Counterfeit Detection Pipeline
  description: Orchestrates product counterfeit detection pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - reckitt
  - datadog
  - reckitt
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-counterfeit-detection-pipeline
      description: Orchestrates product counterfeit detection pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: datadog.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: reckitt.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-counterfeit-detection-pipeline.yml

Retrieves a journal entry from Oracle Cloud ERP by journal ID, returning header details, line amounts, and posting status.

naftiko: '0.5'
info:
  label: Oracle Cloud ERP Journal Entry
  description: Retrieves a journal entry from Oracle Cloud ERP by journal ID, returning header details, line amounts, and posting status.
  tags:
  - finance
  - erp
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: finance-oracle
    port: 8080
    tools:
    - name: get-journal-entry
      description: Look up an Oracle Cloud ERP journal entry by ID. Returns header info, line amounts, and posting status.
      inputParameters:
      - name: journal_id
        in: body
        type: string
        description: The Oracle Cloud journal entry ID.
      call: oracle.get-journal
      with:
        journal_id: '{{journal_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://reckitt.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_cloud_user
      password: $secrets.oracle_cloud_password
    resources:
    - name: journals
      path: /journals/{{journal_id}}
      inputParameters:
      - name: journal_id
        in: path
      operations:
      - name: get-journal
        method: GET
Open in Framework → View in Fleet → oracle-cloud-erp-journal-entry.yml

Queries New Relic for application performance metrics including response time, throughput, and error rate.

naftiko: '0.5'
info:
  label: New Relic Application Performance
  description: Queries New Relic for application performance metrics including response time, throughput, and error rate.
  tags:
  - monitoring
  - apm
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: ops-apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Query New Relic for application performance. Returns response time, throughput, and error rate.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-app-metrics
      with:
        app_id: '{{app_id}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-application-performance.yml

Orchestrates supply chain risk monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Supply Chain Risk Monitoring Pipeline
  description: Orchestrates supply chain risk monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - supply
  - reckitt
  - datadog
  - reckitt
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: supply
    port: 8080
    tools:
    - name: supply-chain-risk-monitoring-pipeline
      description: Orchestrates supply chain risk monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: datadog.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: reckitt.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/supply
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/supply
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/supply
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → supply-chain-risk-monitoring-pipeline.yml

Extracts demand forecast data from SAP BW, transforms it, and pushes to Tableau for supply chain planning dashboards.

naftiko: '0.5'
info:
  label: Supply Chain Demand Forecast Sync
  description: Extracts demand forecast data from SAP BW, transforms it, and pushes to Tableau for supply chain planning dashboards.
  tags:
  - supply-chain
  - forecasting
  - sap-bw
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-forecast
    port: 8080
    tools:
    - name: sync-demand-forecast
      description: Extract demand forecast from SAP BW for a product group and date range, then publish to Tableau for visualization.
      inputParameters:
      - name: product_group
        in: body
        type: string
        description: The SAP product group code.
      - name: forecast_period
        in: body
        type: string
        description: The forecast period in YYYY-MM format.
      steps:
      - name: extract-forecast
        type: call
        call: sapbw.run-query
        with:
          query_name: DEMAND_FORECAST
          product_group: '{{product_group}}'
          period: '{{forecast_period}}'
      - name: publish-to-tableau
        type: call
        call: tableau.publish-datasource
        with:
          datasource_name: demand_forecast_{{product_group}}
          data: '{{extract-forecast.results}}'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://reckitt-bw.sap.com/sap/bw/odata/v1
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: queries
      path: /query/{{query_name}}
      inputParameters:
      - name: query_name
        in: path
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://reckitt.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-forecast-sync.yml

Orchestrates product cost optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Cost Optimization Pipeline
  description: Orchestrates product cost optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - reckitt
  - snowflake
  - slack
  - sap
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-cost-optimization-pipeline
      description: Orchestrates product cost optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-cost-optimization-pipeline.yml

Orchestrates manufacturing waste reduction pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Waste Reduction Pipeline
  description: Orchestrates manufacturing waste reduction pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-waste-reduction-pipeline
      description: Orchestrates manufacturing waste reduction pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-waste-reduction-pipeline.yml

Orchestrates trade promotion planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Trade Promotion Planning Pipeline
  description: Orchestrates trade promotion planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - trade
  - reckitt
  - reckitt
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-promotion-planning-pipeline
      description: Orchestrates trade promotion planning pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: reckitt.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/trade
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/trade
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/trade
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → trade-promotion-planning-pipeline.yml

Orchestrates brand reputation monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Brand Reputation Monitoring Pipeline
  description: Orchestrates brand reputation monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - brand
  - reckitt
  - sap
  - teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand-reputation-monitoring-pipeline
      description: Orchestrates brand reputation monitoring pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/brand
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/brand
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/brand
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → brand-reputation-monitoring-pipeline.yml

Retrieves raw material specification lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Raw Material Specification Lookup
  description: Retrieves raw material specification lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - raw
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: raw
    port: 8080
    tools:
    - name: raw-material-specification-lookup
      description: Retrieves raw material specification lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.raw-material-specification-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /raw/material/specification/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: raw-material-specification-lookup
        method: GET
Open in Framework → View in Fleet → raw-material-specification-lookup.yml

Retrieves email campaign performance metrics from MailChimp including open rate, click rate, and bounce rate.

naftiko: '0.5'
info:
  label: MailChimp Email Campaign Metrics
  description: Retrieves email campaign performance metrics from MailChimp including open rate, click rate, and bounce rate.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: marketing-email
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Retrieve MailChimp campaign metrics by campaign ID. Returns open rate, click rate, bounce rate, and total recipients.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The MailChimp campaign ID.
      call: mailchimp.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
Open in Framework → View in Fleet → mailchimp-email-campaign-metrics.yml

Retrieves consumer complaint status data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Consumer Complaint Status
  description: Retrieves consumer complaint status data from the Reckitt consumer health and hygiene products systems.
  tags:
  - consumer
  - reckitt
  - status
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-complaint-status
      description: Retrieves consumer complaint status data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.consumer-complaint-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /consumer/complaint/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: consumer-complaint-status
        method: GET
Open in Framework → View in Fleet → consumer-complaint-status.yml

Orchestrates manufacturing line changeover pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Line Changeover Pipeline
  description: Orchestrates manufacturing line changeover pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - reckitt
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-line-changeover-pipeline
      description: Orchestrates manufacturing line changeover pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: reckitt.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-line-changeover-pipeline.yml

Retrieves brand market share lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Brand Market Share Lookup
  description: Retrieves brand market share lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - brand
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand-market-share-lookup
      description: Retrieves brand market share lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.brand-market-share-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /brand/market/share/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: brand-market-share-lookup
        method: GET
Open in Framework → View in Fleet → brand-market-share-lookup.yml

Retrieves LinkedIn advertising campaign performance metrics including impressions, clicks, and spend.

naftiko: '0.5'
info:
  label: LinkedIn Campaign Performance
  description: Retrieves LinkedIn advertising campaign performance metrics including impressions, clicks, and spend.
  tags:
  - marketing
  - advertising
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: marketing-linkedin
    port: 8080
    tools:
    - name: get-linkedin-campaign
      description: Retrieve LinkedIn campaign performance by campaign ID. Returns impressions, clicks, spend, and engagement rate.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      call: linkedin.get-campaign-analytics
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/rest
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalytics?q=analytics&campaigns=urn:li:sponsoredCampaign:{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-analytics
        method: GET
Open in Framework → View in Fleet → linkedin-campaign-performance.yml

Aggregates marketing performance from Google Analytics, Google Ads, Facebook Ads, and LinkedIn into a single summary, then posts the digest to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Cross-Channel Marketing Performance Orchestrator
  description: Aggregates marketing performance from Google Analytics, Google Ads, Facebook Ads, and LinkedIn into a single summary, then posts the digest to a Microsoft Teams channel.
  tags:
  - marketing
  - analytics
  - google-analytics
  - google-ads
  - facebook-ads
  - linkedin
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-performance
    port: 8080
    tools:
    - name: generate-performance-digest
      description: Aggregate marketing performance data from multiple channels and post a summary to Microsoft Teams.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-ga-data
        type: call
        call: ga.run-report
        with:
          property_id: $secrets.ga_property_id
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-google-ads
        type: call
        call: googleads.search-stream
        with:
          customer_id: $secrets.google_ads_customer_id
          query: SELECT metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date BETWEEN '{{start_date}}' AND '{{end_date}}'
      - name: get-fb-ads
        type: call
        call: fbads.get-account-insights
        with:
          date_start: '{{start_date}}'
          date_end: '{{end_date}}'
      - name: get-linkedin
        type: call
        call: linkedin.get-account-analytics
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: marketing_team
          channel: Performance
          text: 'Marketing Digest {{start_date}} to {{end_date}}: GA sessions: {{get-ga-data.totals.sessions}}. Google Ads clicks: {{get-google-ads.total_clicks}}. FB reach: {{get-fb-ads.reach}}. LinkedIn impressions: {{get-linkedin.impressions}}.'
  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: run-report
        method: POST
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v15
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: search
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: search-stream
        method: POST
  - type: http
    namespace: fbads
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: account-insights
      path: /act_{{ad_account_id}}/insights
      operations:
      - name: get-account-insights
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/rest
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /adAnalytics?q=analytics&dateRange.start.year={{start_year}}&dateRange.end.year={{end_year}}
      operations:
      - name: get-account-analytics
        method: GET
  - 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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → cross-channel-marketing-performance-orchestrator.yml

Retrieves a user profile from Azure Active Directory by UPN, returning display name, job title, department, and group memberships.

naftiko: '0.5'
info:
  label: Azure Active Directory User Lookup
  description: Retrieves a user profile from Azure Active Directory by UPN, returning display name, job title, department, and group memberships.
  tags:
  - identity
  - directory
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: identity-aad
    port: 8080
    tools:
    - name: get-user
      description: Look up an Azure AD user by UPN. Returns display name, job title, department, and group memberships.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The user principal name (email).
      call: aad.get-user
      with:
        upn: '{{user_upn}}'
  consumes:
  - type: http
    namespace: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-active-directory-user-lookup.yml

Orchestrates consumer segmentation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Segmentation Pipeline
  description: Orchestrates consumer segmentation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - jira
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-segmentation-pipeline
      description: Orchestrates consumer segmentation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-segmentation-pipeline.yml

Orchestrates consumer loyalty program pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Loyalty Program Pipeline
  description: Orchestrates consumer loyalty program pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - confluence
  - datadog
  - reckitt
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-loyalty-program-pipeline
      description: Orchestrates consumer loyalty program pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: reckitt.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-loyalty-program-pipeline.yml

Orchestrates brand social listening pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Brand Social Listening Pipeline
  description: Orchestrates brand social listening pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - brand
  - reckitt
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand-social-listening-pipeline
      description: Orchestrates brand social listening pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/brand
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/brand
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/brand
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → brand-social-listening-pipeline.yml

Retrieves distributor order status data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Distributor Order Status
  description: Retrieves distributor order status data from the Reckitt consumer health and hygiene products systems.
  tags:
  - distributor
  - reckitt
  - status
capability:
  exposes:
  - type: mcp
    namespace: distributor
    port: 8080
    tools:
    - name: distributor-order-status
      description: Retrieves distributor order status data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.distributor-order-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /distributor/order/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: distributor-order-status
        method: GET
Open in Framework → View in Fleet → distributor-order-status.yml

Retrieves the status of a DocuSign envelope including signer status, completion date, and document details.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status
  description: Retrieves the status of a DocuSign envelope including signer status, completion date, and document details.
  tags:
  - legal
  - contracts
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: legal-docusign
    port: 8080
    tools:
    - name: get-envelope-status
      description: Look up a DocuSign envelope by ID. Returns signer status, sent date, and completion details.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/{{account_id}}
    authentication:
      type: bearer
      token: $secrets.docusign_token
    inputParameters:
    - name: account_id
      in: path
      value: $secrets.docusign_account_id
    resources:
    - name: envelopes
      path: /envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-status.yml

When a consumer complaint arrives in Zendesk, enriches it with Salesforce customer data, creates a quality investigation in SAP, and escalates to the brand team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Complaint Orchestrator
  description: When a consumer complaint arrives in Zendesk, enriches it with Salesforce customer data, creates a quality investigation in SAP, and escalates to the brand team in Microsoft Teams.
  tags:
  - customer-service
  - quality
  - zendesk
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-complaints
    port: 8080
    tools:
    - name: process-complaint
      description: Given a Zendesk ticket ID, enrich with Salesforce data, create a SAP quality notification, and alert the brand team.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk complaint ticket ID.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          email: '{{get-ticket.requester_email}}'
      - name: create-quality-notification
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q1
          description: 'Consumer complaint: {{get-ticket.subject}}'
          material_number: '{{get-ticket.custom_fields.product_sku}}'
      - name: alert-brand-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: brand_quality
          channel: Complaints
          text: 'Consumer complaint: {{get-ticket.subject}}. Customer: {{get-customer.Name}}. Product: {{get-ticket.custom_fields.product_sku}}. SAP notification: {{create-quality-notification.notification_id}}. Zendesk: {{ticket_id}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://reckitt.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_api_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /parameterizedSearch/?q={{email}}&sobject=Account
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: sap
    baseUri: https://reckitt-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /QualityNotifications
      operations:
      - name: create-quality-notification
        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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → consumer-complaint-orchestrator.yml

When a new product campaign is approved, creates scheduled posts on Instagram and Facebook, sets up Google Tag Manager tracking, and logs the campaign in Salesforce.

naftiko: '0.5'
info:
  label: Social Media Campaign Launch Orchestrator
  description: When a new product campaign is approved, creates scheduled posts on Instagram and Facebook, sets up Google Tag Manager tracking, and logs the campaign in Salesforce.
  tags:
  - marketing
  - social-media
  - instagram
  - facebook
  - google-tag-manager
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: marketing-campaigns
    port: 8080
    tools:
    - name: launch-social-campaign
      description: Given campaign details, create posts on Instagram and Facebook, configure GTM tracking, and log the campaign in Salesforce.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The marketing campaign name.
      - name: product_sku
        in: body
        type: string
        description: The product SKU being promoted.
      - name: launch_date
        in: body
        type: string
        description: Campaign launch date in YYYY-MM-DD format.
      - name: creative_url
        in: body
        type: string
        description: URL of the approved creative asset.
      steps:
      - name: create-ig-post
        type: call
        call: instagram.create-media
        with:
          image_url: '{{creative_url}}'
          caption: '{{campaign_name}} — Shop now! #Reckitt'
          scheduled_publish_time: '{{launch_date}}T09:00:00Z'
      - name: create-fb-post
        type: call
        call: facebook.create-post
        with:
          message: '{{campaign_name}} — Discover our latest product!'
          link: https://www.reckitt.com/products/{{product_sku}}
          scheduled_publish_time: '{{launch_date}}T09:00:00Z'
      - name: setup-tracking
        type: call
        call: gtm.create-tag
        with:
          tag_name: campaign_{{campaign_name}}
          trigger: page_view
          utm_campaign: '{{campaign_name}}'
      - name: log-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          type: Social Media
          start_date: '{{launch_date}}'
          status: Planned
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      operations:
      - name: create-media
        method: POST
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: posts
      path: /{{page_id}}/feed
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_tagmanager_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags
      operations:
      - name: create-tag
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → social-media-campaign-launch-orchestrator.yml

Retrieves product formulation lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Product Formulation Lookup
  description: Retrieves product formulation lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - product
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-formulation-lookup
      description: Retrieves product formulation lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.product-formulation-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /product/formulation/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: product-formulation-lookup
        method: GET
Open in Framework → View in Fleet → product-formulation-lookup.yml

Orchestrates manufacturing energy optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Manufacturing Energy Optimization Pipeline
  description: Orchestrates manufacturing energy optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - manufacturing
  - reckitt
  - teams
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: manufacturing-energy-optimization-pipeline
      description: Orchestrates manufacturing energy optimization pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/manufacturing
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://reckitt.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/manufacturing
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://reckitt.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/manufacturing
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → manufacturing-energy-optimization-pipeline.yml

Orchestrates consumer trend forecasting pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Consumer Trend Forecasting Pipeline
  description: Orchestrates consumer trend forecasting pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - consumer
  - reckitt
  - slack
  - sap
  - teams
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-trend-forecasting-pipeline
      description: Orchestrates consumer trend forecasting pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: sap.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/consumer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://reckitt-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/consumer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/consumer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → consumer-trend-forecasting-pipeline.yml

Orchestrates trade spend reconciliation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Trade Spend Reconciliation Pipeline
  description: Orchestrates trade spend reconciliation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - trade
  - reckitt
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-spend-reconciliation-pipeline
      description: Orchestrates trade spend reconciliation pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/trade
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://reckitt.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/trade
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/trade
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → trade-spend-reconciliation-pipeline.yml

Orchestrates brand campaign performance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Brand Campaign Performance Pipeline
  description: Orchestrates brand campaign performance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
  tags:
  - brand
  - reckitt
  - reckitt
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: brand
    port: 8080
    tools:
    - name: brand-campaign-performance-pipeline
      description: Orchestrates brand campaign performance pipeline across consumer health and hygiene products systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: reckitt.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: reckitt-resource
      path: /api/brand
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://reckitt.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/brand
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://reckitt.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/brand
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → brand-campaign-performance-pipeline.yml

Retrieves consumer panel data lookup data from the Reckitt consumer health and hygiene products systems.

naftiko: '0.5'
info:
  label: Consumer Panel Data Lookup
  description: Retrieves consumer panel data lookup data from the Reckitt consumer health and hygiene products systems.
  tags:
  - consumer
  - reckitt
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: consumer
    port: 8080
    tools:
    - name: consumer-panel-data-lookup
      description: Retrieves consumer panel data lookup data from the Reckitt consumer health and hygiene products systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: reckitt.consumer-panel-data-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: reckitt
    baseUri: https://api.reckitt.com/v2
    authentication:
      type: bearer
      token: $secrets.reckitt_api_token
    resources:
    - name: resource
      path: /consumer/panel/data/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: consumer-panel-data-lookup
        method: GET
Open in Framework → View in Fleet → consumer-panel-data-lookup.yml

Retrieves Google Ads campaign performance data including impressions, clicks, cost, and conversions for a specified date range.

naftiko: '0.5'
info:
  label: Google Ads Performance Snapshot
  description: Retrieves Google Ads campaign performance data including impressions, clicks, cost, and conversions for a specified date range.
  tags:
  - marketing
  - advertising
  - google-ads
capability:
  exposes:
  - type: mcp
    namespace: marketing-ads
    port: 8080
    tools:
    - name: get-ads-performance
      description: Retrieve Google Ads campaign performance for a date range. Returns impressions, clicks, cost, and conversions.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Google Ads customer ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: googleads.search-stream
      with:
        customer_id: '{{customer_id}}'
        query: SELECT campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date BETWEEN '{{start_date}}' AND '{{end_date}}'
  consumes:
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v15
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: search
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: search-stream
        method: POST
Open in Framework → View in Fleet → google-ads-performance-snapshot.yml

Retrieves Facebook Ads campaign insights including reach, impressions, spend, and cost per result.

naftiko: '0.5'
info:
  label: Facebook Ads Campaign Report
  description: Retrieves Facebook Ads campaign insights including reach, impressions, spend, and cost per result.
  tags:
  - marketing
  - advertising
  - facebook-ads
capability:
  exposes:
  - type: mcp
    namespace: marketing-facebook
    port: 8080
    tools:
    - name: get-fb-campaign-insights
      description: Retrieve Facebook Ads campaign insights by campaign ID. Returns reach, impressions, spend, and cost per result.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Facebook Ads campaign ID.
      - name: date_preset
        in: body
        type: string
        description: Date preset (e.g. last_7d, last_30d).
      call: fbads.get-insights
      with:
        campaign_id: '{{campaign_id}}'
        date_preset: '{{date_preset}}'
  consumes:
  - type: http
    namespace: fbads
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_access_token
    resources:
    - name: insights
      path: /{{campaign_id}}/insights?date_preset={{date_preset}}
      inputParameters:
      - name: campaign_id
        in: path
      - name: date_preset
        in: path
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → facebook-ads-campaign-report.yml

Retrieves Facebook advertising spend and ROAS metrics for a specified ad account and date range.

naftiko: '0.5'
info:
  label: Facebook Ads Spend Reporter
  description: Retrieves Facebook advertising spend and ROAS metrics for a specified ad account and date range.
  tags:
  - marketing
  - advertising
  - facebook
capability:
  exposes:
  - type: mcp
    namespace: paid-media
    port: 8080
    tools:
    - name: get-fb-ad-spend
      description: Fetch Facebook ad account spend and ROAS for a date range.
      inputParameters:
      - name: ad_account_id
        in: body
        type: string
        description: Facebook ad account ID.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: End date YYYY-MM-DD.
      call: meta.get-account-insights
      with:
        ad_account_id: '{{ad_account_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: spend
        type: string
        mapping: $.data[0].spend
      - name: roas
        type: string
        mapping: $.data[0].purchase_roas[0].value
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: account-insights
      path: /act_{{ad_account_id}}/insights
      inputParameters:
      - name: ad_account_id
        in: path
      operations:
      - name: get-account-insights
        method: GET
Open in Framework → View in Fleet → facebook-ads-spend-reporter.yml

Checks order status for a wholesale account.

naftiko: '0.5'
info:
  label: Wholesale Account Order Status
  description: Checks order status for a wholesale account.
  tags:
  - sales
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: get-wholesale
      description: Checks order status for a wholesale account.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The wholesale account order status identifier.
      call: sales-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: sales-api
    baseUri: https://api.under-armour.com/sales/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: wholesale
      path: /wholesale/account/order/status/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-wholesale
        method: GET
Open in Framework → View in Fleet → wholesale-account-order-status.yml

Sends a notification to a Slack channel.

naftiko: '0.5'
info:
  label: Slack Notification Publisher
  description: Sends a notification to a Slack channel.
  tags:
  - communications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: communications
    port: 8080
    tools:
    - name: get-slack
      description: Sends a notification to a Slack channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The slack notification publisher identifier.
      call: communications-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: communications-api
    baseUri: https://api.under-armour.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: slack
      path: /slack/notification/publisher/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-slack
        method: GET
Open in Framework → View in Fleet → slack-notification-publisher.yml

Retrieves Instagram ad campaign metrics including impressions, reach, and engagement rate for a specified campaign ID and date range.

naftiko: '0.5'
info:
  label: Instagram Campaign Performance Lookup
  description: Retrieves Instagram ad campaign metrics including impressions, reach, and engagement rate for a specified campaign ID and date range.
  tags:
  - marketing
  - social-media
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: get-instagram-campaign
      description: Fetch performance metrics for a given Instagram campaign.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Instagram/Meta campaign ID.
      - name: date_range
        in: body
        type: string
        description: Date range as start,end in YYYY-MM-DD format.
      call: meta.get-campaign-insights
      with:
        campaign_id: '{{campaign_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: impressions
        type: number
        mapping: $.data[0].impressions
      - name: reach
        type: number
        mapping: $.data[0].reach
      - name: engagement_rate
        type: string
        mapping: $.data[0].engagement_rate
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: campaign-insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-insights
        method: GET
Open in Framework → View in Fleet → instagram-campaign-performance-lookup.yml

Searches for files in Google Drive by name and returns file ID, type, modified date, and sharing status.

naftiko: '0.5'
info:
  label: Google Drive File Lookup
  description: Searches for files in Google Drive by name and returns file ID, type, modified date, and sharing status.
  tags:
  - documents
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: drive-search
    port: 8080
    tools:
    - name: search-drive-files
      description: Search Google Drive for files by name.
      inputParameters:
      - name: query
        in: body
        type: string
        description: File name search query.
      call: gdrive.search-files
      with:
        q: name contains '{{query}}'
      outputParameters:
      - name: files
        type: array
        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
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-file-lookup.yml

Retrieves a Salesforce service case by case number, returning status, priority, subject, and contact information.

naftiko: '0.5'
info:
  label: Salesforce Case Lookup
  description: Retrieves a Salesforce service case by case number, returning status, priority, subject, and contact information.
  tags:
  - customer-service
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-support
    port: 8080
    tools:
    - name: get-case
      description: Look up a Salesforce case by case number.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: Salesforce case number.
      call: salesforce.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: priority
        type: string
        mapping: $.Priority
      - name: subject
        type: string
        mapping: $.Subject
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-case-lookup.yml

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: '0.5'
info:
  label: Executive Dashboard Refresh Orchestrator
  description: Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.
  tags:
  - analytics
  - power-bi
  - business
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-executive-dashboard-refresh-orchestrator
      description: Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → executive-dashboard-refresh-orchestrator.yml

Retrieves a Confluence wiki page.

naftiko: '0.5'
info:
  label: Confluence Page Viewer
  description: Retrieves a Confluence wiki page.
  tags:
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-confluence
      description: Retrieves a Confluence wiki page.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The confluence page viewer identifier.
      call: collaboration-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: collaboration-api
    baseUri: https://api.under-armour.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: confluence
      path: /confluence/page/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-confluence
        method: GET
Open in Framework → View in Fleet → confluence-page-viewer.yml

When a new athlete endorsement is approved in Salesforce, generates the contract in SharePoint, creates a finance line item in SAP, and notifies legal and marketing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Athlete Endorsement Contract Workflow
  description: When a new athlete endorsement is approved in Salesforce, generates the contract in SharePoint, creates a finance line item in SAP, and notifies legal and marketing via Microsoft Teams.
  tags:
  - endorsements
  - legal
  - salesforce
  - sharepoint
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: endorsement-ops
    port: 8080
    tools:
    - name: process-endorsement
      description: Orchestrate contract generation, finance entry, and team notification for a new athlete endorsement.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the endorsement deal.
      steps:
      - name: get-deal
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: generate-contract
        type: call
        call: sharepoint.create-document
        with:
          site_id: legal_contracts
          template: athlete_endorsement
          fields:
            athlete_name: '{{get-deal.Contact_Name__c}}'
            deal_value: '{{get-deal.Amount}}'
            term: '{{get-deal.Contract_Term__c}}'
      - name: create-cost-center
        type: call
        call: sap.create-cost-element
        with:
          cost_center: marketing_endorsements
          amount: '{{get-deal.Amount}}'
          description: 'Endorsement: {{get-deal.Contact_Name__c}}'
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: endorsement-deals
          text: 'New endorsement approved: {{get-deal.Contact_Name__c}} for ${{get-deal.Amount}}. Contract: {{generate-contract.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{template}}
      inputParameters:
      - name: site_id
        in: path
      - name: template
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_COSTCENTERACTIVITYTYPE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-elements
      path: /A_CostCenterActivityType
      operations:
      - name: create-cost-element
        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
Open in Framework → View in Fleet → athlete-endorsement-contract-workflow.yml

Retrieves metadata for a Tableau workbook view including view name, last refresh time, and content URL.

naftiko: '0.5'
info:
  label: Tableau Dashboard Lookup
  description: Retrieves metadata for a Tableau workbook view including view name, last refresh time, and content URL.
  tags:
  - analytics
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: bi-dashboards
    port: 8080
    tools:
    - name: get-tableau-view
      description: Fetch Tableau view metadata.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Tableau site ID.
      - name: view_id
        in: body
        type: string
        description: Tableau view ID.
      call: tableau.get-view
      with:
        site_id: '{{site_id}}'
        view_id: '{{view_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.view.name
      - name: content_url
        type: string
        mapping: $.view.contentUrl
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://ua-tableau.under-armour.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/views/{{view_id}}
      inputParameters:
      - name: site_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: get-view
        method: GET
Open in Framework → View in Fleet → tableau-dashboard-lookup.yml

Retrieves on-hand inventory quantities from Oracle E-Business Suite for a given item and organization.

naftiko: '0.5'
info:
  label: Oracle EBS Inventory Snapshot
  description: Retrieves on-hand inventory quantities from Oracle E-Business Suite for a given item and organization.
  tags:
  - supply-chain
  - inventory
  - oracle-e-business-suite
capability:
  exposes:
  - type: mcp
    namespace: inventory-lookup
    port: 8080
    tools:
    - name: get-inventory-onhand
      description: Fetch on-hand inventory from Oracle EBS.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: Oracle item number.
      - name: org_id
        in: body
        type: string
        description: Organization ID.
      call: oracle-ebs.get-onhand
      with:
        item: '{{item_number}}'
        org: '{{org_id}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.onhand_quantity
      - name: reserved
        type: number
        mapping: $.reserved_quantity
      - name: available
        type: number
        mapping: $.available_to_promise
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://ua-ebs.under-armour.com/webservices/rest/inventory
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: onhand
      path: /on-hand?item={{item}}&org={{org}}
      inputParameters:
      - name: item
        in: query
      - name: org
        in: query
      operations:
      - name: get-onhand
        method: GET
Open in Framework → View in Fleet → oracle-ebs-inventory-snapshot.yml

Retrieves Salesforce Marketing Cloud email send metrics including delivery rate, open rate, and click-through rate for a given send job.

naftiko: '0.5'
info:
  label: Salesforce Marketing Cloud Email Performance
  description: Retrieves Salesforce Marketing Cloud email send metrics including delivery rate, open rate, and click-through rate for a given send job.
  tags:
  - marketing
  - email
  - salesforce-marketing-cloud
capability:
  exposes:
  - type: mcp
    namespace: sfmc-analytics
    port: 8080
    tools:
    - name: get-email-send-metrics
      description: Fetch SFMC email send performance metrics.
      inputParameters:
      - name: send_id
        in: body
        type: string
        description: SFMC send job ID.
      call: sfmc.get-send-summary
      with:
        send_id: '{{send_id}}'
      outputParameters:
      - name: delivery_rate
        type: string
        mapping: $.deliveryRate
      - name: open_rate
        type: string
        mapping: $.uniqueOpenRate
      - name: click_rate
        type: string
        mapping: $.uniqueClickRate
  consumes:
  - type: http
    namespace: sfmc
    baseUri: https://ua.rest.marketingcloudapis.com/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: sends
      path: /sends/{{send_id}}
      inputParameters:
      - name: send_id
        in: path
      operations:
      - name: get-send-summary
        method: GET
Open in Framework → View in Fleet → salesforce-marketing-cloud-email-performance.yml

Retrieves a Jira ticket by issue key.

naftiko: '0.5'
info:
  label: Jira Ticket Viewer
  description: Retrieves a Jira ticket by issue key.
  tags:
  - engineering
  - jira
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-jira
      description: Retrieves a Jira ticket by issue key.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The jira ticket viewer identifier.
      call: engineering-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: engineering-api
    baseUri: https://api.under-armour.com/engineering/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: jira
      path: /jira/ticket/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-jira
        method: GET
Open in Framework → View in Fleet → jira-ticket-viewer.yml

Exports subscriber details from a MailChimp audience list, returning total count, open rate, and click rate.

naftiko: '0.5'
info:
  label: MailChimp Subscriber List Export
  description: Exports subscriber details from a MailChimp audience list, returning total count, open rate, and click rate.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: get-audience-stats
      description: Retrieve MailChimp audience list statistics.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: MailChimp audience list ID.
      call: mailchimp.get-list
      with:
        list_id: '{{list_id}}'
      outputParameters:
      - name: member_count
        type: number
        mapping: $.stats.member_count
      - name: open_rate
        type: number
        mapping: $.stats.open_rate
      - name: click_rate
        type: number
        mapping: $.stats.click_rate
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: lists
      path: /lists/{{list_id}}
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: get-list
        method: GET
Open in Framework → View in Fleet → mailchimp-subscriber-list-export.yml

Retrieves Mastercard settlement data for a date range and reconciles against SAP payment records, logging discrepancies to Google Sheets.

naftiko: '0.5'
info:
  label: Mastercard Transaction Reconciliation
  description: Retrieves Mastercard settlement data for a date range and reconciles against SAP payment records, logging discrepancies to Google Sheets.
  tags:
  - finance
  - payments
  - mastercard
  - sap
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: payment-reconciliation
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Compare Mastercard settlements against SAP payments and log discrepancies.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: Settlement date YYYY-MM-DD.
      steps:
      - name: get-settlements
        type: call
        call: mastercard.get-settlements
        with:
          date: '{{settlement_date}}'
      - name: get-sap-payments
        type: call
        call: sap.get-payment-docs
        with:
          date: '{{settlement_date}}'
      - name: log-discrepancies
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: ua_reconciliation_log
          row:
            date: '{{settlement_date}}'
            mc_total: '{{get-settlements.total}}'
            sap_total: '{{get-sap-payments.total}}'
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/settlement/v1
    authentication:
      type: bearer
      token: $secrets.mastercard_token
    resources:
    - name: settlements
      path: /settlements
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_PAYMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /A_PaymentDocument
      operations:
      - name: get-payment-docs
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → mastercard-transaction-reconciliation.yml

When a SAP inbound delivery is delayed beyond threshold, creates a ServiceNow incident, updates the Salesforce wholesale account with delay notice, and alerts the supply chain team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supply Chain Delay Alert Orchestrator
  description: When a SAP inbound delivery is delayed beyond threshold, creates a ServiceNow incident, updates the Salesforce wholesale account with delay notice, and alerts the supply chain team in Microsoft Teams.
  tags:
  - supply-chain
  - alerts
  - sap
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-alerts
    port: 8080
    tools:
    - name: handle-delivery-delay
      description: Orchestrate delay notifications across ServiceNow, Salesforce, and Teams.
      inputParameters:
      - name: delivery_id
        in: body
        type: string
        description: SAP inbound delivery document number.
      - name: delay_days
        in: body
        type: number
        description: Number of days the delivery is delayed.
      steps:
      - name: get-delivery
        type: call
        call: sap.get-inbound-delivery
        with:
          delivery_id: '{{delivery_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply chain delay: {{delivery_id}} - {{delay_days}} days'
          category: supply_chain
          priority: '2'
      - name: update-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{get-delivery.vendor_account_id}}'
          delay_notice: Delivery {{delivery_id}} delayed by {{delay_days}} days
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'DELAY ALERT: Delivery {{delivery_id}} from {{get-delivery.vendor_name}} is {{delay_days}} days late. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_INBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_InbDeliveryHeader('{{delivery_id}}')
      inputParameters:
      - name: delivery_id
        in: path
      operations:
      - name: get-inbound-delivery
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://underarmour.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://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - 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
Open in Framework → View in Fleet → supply-chain-delay-alert-orchestrator.yml

Orchestrates athletic apparel workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 2
  description: Orchestrates athletic apparel workflow 2 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-002
      description: Orchestrates athletic apparel workflow 2 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 2 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-2.yml

When a customer initiates a return on BigCommerce, validates the order, creates a return authorization in SAP, triggers a refund via Square, and sends a return label email through MailChimp.

naftiko: '0.5'
info:
  label: Return Processing Orchestrator
  description: When a customer initiates a return on BigCommerce, validates the order, creates a return authorization in SAP, triggers a refund via Square, and sends a return label email through MailChimp.
  tags:
  - e-commerce
  - returns
  - bigcommerce
  - sap
  - square
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: returns-processing
    port: 8080
    tools:
    - name: process-return
      description: Orchestrate return authorization, refund, and customer communication.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: BigCommerce order ID.
      - name: reason
        in: body
        type: string
        description: Return reason code.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-return
        type: call
        call: sap.create-return-order
        with:
          order_ref: '{{get-order.id}}'
          reason: '{{reason}}'
          items: '{{get-order.line_items}}'
      - name: issue-refund
        type: call
        call: square.create-refund
        with:
          payment_id: '{{get-order.payment_id}}'
          amount: '{{get-order.total}}'
      - name: send-label
        type: call
        call: mailchimp.send-transactional
        with:
          email: '{{get-order.customer_email}}'
          template: return_label
          merge_vars:
            return_auth: '{{create-return.return_number}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: returns
      path: /A_ReturnsDeliveryHeader
      operations:
      - name: create-return-order
        method: POST
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_token
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → return-processing-orchestrator.yml

When a new wholesale lead is created in Salesforce, enriches it with ZoomInfo firmographic data and creates an opportunity with projected revenue, then notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead to Wholesale Opportunity
  description: When a new wholesale lead is created in Salesforce, enriches it with ZoomInfo firmographic data and creates an opportunity with projected revenue, then notifies the sales team via Microsoft Teams.
  tags:
  - sales
  - wholesale
  - salesforce
  - zoominfo
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wholesale-pipeline
    port: 8080
    tools:
    - name: qualify-wholesale-lead
      description: Enrich a Salesforce lead with ZoomInfo data, create an opportunity, and notify the sales team.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-lead
        type: call
        call: zoominfo.enrich-company
        with:
          company_name: '{{get-lead.Company}}'
          domain: '{{get-lead.Website}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: Wholesale - {{get-lead.Company}}
          account_id: '{{get-lead.ConvertedAccountId}}'
          amount: '{{enrich-lead.estimated_revenue}}'
          stage: Qualification
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: wholesale-leads
          text: 'New wholesale opportunity: {{get-lead.Company}} (est. ${{enrich-lead.estimated_revenue}}). Opp ID: {{create-opportunity.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: enrich
      path: /enrich/company
      operations:
      - name: enrich-company
        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
Open in Framework → View in Fleet → salesforce-lead-to-wholesale-opportunity.yml

Retrieves athletic apparel operational data for workflow 3.

naftiko: '0.5'
info:
  label: Athletic Apparel Data Query 3
  description: Retrieves athletic apparel operational data for workflow 3.
  tags:
  - athletic
  - operations
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: get-data-3
      description: Query athletic apparel data for workflow 3.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: athletic-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: athletic-api
    baseUri: https://api.under-armour.com/athletic-apparel/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → athletic-apparel-data-query-3.yml

Retrieves athletic apparel operational data for workflow 15.

naftiko: '0.5'
info:
  label: Athletic Apparel Data Query 15
  description: Retrieves athletic apparel operational data for workflow 15.
  tags:
  - athletic
  - operations
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: get-data-15
      description: Query athletic apparel data for workflow 15.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: athletic-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: athletic-api
    baseUri: https://api.under-armour.com/athletic-apparel/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → athletic-apparel-data-query-15.yml

Orchestrates athletic apparel workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 1
  description: Orchestrates athletic apparel workflow 1 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-001
      description: Orchestrates athletic apparel workflow 1 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 1 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-1.yml

Synchronizes athlete activity data from the Under Armour connected fitness platform into Salesforce for personalized marketing, updates user segments in HubSpot, and triggers targeted MailChimp campaigns.

naftiko: '0.5'
info:
  label: Connected Fitness Data Sync Orchestrator
  description: Synchronizes athlete activity data from the Under Armour connected fitness platform into Salesforce for personalized marketing, updates user segments in HubSpot, and triggers targeted MailChimp campaigns.
  tags:
  - dtc
  - connected-fitness
  - salesforce
  - hubspot
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: fitness-marketing
    port: 8080
    tools:
    - name: sync-fitness-segments
      description: Sync connected fitness activity data to Salesforce and HubSpot, and trigger targeted email.
      inputParameters:
      - name: segment_type
        in: body
        type: string
        description: Activity segment (e.g., 'high_activity_runners').
      - name: period_days
        in: body
        type: number
        description: Lookback period in days.
      steps:
      - name: get-segment-users
        type: call
        call: salesforce.query-contacts
        with:
          query: SELECT Id, Email FROM Contact WHERE Fitness_Segment__c = '{{segment_type}}'
      - name: update-hubspot-list
        type: call
        call: hubspot.update-list
        with:
          list_id: fitness_{{segment_type}}
          emails: '{{get-segment-users.records}}'
      - name: trigger-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: fitness_segments
          segment_id: '{{segment_type}}'
          template: fitness_engagement_{{segment_type}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-contacts
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/contacts/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: lists
      path: /lists/{{list_id}}/add
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: update-list
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → connected-fitness-data-sync-orchestrator.yml

Retrieves a Salesforce account by account ID.

naftiko: '0.5'
info:
  label: Salesforce Account Viewer
  description: Retrieves a Salesforce account by account ID.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: get-salesforce
      description: Retrieves a Salesforce account by account ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The salesforce account viewer identifier.
      call: sales-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: sales-api
    baseUri: https://api.under-armour.com/sales/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: salesforce
      path: /salesforce/account/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-salesforce
        method: GET
Open in Framework → View in Fleet → salesforce-account-viewer.yml

Uploads a document to a specified SharePoint site and folder path.

naftiko: '0.5'
info:
  label: SharePoint Document Upload
  description: Uploads a document to a specified SharePoint site and folder path.
  tags:
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: document-mgmt
    port: 8080
    tools:
    - name: upload-document
      description: Upload a document to SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: folder_path
        in: body
        type: string
        description: Folder path for the upload.
      - name: file_name
        in: body
        type: string
        description: Name of the file.
      call: sharepoint.upload-file
      with:
        site_id: '{{site_id}}'
        folder_path: '{{folder_path}}'
        file_name: '{{file_name}}'
  consumes:
  - 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}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sharepoint-document-upload.yml

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: '0.5'
info:
  label: Data Governance Review Orchestrator
  description: Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.
  tags:
  - data-governance
  - compliance
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: run-data-governance-review-orchestrator
      description: Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Data Governance Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → data-governance-review-orchestrator.yml

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: '0.5'
info:
  label: Cross-Functional Project Kickoff Orchestrator
  description: Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.
  tags:
  - project-management
  - collaboration
  - operations
capability:
  exposes:
  - type: mcp
    namespace: project-management
    port: 8080
    tools:
    - name: run-cross-functional-project-kickoff-orchestrator
      description: Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → cross-functional-project-kickoff-orchestrator.yml

Fetches recent Twitter mentions of the Under Armour brand, runs sentiment analysis, and logs results to Google Sheets for social media team review.

naftiko: '0.5'
info:
  label: Twitter Mention Sentiment Tracker
  description: Fetches recent Twitter mentions of the Under Armour brand, runs sentiment analysis, and logs results to Google Sheets for social media team review.
  tags:
  - marketing
  - social-media
  - twitter
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: social-listening
    port: 8080
    tools:
    - name: track-brand-mentions
      description: Pull Twitter mentions and log sentiment analysis results to Google Sheets.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query (e.g., '@UnderArmour').
      - name: since_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      steps:
      - name: search-tweets
        type: call
        call: twitter.search-recent
        with:
          query: '{{query}}'
          start_time: '{{since_date}}T00:00:00Z'
      - name: log-results
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: ua_social_mentions
          row:
            query: '{{query}}'
            tweet_count: '{{search-tweets.meta.result_count}}'
            date: '{{since_date}}'
  consumes:
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_bearer_token
    resources:
    - name: tweets-search
      path: /tweets/search/recent
      operations:
      - name: search-recent
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → twitter-mention-sentiment-tracker.yml

Orchestrates athletic apparel workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 14
  description: Orchestrates athletic apparel workflow 14 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-014
      description: Orchestrates athletic apparel workflow 14 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 14 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-14.yml

When a wholesale order is confirmed in Salesforce, creates a sales order in SAP, generates an invoice, and emails it to the buyer via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Wholesale Order to Invoice Orchestrator
  description: When a wholesale order is confirmed in Salesforce, creates a sales order in SAP, generates an invoice, and emails it to the buyer via Microsoft Outlook.
  tags:
  - wholesale
  - finance
  - salesforce
  - sap
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: wholesale-billing
    port: 8080
    tools:
    - name: process-wholesale-invoice
      description: Create SAP sales order and invoice from a confirmed Salesforce wholesale order.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sales-order
        type: call
        call: sap.create-sales-order
        with:
          customer: '{{get-opportunity.Account.Name}}'
          items: '{{get-opportunity.OpportunityLineItems}}'
          total: '{{get-opportunity.Amount}}'
      - name: create-invoice
        type: call
        call: sap.create-invoice
        with:
          sales_order: '{{create-sales-order.order_number}}'
      - name: email-invoice
        type: call
        call: outlook.send-mail
        with:
          to: '{{get-opportunity.Contact_Email__c}}'
          subject: Under Armour Invoice {{create-invoice.invoice_number}}
          body: Please find your invoice for order {{create-sales-order.order_number}}.
          attachment_url: '{{create-invoice.pdf_url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.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
      operations:
      - name: create-sales-order
        method: POST
    - name: invoices
      path: /A_BillingDocument
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → wholesale-order-to-invoice-orchestrator.yml

Orchestrates end-of-season closeout by pulling aging inventory from SAP, creating clearance promotions on BigCommerce, updating Shopify sale prices, and reporting results to the merchandising team in Google Sheets.

naftiko: '0.5'
info:
  label: End of Season Closeout Orchestrator
  description: Orchestrates end-of-season closeout by pulling aging inventory from SAP, creating clearance promotions on BigCommerce, updating Shopify sale prices, and reporting results to the merchandising team in Google Sheets.
  tags:
  - merchandising
  - e-commerce
  - sap
  - bigcommerce
  - shopify
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: closeout-ops
    port: 8080
    tools:
    - name: execute-closeout
      description: Run end-of-season closeout across DTC channels and report.
      inputParameters:
      - name: season_code
        in: body
        type: string
        description: SAP season code (e.g., 'FW24').
      - name: clearance_pct
        in: body
        type: number
        description: Clearance discount percentage.
      steps:
      - name: get-aging-inventory
        type: call
        call: sap.get-aging-stock
        with:
          season: '{{season_code}}'
      - name: create-bc-promotions
        type: call
        call: bigcommerce.create-promotion
        with:
          name: '{{season_code}} Closeout'
          discount_pct: '{{clearance_pct}}'
          product_ids: '{{get-aging-inventory.product_ids}}'
      - name: update-shopify-prices
        type: call
        call: shopify.bulk-price-update
        with:
          items: '{{get-aging-inventory.items}}'
          discount_pct: '{{clearance_pct}}'
      - name: log-report
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: ua_closeout_tracker
          row:
            season: '{{season_code}}'
            items_count: '{{get-aging-inventory.total_items}}'
            clearance_pct: '{{clearance_pct}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: aging-stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-aging-stock
        method: GET
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: promotions
      path: /promotions
      operations:
      - name: create-promotion
        method: POST
  - type: http
    namespace: shopify
    baseUri: https://under-armour.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: products
      path: /products.json
      operations:
      - name: bulk-price-update
        method: PUT
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → end-of-season-closeout-orchestrator.yml

Orchestrates athletic apparel workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 10
  description: Orchestrates athletic apparel workflow 10 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-010
      description: Orchestrates athletic apparel workflow 10 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 10 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-10.yml

Orchestrates athletic apparel workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 4
  description: Orchestrates athletic apparel workflow 4 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-004
      description: Orchestrates athletic apparel workflow 4 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 4 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-4.yml

Retrieves search performance data from Google Search Console for the UA.com property including clicks, impressions, and average position.

naftiko: '0.5'
info:
  label: Google Search Console Performance Lookup
  description: Retrieves search performance data from Google Search Console for the UA.com property including clicks, impressions, and average position.
  tags:
  - seo
  - analytics
  - google-search-console
capability:
  exposes:
  - type: mcp
    namespace: seo-analytics
    port: 8080
    tools:
    - name: get-search-performance
      description: Fetch Google Search Console performance data.
      inputParameters:
      - name: site_url
        in: body
        type: string
        description: The site URL property in GSC.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: End date YYYY-MM-DD.
      call: gsc.query-analytics
      with:
        site_url: '{{site_url}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: clicks
        type: number
        mapping: $.rows[0].clicks
      - name: impressions
        type: number
        mapping: $.rows[0].impressions
      - name: avg_position
        type: number
        mapping: $.rows[0].position
  consumes:
  - type: http
    namespace: gsc
    baseUri: https://www.googleapis.com/webmasters/v3
    authentication:
      type: bearer
      token: $secrets.google_search_console_token
    resources:
    - name: analytics
      path: /sites/{{site_url}}/searchAnalytics/query
      inputParameters:
      - name: site_url
        in: path
      operations:
      - name: query-analytics
        method: POST
Open in Framework → View in Fleet → google-search-console-performance-lookup.yml

Retrieves status of an athlete endorsement deal.

naftiko: '0.5'
info:
  label: Athlete Endorsement Status
  description: Retrieves status of an athlete endorsement deal.
  tags:
  - marketing
  - legal
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: get-athlete
      description: Retrieves status of an athlete endorsement deal.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The athlete endorsement status identifier.
      call: marketing-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: marketing-api
    baseUri: https://api.under-armour.com/marketing/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: athlete
      path: /athlete/endorsement/status/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-athlete
        method: GET
Open in Framework → View in Fleet → athlete-endorsement-status.yml

Retrieves e-commerce conversion rate metrics.

naftiko: '0.5'
info:
  label: E-Commerce Conversion Rate
  description: Retrieves e-commerce conversion rate metrics.
  tags:
  - e-commerce
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: e-commerce
    port: 8080
    tools:
    - name: get-e
      description: Retrieves e-commerce conversion rate metrics.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The e commerce conversion rate identifier.
      call: e-commerce-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: e-commerce-api
    baseUri: https://api.under-armour.com/e-commerce/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: e
      path: /e/commerce/conversion/rate/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-e
        method: GET
Open in Framework → View in Fleet → e-commerce-conversion-rate.yml

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: '0.5'
info:
  label: Procurement Spend Analysis Orchestrator
  description: Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.
  tags:
  - procurement
  - analytics
  - finance
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-procurement-spend-analysis-orchestrator
      description: Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Procurement Spend Analysis Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → procurement-spend-analysis-orchestrator.yml

Orchestrates athletic apparel workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 5
  description: Orchestrates athletic apparel workflow 5 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-005
      description: Orchestrates athletic apparel workflow 5 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 5 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-5.yml

Orchestrates athletic apparel workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 11
  description: Orchestrates athletic apparel workflow 11 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-011
      description: Orchestrates athletic apparel workflow 11 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 11 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-11.yml

Runs an analytics query against the Snowflake data warehouse.

naftiko: '0.5'
info:
  label: Snowflake Analytics Query
  description: Runs an analytics query against the Snowflake data warehouse.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-snowflake
      description: Runs an analytics query against the Snowflake data warehouse.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The snowflake analytics query identifier.
      call: analytics-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: analytics-api
    baseUri: https://api.under-armour.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: snowflake
      path: /snowflake/analytics/query/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-snowflake
        method: GET
Open in Framework → View in Fleet → snowflake-analytics-query.yml

Orchestrates athletic apparel workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 7
  description: Orchestrates athletic apparel workflow 7 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-007
      description: Orchestrates athletic apparel workflow 7 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 7 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-7.yml

Orchestrates athletic apparel workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 13
  description: Orchestrates athletic apparel workflow 13 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-013
      description: Orchestrates athletic apparel workflow 13 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 13 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-13.yml

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: '0.5'
info:
  label: Annual Compliance Certification Orchestrator
  description: Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.
  tags:
  - compliance
  - hr
  - legal
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-annual-compliance-certification-orchestrator
      description: Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Annual Compliance Certification Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → annual-compliance-certification-orchestrator.yml

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: '0.5'
info:
  label: Disaster Recovery Test Orchestrator
  description: Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.
  tags:
  - infrastructure
  - operations
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: run-disaster-recovery-test-orchestrator
      description: Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Disaster Recovery Test Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → disaster-recovery-test-orchestrator.yml

When a customer reaches a spending threshold in Salesforce, upgrades their loyalty tier, sends a congratulations email via MailChimp, and creates a personalized discount code in Shopify.

naftiko: '0.5'
info:
  label: Customer Loyalty Tier Upgrade Orchestrator
  description: When a customer reaches a spending threshold in Salesforce, upgrades their loyalty tier, sends a congratulations email via MailChimp, and creates a personalized discount code in Shopify.
  tags:
  - dtc
  - loyalty
  - salesforce
  - mailchimp
  - shopify
capability:
  exposes:
  - type: mcp
    namespace: loyalty-ops
    port: 8080
    tools:
    - name: upgrade-loyalty-tier
      description: Upgrade customer loyalty tier and trigger rewards.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Salesforce contact ID.
      - name: new_tier
        in: body
        type: string
        description: New loyalty tier name.
      steps:
      - name: get-contact
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: update-tier
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{contact_id}}'
          loyalty_tier: '{{new_tier}}'
      - name: create-discount
        type: call
        call: shopify.create-price-rule
        with:
          title: LOYALTY_{{new_tier}}_{{contact_id}}
          value: '-15'
          target_type: line_item
      - name: send-congrats
        type: call
        call: mailchimp.send-transactional
        with:
          email: '{{get-contact.Email}}'
          template: loyalty_upgrade
          merge_vars:
            first_name: '{{get-contact.FirstName}}'
            new_tier: '{{new_tier}}'
            discount_code: '{{create-discount.code}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ua.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
      - name: update-contact
        method: PATCH
  - type: http
    namespace: shopify
    baseUri: https://under-armour.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: price-rules
      path: /price_rules.json
      operations:
      - name: create-price-rule
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → customer-loyalty-tier-upgrade-orchestrator.yml

Applies seasonal markdowns by reading pricing rules from SAP, updating prices on BigCommerce and Shopify storefronts, and logging the change in Microsoft Excel via SharePoint.

naftiko: '0.5'
info:
  label: Seasonal Markdown Orchestrator
  description: Applies seasonal markdowns by reading pricing rules from SAP, updating prices on BigCommerce and Shopify storefronts, and logging the change in Microsoft Excel via SharePoint.
  tags:
  - pricing
  - e-commerce
  - sap
  - bigcommerce
  - shopify
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pricing-ops
    port: 8080
    tools:
    - name: apply-seasonal-markdown
      description: Apply a markdown across DTC channels for a given product category.
      inputParameters:
      - name: category_id
        in: body
        type: string
        description: SAP product category identifier.
      - name: markdown_pct
        in: body
        type: number
        description: Markdown percentage to apply.
      steps:
      - name: get-pricing-rules
        type: call
        call: sap.get-pricing-conditions
        with:
          category: '{{category_id}}'
      - name: update-bigcommerce
        type: call
        call: bigcommerce.bulk-price-update
        with:
          items: '{{get-pricing-rules.items}}'
          discount_pct: '{{markdown_pct}}'
      - name: update-shopify
        type: call
        call: shopify.bulk-price-update
        with:
          items: '{{get-pricing-rules.items}}'
          discount_pct: '{{markdown_pct}}'
      - name: log-change
        type: call
        call: sharepoint.append-row
        with:
          site_id: pricing_ops
          workbook: MarkdownLog.xlsx
          row:
            category: '{{category_id}}'
            markdown: '{{markdown_pct}}'
            items_count: '{{get-pricing-rules.total_items}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: conditions
      path: /A_SlsPrcgCndnRecdValidity
      operations:
      - name: get-pricing-conditions
        method: GET
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: pricing
      path: /catalog/products
      operations:
      - name: bulk-price-update
        method: PUT
  - type: http
    namespace: shopify
    baseUri: https://under-armour.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: products
      path: /products.json
      operations:
      - name: bulk-price-update
        method: PUT
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: workbook-rows
      path: /{{site_id}}/drive/root:/{{workbook}}:/workbook/tables/Table1/rows
      inputParameters:
      - name: site_id
        in: path
      - name: workbook
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → seasonal-markdown-orchestrator.yml

Retrieves athletic apparel operational data for workflow 12.

naftiko: '0.5'
info:
  label: Athletic Apparel Data Query 12
  description: Retrieves athletic apparel operational data for workflow 12.
  tags:
  - athletic
  - operations
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: get-data-12
      description: Query athletic apparel data for workflow 12.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: athletic-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: athletic-api
    baseUri: https://api.under-armour.com/athletic-apparel/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → athletic-apparel-data-query-12.yml

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: '0.5'
info:
  label: Third Party Risk Assessment Orchestrator
  description: Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.
  tags:
  - risk
  - procurement
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: run-third-party-risk-assessment-orchestrator
      description: Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Third Party Risk Assessment Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → third-party-risk-assessment-orchestrator.yml

Retrieves athletic apparel operational data for workflow 6.

naftiko: '0.5'
info:
  label: Athletic Apparel Data Query 6
  description: Retrieves athletic apparel operational data for workflow 6.
  tags:
  - athletic
  - operations
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: get-data-6
      description: Query athletic apparel data for workflow 6.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: athletic-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: athletic-api
    baseUri: https://api.under-armour.com/athletic-apparel/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → athletic-apparel-data-query-6.yml

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: '0.5'
info:
  label: Digital Transformation Progress Orchestrator
  description: Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.
  tags:
  - strategy
  - analytics
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: strategy
    port: 8080
    tools:
    - name: run-digital-transformation-progress-orchestrator
      description: Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Digital Transformation Progress Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → digital-transformation-progress-orchestrator.yml

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

naftiko: '0.5'
info:
  label: Employee Onboarding Pipeline
  description: On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for documents, 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 onboarding across Workday, ServiceNow, SharePoint, and Teams for a new hire.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: start_date
        in: body
        type: string
        description: Employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: Department the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding_site
          folder_path: OnboardingDocs/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to Under Armour, {{get-employee.first_name}}! Your onboarding ticket is {{open-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: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://underarmour.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
Open in Framework → View in Fleet → employee-onboarding-pipeline.yml

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: '0.5'
info:
  label: Infrastructure Capacity Planning Orchestrator
  description: Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.
  tags:
  - infrastructure
  - planning
  - finance
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: run-infrastructure-capacity-planning-orchestrator
      description: Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → infrastructure-capacity-planning-orchestrator.yml

Aggregates campaign data from Google Analytics, Facebook Ads, and Instagram into a unified Power BI dataset refresh for the marketing leadership dashboard.

naftiko: '0.5'
info:
  label: Campaign Performance Dashboard Orchestrator
  description: Aggregates campaign data from Google Analytics, Facebook Ads, and Instagram into a unified Power BI dataset refresh for the marketing leadership dashboard.
  tags:
  - marketing
  - analytics
  - google-analytics
  - facebook
  - instagram
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: campaign-dashboard
    port: 8080
    tools:
    - name: refresh-campaign-dashboard
      description: Pull multi-channel campaign metrics and refresh the Power BI dashboard.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: Campaign name to aggregate metrics for.
      - name: date_range
        in: body
        type: string
        description: Date range in YYYY-MM-DD/YYYY-MM-DD format.
      steps:
      - name: get-ga-data
        type: call
        call: ga.get-report
        with:
          campaign: '{{campaign_name}}'
          date_range: '{{date_range}}'
      - name: get-fb-data
        type: call
        call: meta.get-campaign-insights
        with:
          campaign_name: '{{campaign_name}}'
          date_range: '{{date_range}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: marketing_workspace
          dataset_id: campaign_performance
  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
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: campaign-insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-insights
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → campaign-performance-dashboard-orchestrator.yml

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Orchestrator
  description: Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.
  tags:
  - marketing
  - analytics
  - finance
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: run-marketing-campaign-performance-orchestrator
      description: Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Marketing Campaign Performance Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-orchestrator.yml

Retrieves product inventory data from BigCommerce including stock level, low stock warning, and SKU details.

naftiko: '0.5'
info:
  label: BigCommerce Product Inventory Lookup
  description: Retrieves product inventory data from BigCommerce including stock level, low stock warning, and SKU details.
  tags:
  - e-commerce
  - inventory
  - bigcommerce
capability:
  exposes:
  - type: mcp
    namespace: storefront-inventory
    port: 8080
    tools:
    - name: get-product-inventory
      description: Fetch inventory for a BigCommerce product.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: BigCommerce product ID.
      call: bigcommerce.get-product
      with:
        product_id: '{{product_id}}'
      outputParameters:
      - name: inventory_level
        type: number
        mapping: $.data.inventory_level
      - name: inventory_warning_level
        type: number
        mapping: $.data.inventory_warning_level
      - name: sku
        type: string
        mapping: $.data.sku
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → bigcommerce-product-inventory-lookup.yml

Sends a message to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Message Sender
  description: Sends a message to a Microsoft Teams channel.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: communications
    port: 8080
    tools:
    - name: get-microsoft
      description: Sends a message to a Microsoft Teams channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The microsoft teams message sender identifier.
      call: communications-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: communications-api
    baseUri: https://api.under-armour.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: microsoft
      path: /microsoft/teams/message/sender/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-microsoft
        method: GET
Open in Framework → View in Fleet → microsoft-teams-message-sender.yml

Orchestrates athletic apparel workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Athletic Apparel Workflow 8
  description: Orchestrates athletic apparel workflow 8 by coordinating across systems, validating data, and sending notifications.
  tags:
  - athletic
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: run-athletic-apparel-workflow-008
      description: Orchestrates athletic apparel workflow 8 by coordinating across systems, validating data, and sending notifications.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Athletic Apparel Workflow 8 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → athletic-apparel-workflow-8.yml

Retrieves active problems from Dynatrace for the Under Armour e-commerce environment, returning problem ID, title, impact, and root cause.

naftiko: '0.5'
info:
  label: Dynatrace Problem Detection Lookup
  description: Retrieves active problems from Dynatrace for the Under Armour e-commerce environment, returning problem ID, title, impact, and root cause.
  tags:
  - monitoring
  - e-commerce
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-active-problems
      description: Fetch active Dynatrace problems.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range (e.g., 'last2hours').
      call: dynatrace.get-problems
      with:
        relativeTime: '{{time_range}}'
      outputParameters:
      - name: total_count
        type: number
        mapping: $.totalCount
      - name: problems
        type: array
        mapping: $.problems
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://ua.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-problem-detection-lookup.yml

Checks SAP inventory levels against reorder points, creates purchase requisitions for low-stock items, and notifies procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: Inventory Reorder Point Orchestrator
  description: Checks SAP inventory levels against reorder points, creates purchase requisitions for low-stock items, and notifies procurement via Microsoft Teams.
  tags:
  - supply-chain
  - inventory
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: inventory-replenishment
    port: 8080
    tools:
    - name: check-and-reorder
      description: Check inventory levels and create purchase requisitions for items below reorder point.
      inputParameters:
      - name: plant_id
        in: body
        type: string
        description: SAP plant ID.
      - name: material_group
        in: body
        type: string
        description: Material group to check.
      steps:
      - name: check-levels
        type: call
        call: sap.get-inventory-levels
        with:
          plant: '{{plant_id}}'
          material_group: '{{material_group}}'
      - name: create-requisition
        type: call
        call: sap.create-purchase-requisition
        with:
          items: '{{check-levels.below_reorder_items}}'
          plant: '{{plant_id}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-alerts
          text: 'Reorder triggered for {{check-levels.below_reorder_count}} items in plant {{plant_id}}. PR: {{create-requisition.pr_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-inventory-levels
        method: GET
    - name: requisitions
      path: /A_PurchaseRequisition
      operations:
      - name: create-purchase-requisition
        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
Open in Framework → View in Fleet → inventory-reorder-point-orchestrator.yml

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: '0.5'
info:
  label: Quarterly Business Review Orchestrator
  description: Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.
  tags:
  - analytics
  - business
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-quarterly-business-review-orchestrator
      description: Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Quarterly Business Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → quarterly-business-review-orchestrator.yml

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: '0.5'
info:
  label: Security Audit Orchestrator
  description: Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.
  tags:
  - security
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: run-security-audit-orchestrator
      description: Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Security Audit Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → security-audit-orchestrator.yml

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: '0.5'
info:
  label: Vendor Contract Renewal Pipeline
  description: Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.
  tags:
  - procurement
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-vendor-contract-renewal-pipeline
      description: Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Vendor Contract Renewal Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → vendor-contract-renewal-pipeline.yml

Retrieves athletic apparel operational data for workflow 9.

naftiko: '0.5'
info:
  label: Athletic Apparel Data Query 9
  description: Retrieves athletic apparel operational data for workflow 9.
  tags:
  - athletic
  - operations
capability:
  exposes:
  - type: mcp
    namespace: athletic
    port: 8080
    tools:
    - name: get-data-9
      description: Query athletic apparel data for workflow 9.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: athletic-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: athletic-api
    baseUri: https://api.under-armour.com/athletic-apparel/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → athletic-apparel-data-query-9.yml

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: '0.5'
info:
  label: Knowledge Base Refresh Orchestrator
  description: Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.
  tags:
  - knowledge-management
  - collaboration
  - operations
capability:
  exposes:
  - type: mcp
    namespace: knowledge-management
    port: 8080
    tools:
    - name: run-knowledge-base-refresh-orchestrator
      description: Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Knowledge Base Refresh Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → knowledge-base-refresh-orchestrator.yml

Creates a new incident in ServiceNow.

naftiko: '0.5'
info:
  label: ServiceNow Incident Creator
  description: Creates a new incident in ServiceNow.
  tags:
  - it
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it
    port: 8080
    tools:
    - name: get-servicenow
      description: Creates a new incident in ServiceNow.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The servicenow incident creator identifier.
      call: it-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: it-api
    baseUri: https://api.under-armour.com/it/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: servicenow
      path: /servicenow/incident/creator/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-servicenow
        method: GET
Open in Framework → View in Fleet → servicenow-incident-creator.yml

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: '0.5'
info:
  label: IT Change Management Orchestrator
  description: Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.
  tags:
  - it
  - servicenow
  - operations
capability:
  exposes:
  - type: mcp
    namespace: it
    port: 8080
    tools:
    - name: run-it-change-management-orchestrator
      description: Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed IT Change Management Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → it-change-management-orchestrator.yml

Retrieves the current status and details of a Datadog monitor by ID, returning state, message, and last triggered timestamp.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert Lookup
  description: Retrieves the current status and details of a Datadog monitor by ID, returning state, message, and last triggered timestamp.
  tags:
  - monitoring
  - infrastructure
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-monitor-status
      description: Fetch the current status of a Datadog monitor.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.overall_state
      - name: message
        type: string
        mapping: $.message
      - name: last_triggered
        type: string
        mapping: $.overall_state_modified
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-alert-lookup.yml

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: '0.5'
info:
  label: API Lifecycle Management Orchestrator
  description: Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.
  tags:
  - engineering
  - api
  - operations
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: run-api-lifecycle-management-orchestrator
      description: Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed API Lifecycle Management Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → api-lifecycle-management-orchestrator.yml

Retrieves Adobe Analytics site traffic data for the UA.com storefront, returning unique visitors, page views, and average session duration.

naftiko: '0.5'
info:
  label: Adobe Analytics Traffic Report
  description: Retrieves Adobe Analytics site traffic data for the UA.com storefront, returning unique visitors, page views, and average session duration.
  tags:
  - analytics
  - e-commerce
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-site-traffic
      description: Fetch UA.com traffic 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 in YYYY-MM-DD/YYYY-MM-DD format.
      call: adobe-analytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: unique_visitors
        type: number
        mapping: $.totalPages[0].data[0].uniqueVisitors
      - name: page_views
        type: number
        mapping: $.totalPages[0].data[0].pageViews
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: reports
      path: /{{company_id}}/reports
      inputParameters:
      - name: company_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-traffic-report.yml

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: '0.5'
info:
  label: Customer Journey Mapping Orchestrator
  description: Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.
  tags:
  - customer-experience
  - analytics
  - product-management
capability:
  exposes:
  - type: mcp
    namespace: customer-experience
    port: 8080
    tools:
    - name: run-customer-journey-mapping-orchestrator
      description: Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Customer Journey Mapping Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → customer-journey-mapping-orchestrator.yml

Checks size availability for a product across channels.

naftiko: '0.5'
info:
  label: Product Size Availability
  description: Checks size availability for a product across channels.
  tags:
  - inventory
  - product-management
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-product
      description: Checks size availability for a product across channels.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The product size availability identifier.
      call: inventory-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: inventory-api
    baseUri: https://api.under-armour.com/inventory/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: product
      path: /product/size/availability/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → product-size-availability.yml

Retrieves YouTube channel analytics for Under Armour's brand channel, including views, subscribers gained, and watch time.

naftiko: '0.5'
info:
  label: YouTube Channel Analytics Lookup
  description: Retrieves YouTube channel analytics for Under Armour's brand channel, including views, subscribers gained, and watch time.
  tags:
  - marketing
  - video
  - youtube
capability:
  exposes:
  - type: mcp
    namespace: video-analytics
    port: 8080
    tools:
    - name: get-channel-analytics
      description: Fetch YouTube channel analytics for a given date range.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: YouTube channel ID.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: End date YYYY-MM-DD.
      call: youtube.get-analytics
      with:
        channel_id: '{{channel_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: views
        type: number
        mapping: $.rows[0][0]
      - name: subscribers_gained
        type: number
        mapping: $.rows[0][1]
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://youtubeanalytics.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → youtube-channel-analytics-lookup.yml

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: '0.5'
info:
  label: Sustainability Metrics Collection Orchestrator
  description: Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.
  tags:
  - sustainability
  - analytics
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: run-sustainability-metrics-collection-orchestrator
      description: Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → sustainability-metrics-collection-orchestrator.yml

Initiates a stock transfer between Under Armour warehouses by creating a transfer order in SAP, updating Oracle EBS inventory at both locations, and notifying logistics via Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Transfer Orchestrator
  description: Initiates a stock transfer between Under Armour warehouses by creating a transfer order in SAP, updating Oracle EBS inventory at both locations, and notifying logistics via Microsoft Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - oracle-e-business-suite
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: initiate-transfer
      description: Create an inter-warehouse stock transfer with notifications.
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: SAP material number.
      - name: from_plant
        in: body
        type: string
        description: Source warehouse/plant ID.
      - name: to_plant
        in: body
        type: string
        description: Destination warehouse/plant ID.
      - name: quantity
        in: body
        type: number
        description: Quantity to transfer.
      steps:
      - name: create-transfer
        type: call
        call: sap.create-stock-transfer
        with:
          material: '{{material_id}}'
          from_plant: '{{from_plant}}'
          to_plant: '{{to_plant}}'
          quantity: '{{quantity}}'
      - name: update-source
        type: call
        call: oracle-ebs.adjust-inventory
        with:
          item: '{{material_id}}'
          org: '{{from_plant}}'
          adjustment: -{{quantity}}
      - name: update-destination
        type: call
        call: oracle-ebs.adjust-inventory
        with:
          item: '{{material_id}}'
          org: '{{to_plant}}'
          adjustment: +{{quantity}}
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics-ops
          text: 'Stock transfer {{create-transfer.transfer_number}}: {{quantity}} units of {{material_id}} from {{from_plant}} to {{to_plant}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.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: oracle-ebs
    baseUri: https://ua-ebs.under-armour.com/webservices/rest/inventory
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: adjustments
      path: /adjustments
      operations:
      - name: adjust-inventory
        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
Open in Framework → View in Fleet → warehouse-transfer-orchestrator.yml

Retrieves Google Analytics session and conversion data for a given date range and campaign, returning pageviews, bounce rate, and goal completions for DTC performance reviews.

naftiko: '0.5'
info:
  label: Google Analytics Session Lookup
  description: Retrieves Google Analytics session and conversion data for a given date range and campaign, returning pageviews, bounce rate, and goal completions for DTC performance reviews.
  tags:
  - analytics
  - dtc
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics-reporting
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Retrieve GA session data for a specific campaign and date range.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The UTM campaign name to filter on.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.get-report
      with:
        campaign: '{{campaign_name}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: sessions
        type: number
        mapping: $.rows[0].sessions
      - name: bounce_rate
        type: string
        mapping: $.rows[0].bounceRate
      - name: conversions
        type: number
        mapping: $.rows[0].goalCompletionsAll
  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
Open in Framework → View in Fleet → google-analytics-session-lookup.yml

When a new order is placed on BigCommerce, creates a fulfillment record in SAP, updates inventory in Oracle E-Business Suite, and sends a shipping confirmation via MailChimp to the customer.

naftiko: '0.5'
info:
  label: DTC Order Fulfillment Orchestrator
  description: When a new order is placed on BigCommerce, creates a fulfillment record in SAP, updates inventory in Oracle E-Business Suite, and sends a shipping confirmation via MailChimp to the customer.
  tags:
  - e-commerce
  - fulfillment
  - bigcommerce
  - sap
  - oracle-e-business-suite
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: dtc-fulfillment
    port: 8080
    tools:
    - name: process-dtc-order
      description: Given a BigCommerce order ID, orchestrate fulfillment across SAP, Oracle EBS, and MailChimp shipping notification.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The BigCommerce order identifier.
      steps:
      - name: get-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-delivery
        type: call
        call: sap.create-delivery
        with:
          order_ref: '{{get-order.id}}'
          ship_to: '{{get-order.shipping_address}}'
          items: '{{get-order.line_items}}'
      - name: decrement-inventory
        type: call
        call: oracle-ebs.update-inventory
        with:
          items: '{{get-order.line_items}}'
          warehouse: '{{create-delivery.warehouse_id}}'
      - name: send-confirmation
        type: call
        call: mailchimp.send-transactional
        with:
          email: '{{get-order.customer_email}}'
          template: shipping_confirmation
          merge_vars:
            tracking_number: '{{create-delivery.tracking_number}}'
            order_id: '{{order_id}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.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
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: oracle-ebs
    baseUri: https://ua-ebs.under-armour.com/webservices/rest/inventory
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: inventory
      path: /on-hand
      operations:
      - name: update-inventory
        method: PUT
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → dtc-order-fulfillment-orchestrator.yml

Coordinates a new product launch by creating SKUs in SAP, publishing to BigCommerce and Shopify, scheduling a MailChimp email campaign, and posting teaser content to Instagram.

naftiko: '0.5'
info:
  label: Product Launch Coordination Orchestrator
  description: Coordinates a new product launch by creating SKUs in SAP, publishing to BigCommerce and Shopify, scheduling a MailChimp email campaign, and posting teaser content to Instagram.
  tags:
  - product-management
  - e-commerce
  - sap
  - bigcommerce
  - shopify
  - mailchimp
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: coordinate-launch
      description: Orchestrate cross-platform product launch activities.
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: SAP material number for the new product.
      - name: launch_date
        in: body
        type: string
        description: Planned launch date YYYY-MM-DD.
      steps:
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_id: '{{material_id}}'
      - name: publish-bigcommerce
        type: call
        call: bigcommerce.create-product
        with:
          name: '{{get-product.description}}'
          price: '{{get-product.list_price}}'
          sku: '{{material_id}}'
      - name: publish-shopify
        type: call
        call: shopify.create-product
        with:
          title: '{{get-product.description}}'
          variants_price: '{{get-product.list_price}}'
          sku: '{{material_id}}'
      - name: schedule-email
        type: call
        call: mailchimp.schedule-campaign
        with:
          list_id: ua_subscribers
          subject: 'New Arrival: {{get-product.description}}'
          send_time: '{{launch_date}}T10:00:00Z'
      - name: post-teaser
        type: call
        call: instagram.create-media
        with:
          caption: 'Coming {{launch_date}}: {{get-product.description}} #UnderArmour #NewArrival'
          image_url: '{{get-product.image_url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.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('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/ua-store/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: create-product
        method: POST
  - type: http
    namespace: shopify
    baseUri: https://under-armour.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: products
      path: /products.json
      operations:
      - name: create-product
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: schedule-campaign
        method: POST
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      inputParameters:
      - name: ig_user_id
        in: path
      operations:
      - name: create-media
        method: POST
Open in Framework → View in Fleet → product-launch-coordination-orchestrator.yml

Creates a LinkedIn sponsored content campaign by pulling audience segments from Salesforce Marketing Cloud, publishing ad creative, and reporting initial performance back to Google Sheets.

naftiko: '0.5'
info:
  label: LinkedIn Sponsored Content Orchestrator
  description: Creates a LinkedIn sponsored content campaign by pulling audience segments from Salesforce Marketing Cloud, publishing ad creative, and reporting initial performance back to Google Sheets.
  tags:
  - marketing
  - social-media
  - linkedin
  - salesforce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: social-campaigns
    port: 8080
    tools:
    - name: launch-linkedin-campaign
      description: Create and launch a LinkedIn sponsored campaign with audience from SFMC and reporting in Google Sheets.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: Name for the new campaign.
      - name: audience_segment_id
        in: body
        type: string
        description: Salesforce Marketing Cloud segment ID.
      - name: creative_url
        in: body
        type: string
        description: URL of the ad creative asset.
      steps:
      - name: get-audience
        type: call
        call: sfmc.get-segment
        with:
          segment_id: '{{audience_segment_id}}'
      - name: create-campaign
        type: call
        call: linkedin.create-campaign
        with:
          name: '{{campaign_name}}'
          targeting: '{{get-audience.targeting_criteria}}'
          creative_url: '{{creative_url}}'
      - name: log-campaign
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: ua_campaign_tracker
          row:
            campaign_name: '{{campaign_name}}'
            platform: LinkedIn
            campaign_id: '{{create-campaign.id}}'
            status: Launched
  consumes:
  - type: http
    namespace: sfmc
    baseUri: https://ua.rest.marketingcloudapis.com/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: segments
      path: /segments/{{segment_id}}
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-segment
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaigns
      path: /adCampaignsV2
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → linkedin-sponsored-content-orchestrator.yml

Triggers a Power BI dataset refresh.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresher
  description: Triggers a Power BI dataset refresh.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-power
      description: Triggers a Power BI dataset refresh.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The power bi dashboard refresher identifier.
      call: analytics-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: analytics-api
    baseUri: https://api.under-armour.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: power
      path: /power/bi/dashboard/refresher/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-power
        method: GET
Open in Framework → View in Fleet → power-bi-dashboard-refresher.yml

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: '0.5'
info:
  label: Customer Data Privacy Request Handler
  description: Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.
  tags:
  - compliance
  - privacy
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-customer-data-privacy-request-handler
      description: Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Customer Data Privacy Request Handler for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.under-armour.com/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.under-armour.com/v2
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → customer-data-privacy-request-handler.yml

When a product is updated in SAP, synchronizes the product title, description, price, and inventory count to the Shopify DTC storefront.

naftiko: '0.5'
info:
  label: Shopify Product Catalog Sync
  description: When a product is updated in SAP, synchronizes the product title, description, price, and inventory count to the Shopify DTC storefront.
  tags:
  - e-commerce
  - product-management
  - sap
  - shopify
capability:
  exposes:
  - type: mcp
    namespace: product-sync
    port: 8080
    tools:
    - name: sync-product-to-shopify
      description: Push a SAP product update to the Shopify storefront.
      inputParameters:
      - name: sap_material_id
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-material
        type: call
        call: sap.get-material
        with:
          material_id: '{{sap_material_id}}'
      - name: update-shopify
        type: call
        call: shopify.update-product
        with:
          title: '{{get-material.description}}'
          body_html: '{{get-material.long_text}}'
          variants_price: '{{get-material.list_price}}'
          inventory_quantity: '{{get-material.available_stock}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ua-sap.under-armour.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('{{material_id}}')
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: shopify
    baseUri: https://under-armour.myshopify.com/admin/api/2024-01
    authentication:
      type: bearer
      token: $secrets.shopify_token
    resources:
    - name: products
      path: /products/{{product_id}}.json
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: update-product
        method: PUT
Open in Framework → View in Fleet → shopify-product-catalog-sync.yml

Retrieves a file from Google Drive.

naftiko: '0.5'
info:
  label: Google Drive File Viewer
  description: Retrieves a file from Google Drive.
  tags:
  - collaboration
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-google
      description: Retrieves a file from Google Drive.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The google drive file viewer identifier.
      call: collaboration-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: collaboration-api
    baseUri: https://api.under-armour.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: google
      path: /google/drive/file/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-google
        method: GET
Open in Framework → View in Fleet → google-drive-file-viewer.yml

Retrieves available colorways for a product style.

naftiko: '0.5'
info:
  label: Product Colorway Catalog
  description: Retrieves available colorways for a product style.
  tags:
  - product-management
  - merchandising
capability:
  exposes:
  - type: mcp
    namespace: product-management
    port: 8080
    tools:
    - name: get-product
      description: Retrieves available colorways for a product style.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The product colorway catalog identifier.
      call: product-management-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: product-management-api
    baseUri: https://api.under-armour.com/product-management/v1
    authentication:
      type: bearer
      token: $secrets.under_armour_api_token
    resources:
    - name: product
      path: /product/colorway/catalog/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → product-colorway-catalog.yml

Computes vendor evaluation scorecards from SAP data in Snowflake, flags underperformers, creates Jira review tasks, and notifies procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Vendor Evaluation Scorecard
  description: Computes vendor evaluation scorecards from SAP data in Snowflake, flags underperformers, creates Jira review tasks, and notifies procurement via Microsoft Teams.
  tags:
  - procurement
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_vendor_evaluatio
    port: 8080
    tools:
    - name: sap-vendor
      description: Given an execution date, run the sap vendor evaluation scorecard process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_VENDOR_EVALUATION_SCORECARD LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_VENDOR_EVALUATION_SCORECAR_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: SAP Vendor Evaluation Scorecard - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_vendor_evaluatio_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-vendor-evaluation-scorecard.yml

Validates consumer panel data ingestion completeness in Snowflake, flags missing feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Panel Data Ingestion Validator
  description: Validates consumer panel data ingestion completeness in Snowflake, flags missing feeds, creates ServiceNow incidents, and alerts the analytics team via Microsoft Teams.
  tags:
  - analytics
  - consumer-insights
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer_panel_data_
    port: 8080
    tools:
    - name: consumer-panel
      description: Given an execution date, run the consumer panel data ingestion validator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CONSUMER_PANEL_DATA_INGESTION_VALIDATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CONSUMER_PANEL_DATA_INGESTION__RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: analytics
          short_description: Consumer Panel Data Ingestion Validator processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_consumer_panel_data__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-panel-data-ingestion-validator.yml

Retrieves customer master data from SAP by customer number.

naftiko: '0.5'
info:
  label: SAP Customer Master Lookup
  description: Retrieves customer master data from SAP by customer number.
  tags:
  - sales
  - sap
  - customer-data
capability:
  exposes:
  - type: mcp
    namespace: customer-data
    port: 8080
    tools:
    - name: get-customer
      description: Given a SAP customer number, retrieve master data. Use for customer verification.
      inputParameters:
      - name: customer_number
        in: body
        type: string
        description: The SAP customer number.
      call: sap.get-customer
      with:
        customer_number: '{{customer_number}}'
      outputParameters:
      - name: customer_name
        type: string
        mapping: $.d.CustomerName
      - name: country
        type: string
        mapping: $.d.Country
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: customers
      path: /A_Customer('{{customer_number}}')
      inputParameters:
      - name: customer_number
        in: path
      operations:
      - name: get-customer
        method: GET
Open in Framework → View in Fleet → sap-customer-master-lookup.yml

Pulls succession planning data from Workday into Snowflake, identifies gaps, creates Jira development plans, and notifies HR leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Succession Planning Digest
  description: Pulls succession planning data from Workday into Snowflake, identifies gaps, creates Jira development plans, and notifies HR leadership via Microsoft Teams.
  tags:
  - hr
  - succession-planning
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_succession_p
    port: 8080
    tools:
    - name: workday-succession
      description: Given an execution date, run the workday succession planning digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_SUCCESSION_PLANNING_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_SUCCESSION_PLANNING_DI_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Workday Succession Planning Digest - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_succession_p_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-succession-planning-digest.yml

When a personal care production line goes down, retrieves SAP equipment status, creates a ServiceNow ticket, and notifies plant operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Personal Care Production Line Downtime Response
  description: When a personal care production line goes down, retrieves SAP equipment status, creates a ServiceNow ticket, and notifies plant operations via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: handle-line-downtime
      description: 'Orchestrate production line downtime: check SAP equipment, create ServiceNow ticket, notify plant ops.'
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: plant_code
        in: body
        type: string
        description: The plant code.
      steps:
      - name: get-equipment-status
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{equipment_id}}'
      - name: create-maintenance-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line downtime: {{equipment_id}} at {{plant_code}}'
          category: plant_maintenance
          urgency: '1'
          assignment_group: Plant_Maintenance_{{plant_code}}
      - name: notify-plant-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-ops-{{plant_code}}
          text: 'ALERT: Line {{equipment_id}} down at {{plant_code}}. Status: {{get-equipment-status.system_status}}. Ticket: {{create-maintenance-ticket.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: channels
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → personal-care-production-line-downtime-response.yml

Retrieves a transportation order from SAP, returning carrier, route, and status.

naftiko: '0.5'
info:
  label: SAP Transportation Order Lookup
  description: Retrieves a transportation order from SAP, returning carrier, route, and status.
  tags:
  - logistics
  - sap
  - transportation
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: get-transport-order
      description: Given a SAP transportation order number, retrieve details. Use for shipment tracking.
      inputParameters:
      - name: transport_order
        in: body
        type: string
        description: The transportation order number.
      call: sap.get-transport
      with:
        transport_order: '{{transport_order}}'
      outputParameters:
      - name: carrier
        type: string
        mapping: $.d.Carrier
      - name: status
        type: string
        mapping: $.d.TransportationStatus
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_FREIGHT_ORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transport-orders
      path: /FreightOrder('{{transport_order}}')
      inputParameters:
      - name: transport_order
        in: path
      operations:
      - name: get-transport
        method: GET
Open in Framework → View in Fleet → sap-transportation-order-lookup.yml

Reconciles intercompany elimination entries in SAP via Snowflake, flags imbalances, creates ServiceNow tasks, and notifies the consolidation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Intercompany Elimination Reconciler
  description: Reconciles intercompany elimination entries in SAP via Snowflake, flags imbalances, creates ServiceNow tasks, and notifies the consolidation team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_intercompany_eli
    port: 8080
    tools:
    - name: sap-intercompany
      description: Given an execution date, run the sap intercompany elimination reconciler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_INTERCOMPANY_ELIMINATION_RECONCILER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_INTERCOMPANY_ELIMINATION_R_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Intercompany Elimination Reconciler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_intercompany_eli_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-elimination-reconciler.yml

Analyzes factory yield data from SAP in Snowflake, identifies improvement opportunities, creates Jira tasks, and notifies plant management via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Factory Yield Optimization Report
  description: Analyzes factory yield data from SAP in Snowflake, identifies improvement opportunities, creates Jira tasks, and notifies plant management via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_factory_yield_op
    port: 8080
    tools:
    - name: sap-factory
      description: Given an execution date, run the sap factory yield optimization report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_FACTORY_YIELD_OPTIMIZATION_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_FACTORY_YIELD_OPTIMIZATION_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: SAP Factory Yield Optimization Report - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_factory_yield_op_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-factory-yield-optimization-report.yml

Validates SAP period-end close completeness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Period End Close Validator
  description: Validates SAP period-end close completeness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_period_end_close
    port: 8080
    tools:
    - name: sap-period
      description: Given an execution date, run the sap period end close validator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PERIOD_END_CLOSE_VALIDATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PERIOD_END_CLOSE_VALIDATOR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Period End Close Validator processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_period_end_close_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-end-close-validator.yml

Tracks palm oil sourcing traceability in Snowflake, validates against sustainability commitments, creates Jira action items, and notifies the sustainability team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sustainable Sourcing Palm Oil Tracker
  description: Tracks palm oil sourcing traceability in Snowflake, validates against sustainability commitments, creates Jira action items, and notifies the sustainability team via Microsoft Teams.
  tags:
  - sustainability
  - sourcing
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sustainable_sourcing
    port: 8080
    tools:
    - name: sustainable-sourcing
      description: Given an execution date, run the sustainable sourcing palm oil tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SUSTAINABLE_SOURCING_PALM_OIL_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SUSTAINABLE_SOURCING_PALM_OIL__RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Sustainable Sourcing Palm Oil Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sustainable_sourcing_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainable-sourcing-palm-oil-tracker.yml

Pulls gender, ethnicity, and leadership representation data from Workday and publishes a quarterly D&I metrics digest to the HR leadership Teams channel.

naftiko: '0.5'
info:
  label: Workforce Diversity and Inclusion Report
  description: Pulls gender, ethnicity, and leadership representation data from Workday and publishes a quarterly D&I metrics digest to the HR leadership Teams channel.
  tags:
  - hr
  - diversity-inclusion
  - workday
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: di-reporting
    port: 8080
    tools:
    - name: publish-di-report
      description: Given a reporting quarter, retrieve D&I workforce metrics from Workday and post a quarterly diversity and inclusion digest to the HR leadership Teams channel.
      inputParameters:
      - name: reporting_quarter
        in: body
        type: string
        description: Reporting quarter in YYYY-QN format (e.g., 2026-Q1).
      - name: hr_leadership_channel_id
        in: body
        type: string
        description: Teams channel ID for HR leadership.
      steps:
      - name: get-di-metrics
        type: call
        call: workday-di.get-di-report
        with:
          period: '{{reporting_quarter}}'
      - name: post-di-digest
        type: call
        call: msteams-di.post-channel-message
        with:
          channel_id: '{{hr_leadership_channel_id}}'
          text: 'D&I Report ({{reporting_quarter}}): Women in leadership: {{get-di-metrics.women_leadership_pct}}% | Gender parity score: {{get-di-metrics.gender_parity_score}} | Diverse hires: {{get-di-metrics.diverse_hire_pct}}%'
  consumes:
  - type: http
    namespace: workday-di
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: di-report
      path: /reports/diversityInclusion
      inputParameters:
      - name: period
        in: query
      operations:
      - name: get-di-report
        method: GET
  - type: http
    namespace: msteams-di
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workforce-diversity-and-inclusion-report.yml

When an employee or consumer submits a GDPR data subject access request, creates a ServiceNow compliance ticket with 30-day SLA and notifies the data privacy team via Teams.

naftiko: '0.5'
info:
  label: Data Privacy Subject Access Request Handling
  description: When an employee or consumer submits a GDPR data subject access request, creates a ServiceNow compliance ticket with 30-day SLA and notifies the data privacy team via Teams.
  tags:
  - compliance
  - gdpr
  - data-privacy
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-privacy
    port: 8080
    tools:
    - name: handle-subject-access-request
      description: Given a requestor email and request type (access, erasure, rectification), create a ServiceNow GDPR compliance ticket with a 30-day SLA and notify the privacy team via Teams.
      inputParameters:
      - name: requestor_email
        in: body
        type: string
        description: Email address of the data subject making the request.
      - name: request_type
        in: body
        type: string
        description: 'GDPR request type: access, erasure, rectification, portability.'
      - name: privacy_team_channel_id
        in: body
        type: string
        description: Teams channel ID for the data privacy team.
      steps:
      - name: create-dsar-ticket
        type: call
        call: servicenow-dsar.create-task
        with:
          short_description: GDPR {{request_type}} request — {{requestor_email}}
          category: data_privacy
          assignment_group: Data_Privacy_Team
          due_date: 30_days_from_now
      - name: notify-privacy-team
        type: call
        call: msteams-dsar.post-channel-message
        with:
          channel_id: '{{privacy_team_channel_id}}'
          text: 'New GDPR request: {{request_type}} from {{requestor_email}} | SLA: 30 days | ServiceNow ticket: {{create-dsar-ticket.number}}'
  consumes:
  - type: http
    namespace: servicenow-dsar
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-dsar
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-privacy-subject-access-request-handling.yml

Tracks manufacturing waste data from SAP in Snowflake, validates regulatory compliance, creates ServiceNow audit tasks, and notifies the EHS team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Waste Management Compliance Report
  description: Tracks manufacturing waste data from SAP in Snowflake, validates regulatory compliance, creates ServiceNow audit tasks, and notifies the EHS team via Microsoft Teams.
  tags:
  - sustainability
  - compliance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_waste_management
    port: 8080
    tools:
    - name: sap-waste
      description: Given an execution date, run the sap waste management compliance report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_WASTE_MANAGEMENT_COMPLIANCE_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_WASTE_MANAGEMENT_COMPLIANC_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: sustainability
          short_description: SAP Waste Management Compliance Report processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_waste_management_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-waste-management-compliance-report.yml

Processes returned goods in SAP, logs return reasons in Snowflake, creates Jira root cause analysis tasks, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Returned Goods Processing Chain
  description: Processes returned goods in SAP, logs return reasons in Snowflake, creates Jira root cause analysis tasks, and notifies the quality team via Microsoft Teams.
  tags:
  - quality
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_returned_goods_p
    port: 8080
    tools:
    - name: sap-returned
      description: Given an execution date, run the sap returned goods processing chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_RETURNED_GOODS_PROCESSING_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_RETURNED_GOODS_PROCESSING__RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: SAP Returned Goods Processing Chain - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_returned_goods_p_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-returned-goods-processing-chain.yml

Launches the annual performance review cycle in Workday for all employees, posts a kickoff notification to the global HR Teams channel, and tracks completion via ServiceNow.

naftiko: '0.5'
info:
  label: Annual Performance Review Kickoff
  description: Launches the annual performance review cycle in Workday for all employees, posts a kickoff notification to the global HR Teams channel, and tracks completion via ServiceNow.
  tags:
  - hr
  - performance-management
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-mgmt
    port: 8080
    tools:
    - name: launch-annual-review
      description: Given a review cycle name and deadline, launch the performance review in Workday, create a ServiceNow tracking task, and notify all managers via Teams.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: Name of the performance review cycle (e.g., 2026 Annual Performance Review).
      - name: submission_deadline
        in: body
        type: string
        description: Review submission deadline in YYYY-MM-DD format.
      - name: global_hr_channel_id
        in: body
        type: string
        description: Teams channel ID for the global HR communications channel.
      steps:
      - name: launch-review-cycle
        type: call
        call: workday-perf.create-review-cycle
        with:
          cycleName: '{{cycle_name}}'
          dueDate: '{{submission_deadline}}'
      - name: create-tracking-task
        type: call
        call: servicenow-perf.create-task
        with:
          short_description: '{{cycle_name}} completion tracking'
          category: performance_management
          assignment_group: HR_Operations
          due_date: '{{submission_deadline}}'
      - name: notify-managers
        type: call
        call: msteams-perf.post-channel-message
        with:
          channel_id: '{{global_hr_channel_id}}'
          text: '{{cycle_name}} is now open. All managers must complete reviews by {{submission_deadline}}. Log in to Workday to begin. Tracking task: {{create-tracking-task.number}}'
  consumes:
  - type: http
    namespace: workday-perf
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-cycles
      path: /performanceReviewCycles
      operations:
      - name: create-review-cycle
        method: POST
  - type: http
    namespace: servicenow-perf
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-perf
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → annual-performance-review-kickoff.yml

Retrieves open Salesforce opportunity pipeline for Unilever's top retail accounts and posts a weekly pipeline digest to the global sales leadership Teams channel.

naftiko: '0.5'
info:
  label: Retail Customer Opportunity Pipeline Report
  description: Retrieves open Salesforce opportunity pipeline for Unilever's top retail accounts and posts a weekly pipeline digest to the global sales leadership Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-pipeline
    port: 8080
    tools:
    - name: digest-retail-pipeline
      description: Retrieve all open Salesforce opportunities for a key account tier and post a pipeline health digest to the global sales leadership Teams channel.
      inputParameters:
      - name: account_tier
        in: body
        type: string
        description: Retail account tier to report on (e.g., Global Strategic, Regional Key Account).
      - name: sales_channel_id
        in: body
        type: string
        description: Teams channel ID for global sales leadership.
      steps:
      - name: get-pipeline-data
        type: call
        call: salesforce-pipeline.search-opportunities
        with:
          account_tier: '{{account_tier}}'
          stage: Open
      - name: post-pipeline-digest
        type: call
        call: msteams-pipeline.post-channel-message
        with:
          channel_id: '{{sales_channel_id}}'
          text: 'Retail Pipeline ({{account_tier}}): Open opps: {{get-pipeline-data.count}} | Total value: {{get-pipeline-data.total_amount}} | Closing this month: {{get-pipeline-data.closing_this_month}}'
  consumes:
  - type: http
    namespace: salesforce-pipeline
    baseUri: https://unilever.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: account_tier
        in: query
      - name: stage
        in: query
      operations:
      - name: search-opportunities
        method: GET
  - type: http
    namespace: msteams-pipeline
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → retail-customer-opportunity-pipeline-report.yml

Retrieves routing operations for a material from SAP, returning operation details and work center.

naftiko: '0.5'
info:
  label: SAP Routing Operation Lookup
  description: Retrieves routing operations for a material from SAP, returning operation details and work center.
  tags:
  - manufacturing
  - sap
  - production-planning
capability:
  exposes:
  - type: mcp
    namespace: production-planning
    port: 8080
    tools:
    - name: get-routing
      description: Given a SAP material and plant, retrieve routing operations. Use for production planning.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-routing
      with:
        material_number: '{{material_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: work_center
        type: string
        mapping: $.d.WorkCenter
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ROUTING
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: routings
      path: /A_ProductionRouting
      operations:
      - name: get-routing
        method: GET
Open in Framework → View in Fleet → sap-routing-operation-lookup.yml

Analyzes Azure cloud costs in Snowflake, identifies savings opportunities, creates Jira optimization tasks, and notifies the cloud governance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure FinOps Cost Optimization Advisor
  description: Analyzes Azure cloud costs in Snowflake, identifies savings opportunities, creates Jira optimization tasks, and notifies the cloud governance team via Microsoft Teams.
  tags:
  - cloud
  - microsoft-azure
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_finops_cost_op
    port: 8080
    tools:
    - name: azure-finops
      description: Given an execution date, run the azure finops cost optimization advisor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_FINOPS_COST_OPTIMIZATION_ADVISOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_FINOPS_COST_OPTIMIZATION_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Azure FinOps Cost Optimization Advisor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_finops_cost_op_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-finops-cost-optimization-advisor.yml

Tracks employee global mobility assignments in Workday via Snowflake, flags upcoming visa expirations, creates Jira tasks, and notifies HR via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Global Mobility Tracker
  description: Tracks employee global mobility assignments in Workday via Snowflake, flags upcoming visa expirations, creates Jira tasks, and notifies HR via Microsoft Teams.
  tags:
  - hr
  - global-mobility
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_global_mobil
    port: 8080
    tools:
    - name: workday-global
      description: Given an execution date, run the workday global mobility tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_GLOBAL_MOBILITY_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_GLOBAL_MOBILITY_TRACKE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Workday Global Mobility Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_global_mobil_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-global-mobility-tracker.yml

Validates product content on digital shelves against brand standards in Snowflake, creates Jira remediation tasks, and alerts the e-commerce team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Digital Shelf Content Compliance Checker
  description: Validates product content on digital shelves against brand standards in Snowflake, creates Jira remediation tasks, and alerts the e-commerce team via Microsoft Teams.
  tags:
  - e-commerce
  - content
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital_shelf_conten
    port: 8080
    tools:
    - name: digital-shelf
      description: Given an execution date, run the digital shelf content compliance checker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DIGITAL_SHELF_CONTENT_COMPLIANCE_CHECKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DIGITAL_SHELF_CONTENT_COMPLIAN_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Digital Shelf Content Compliance Checker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_digital_shelf_conten_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-shelf-content-compliance-checker.yml

Enriches a Salesforce retail account with the latest trade terms, promotional history, and volume data from SAP, and notifies the key account manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Account Enrichment
  description: Enriches a Salesforce retail account with the latest trade terms, promotional history, and volume data from SAP, and notifies the key account manager via Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-enrichment
    port: 8080
    tools:
    - name: enrich-retailer-account
      description: Given a Salesforce account ID and SAP customer number, fetch the latest trade terms and sales volume from SAP, update the Salesforce account record, and notify the KAM via Teams.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account ID for the retail customer.
      - name: sap_customer_number
        in: body
        type: string
        description: The SAP customer number corresponding to this retailer.
      - name: kam_upn
        in: body
        type: string
        description: UPN of the key account manager to notify.
      steps:
      - name: get-sap-customer
        type: call
        call: sap-sales.get-customer
        with:
          customer_number: '{{sap_customer_number}}'
      - name: update-sf-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{salesforce_account_id}}'
          annual_revenue: '{{get-sap-customer.annual_revenue}}'
          trade_terms: '{{get-sap-customer.trade_terms}}'
      - name: notify-kam
        type: call
        call: msteams-sales.send-message
        with:
          recipient_upn: '{{kam_upn}}'
          text: 'Account enriched: SAP customer {{sap_customer_number}} data synced to Salesforce. Trade terms: {{get-sap-customer.trade_terms}}. Annual revenue: {{get-sap-customer.annual_revenue}}'
  consumes:
  - type: http
    namespace: sap-sales
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: customers
      path: /A_BusinessPartner('{{customer_number}}')
      inputParameters:
      - name: customer_number
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://unilever.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: msteams-sales
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-account-enrichment.yml

Pulls demand forecast signals from Salesforce opportunity pipeline for key retail customers and updates SAP supply planning parameters to align production with anticipated demand.

naftiko: '0.5'
info:
  label: Supply Chain Demand Signal Sync
  description: Pulls demand forecast signals from Salesforce opportunity pipeline for key retail customers and updates SAP supply planning parameters to align production with anticipated demand.
  tags:
  - supply-chain
  - sap
  - salesforce
  - demand-planning
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: sync-demand-signals
      description: Given a retail account ID in Salesforce, retrieve opportunity pipeline demand signals and update SAP supply planning parameters to reflect anticipated order volumes.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account ID of the retail customer.
      - name: planning_horizon_months
        in: body
        type: integer
        description: Number of months forward for the demand signal (1-12).
      steps:
      - name: get-sf-pipeline
        type: call
        call: salesforce-supply.get-account-opportunities
        with:
          account_id: '{{salesforce_account_id}}'
      - name: update-sap-demand
        type: call
        call: sap-supply.update-demand-plan
        with:
          customer_id: '{{get-sf-pipeline.sap_customer_number}}'
          forecast_quantity: '{{get-sf-pipeline.total_quantity}}'
          horizon_months: '{{planning_horizon_months}}'
  consumes:
  - type: http
    namespace: salesforce-supply
    baseUri: https://unilever.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Account/{{account_id}}/Opportunities
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account-opportunities
        method: GET
  - type: http
    namespace: sap-supply
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_REQUIREMENTS_PLANNING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: demand-plans
      path: /A_DemandPlanItem
      operations:
      - name: update-demand-plan
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-signal-sync.yml

Traces batch genealogy from raw materials to finished goods in SAP via Snowflake, logs the full chain, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Batch Genealogy Traceability Chain
  description: Traces batch genealogy from raw materials to finished goods in SAP via Snowflake, logs the full chain, and notifies the quality team via Microsoft Teams.
  tags:
  - quality
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_batch_genealogy_
    port: 8080
    tools:
    - name: sap-batch
      description: Given an execution date, run the sap batch genealogy traceability chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_BATCH_GENEALOGY_TRACEABILITY_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_BATCH_GENEALOGY_TRACEABILI_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_batch_genealogy__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-batch-genealogy-traceability-chain.yml

Compares Workday headcount against budget in Snowflake, flags variances, refreshes Power BI dashboards, and notifies finance via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Headcount Budget Variance Report
  description: Compares Workday headcount against budget in Snowflake, flags variances, refreshes Power BI dashboards, and notifies finance via Microsoft Teams.
  tags:
  - hr
  - finance
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_headcount_bu
    port: 8080
    tools:
    - name: workday-headcount
      description: Given an execution date, run the workday headcount budget variance report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_BUDGET_VARIANCE_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_BUDGET_VARIA_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_headcount_bu_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-budget-variance-report.yml

When a supplier invoice arrives in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Invoice Processing and Approval
  description: When a supplier invoice arrives in SAP, validates it against the purchase order, routes for approval in ServiceNow, and notifies the accounts payable team via Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: process-supplier-invoice
      description: Given a SAP invoice number and PO number, validate the invoice for three-way match, create a ServiceNow approval task, and notify the AP team lead via Teams.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP supplier invoice number.
      - name: po_number
        in: body
        type: string
        description: The associated purchase order number for three-way match.
      - name: invoice_amount
        in: body
        type: number
        description: Invoice amount in local currency.
      steps:
      - name: get-invoice
        type: call
        call: sap-invoice.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: create-approval-task
        type: call
        call: servicenow-ap.create-task
        with:
          short_description: 'Invoice approval: {{invoice_number}} vs PO {{po_number}} — {{invoice_amount}}'
          category: accounts_payable
          assignment_group: AP_Team
      - name: notify-ap-lead
        type: call
        call: msteams-ap.send-message
        with:
          recipient_upn: ap-lead@unilever.com
          text: 'Invoice {{invoice_number}} pending approval. PO: {{po_number}}, Amount: {{invoice_amount}}. Task: {{create-approval-task.number}}'
  consumes:
  - type: http
    namespace: sap-invoice
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: servicenow-ap
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-ap
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-invoice-processing-and-approval.yml

Syncs product innovation ideas from Notion to Jira epics, logs in Snowflake, and notifies the innovation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Notion Product Innovation Pipeline Sync
  description: Syncs product innovation ideas from Notion to Jira epics, logs in Snowflake, and notifies the innovation team via Microsoft Teams.
  tags:
  - innovation
  - notion
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: notion_product_innov
    port: 8080
    tools:
    - name: notion-product
      description: Given an execution date, run the notion product innovation pipeline sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NOTION_PRODUCT_INNOVATION_PIPELINE_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NOTION_PRODUCT_INNOVATION_PIPE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Notion Product Innovation Pipeline Sync - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_notion_product_innov_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → notion-product-innovation-pipeline-sync.yml

Initiates month-end GL period close in SAP S/4HANA, creates a ServiceNow close checklist task, and notifies the global controller via Microsoft Teams.

naftiko: '0.5'
info:
  label: General Ledger Period Close
  description: Initiates month-end GL period close in SAP S/4HANA, creates a ServiceNow close checklist task, and notifies the global controller via Microsoft Teams.
  tags:
  - finance
  - period-close
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: initiate-period-close
      description: Given a fiscal period and year, open the period close in SAP S/4HANA, create a ServiceNow checklist task, and notify the global controller via Teams.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period number (01-12).
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year (e.g., 2026).
      - name: controller_upn
        in: body
        type: string
        description: UPN of the global controller to notify.
      steps:
      - name: open-period
        type: call
        call: sap-close.open-period
        with:
          period: '{{fiscal_period}}'
          year: '{{fiscal_year}}'
      - name: create-checklist
        type: call
        call: servicenow-close.create-task
        with:
          short_description: GL close checklist FY{{fiscal_year}}-P{{fiscal_period}}
          category: finance_close
          assignment_group: Finance_Accounting
      - name: notify-controller
        type: call
        call: msteams-close.send-message
        with:
          recipient_upn: '{{controller_upn}}'
          text: 'Period close initiated: FY{{fiscal_year}}-P{{fiscal_period}}. Checklist task: {{create-checklist.number}}. Please approve all journal entries by the deadline.'
  consumes:
  - type: http
    namespace: sap-close
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_FISCALPERIOD_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: fiscal-periods
      path: /A_FiscalPeriod
      operations:
      - name: open-period
        method: POST
  - type: http
    namespace: servicenow-close
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-close
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → general-ledger-period-close.yml

When a manufacturing plant equipment failure is reported, creates a SAP Plant Maintenance work order and notifies the maintenance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Plant Maintenance Work Order Management
  description: When a manufacturing plant equipment failure is reported, creates a SAP Plant Maintenance work order and notifies the maintenance team via Microsoft Teams.
  tags:
  - manufacturing
  - plant-maintenance
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: plant-maintenance
    port: 8080
    tools:
    - name: create-maintenance-work-order
      description: Given a plant code, equipment ID, and fault description, create a SAP PM work order for the maintenance team and notify the plant engineer via Teams.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: SAP plant code where the equipment is located.
      - name: equipment_id
        in: body
        type: string
        description: SAP equipment ID requiring maintenance.
      - name: fault_description
        in: body
        type: string
        description: Description of the equipment fault or failure.
      - name: plant_engineer_upn
        in: body
        type: string
        description: UPN of the plant engineer to notify.
      steps:
      - name: create-work-order
        type: call
        call: sap-pm.create-work-order
        with:
          plant: '{{plant_code}}'
          equipment: '{{equipment_id}}'
          short_text: '{{fault_description}}'
      - name: notify-plant-engineer
        type: call
        call: msteams-pm.send-message
        with:
          recipient_upn: '{{plant_engineer_upn}}'
          text: 'SAP PM work order created: Equipment {{equipment_id}} at Plant {{plant_code}}. Fault: {{fault_description}}. Work order: {{create-work-order.work_order_number}}'
  consumes:
  - type: http
    namespace: sap-pm
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: work-orders
      path: /MaintenanceOrder
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams-pm
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plant-maintenance-work-order-management.yml

Collects code quality metrics from GitHub repos in Snowflake, tracks trends, creates Jira improvement tasks, and notifies engineering leads via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Code Quality Metrics Reporter
  description: Collects code quality metrics from GitHub repos in Snowflake, tracks trends, creates Jira improvement tasks, and notifies engineering leads via Microsoft Teams.
  tags:
  - devops
  - github
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_code_quality_
    port: 8080
    tools:
    - name: github-code
      description: Given an execution date, run the github code quality metrics reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_CODE_QUALITY_METRICS_REPORTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_CODE_QUALITY_METRICS_RE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: GitHub Code Quality Metrics Reporter - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_code_quality__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-code-quality-metrics-reporter.yml

Identifies SAP Ariba contracts expiring within 90 days, creates a ServiceNow renewal task for the responsible category manager, and notifies them via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Contract Renewal Alert
  description: Identifies SAP Ariba contracts expiring within 90 days, creates a ServiceNow renewal task for the responsible category manager, and notifies them via Microsoft Teams.
  tags:
  - procurement
  - contracts
  - sap-ariba
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-management
    port: 8080
    tools:
    - name: alert-contract-expiry
      description: Given a SAP Ariba contract ID, retrieve expiry details, create a ServiceNow renewal task, and notify the category manager via Teams with renewal action items.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The SAP Ariba contract ID approaching expiry.
      - name: category_manager_upn
        in: body
        type: string
        description: UPN of the category manager responsible for contract renewal.
      steps:
      - name: get-contract
        type: call
        call: ariba-contract.get-contract
        with:
          contractId: '{{contract_id}}'
      - name: create-renewal-task
        type: call
        call: servicenow-contract.create-task
        with:
          short_description: 'Contract renewal: {{get-contract.title}} — expires {{get-contract.expirationDate}}'
          category: procurement
          assignment_group: Category_Management
      - name: notify-category-manager
        type: call
        call: msteams-contract.send-message
        with:
          recipient_upn: '{{category_manager_upn}}'
          text: 'Contract expiry alert: {{get-contract.title}} expires {{get-contract.expirationDate}}. Renewal task: {{create-renewal-task.number}}. Please initiate supplier negotiations.'
  consumes:
  - type: http
    namespace: ariba-contract
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: apikey
      key: apikey
      value: $secrets.ariba_api_key
      placement: header
    resources:
    - name: contracts
      path: /contracts/{{contractId}}
      inputParameters:
      - name: contractId
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: servicenow-contract
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-contract
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-contract-renewal-alert.yml

Retrieves LinkedIn and Meta brand page engagement metrics for a Unilever brand and publishes a weekly social performance digest to the brand marketing Teams channel.

naftiko: '0.5'
info:
  label: Brand Social Media Performance Report
  description: Retrieves LinkedIn and Meta brand page engagement metrics for a Unilever brand and publishes a weekly social performance digest to the brand marketing Teams channel.
  tags:
  - marketing
  - social-media
  - linkedin
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-social-performance
      description: Given a LinkedIn organization ID and a brand name, retrieve social engagement metrics and post a weekly social performance digest to the brand marketing Teams channel.
      inputParameters:
      - name: linkedin_org_id
        in: body
        type: string
        description: LinkedIn organization URN ID for the Unilever brand.
      - name: brand_name
        in: body
        type: string
        description: Name of the Unilever brand (e.g., Dove, Axe, Hellmann's, Knorr).
      - name: marketing_channel_id
        in: body
        type: string
        description: Teams channel ID for the brand marketing team.
      steps:
      - name: get-linkedin-metrics
        type: call
        call: linkedin-social.get-organization-statistics
        with:
          organizationId: '{{linkedin_org_id}}'
      - name: post-social-digest
        type: call
        call: msteams-social.post-channel-message
        with:
          channel_id: '{{marketing_channel_id}}'
          text: 'Social Report — {{brand_name}}: LinkedIn followers: {{get-linkedin-metrics.follower_count}} | New followers (7d): {{get-linkedin-metrics.new_followers}} | Engagement: {{get-linkedin-metrics.engagement_rate}}%'
  consumes:
  - type: http
    namespace: linkedin-social
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-statistics
      path: /organizationPageStatistics
      inputParameters:
      - name: organizationId
        in: query
      operations:
      - name: get-organization-statistics
        method: GET
  - type: http
    namespace: msteams-social
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → brand-social-media-performance-report.yml

Prepares key account quarterly review packages from Salesforce data in Snowflake, refreshes Power BI dashboards, and notifies account managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Key Account Quarterly Review
  description: Prepares key account quarterly review packages from Salesforce data in Snowflake, refreshes Power BI dashboards, and notifies account managers via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_key_accou
    port: 8080
    tools:
    - name: salesforce-key
      description: Given an execution date, run the salesforce key account quarterly review process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_KEY_ACCOUNT_QUARTERLY_REVIEW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_KEY_ACCOUNT_QUARTER_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_key_accou_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-key-account-quarterly-review.yml

Calculates scope 3 carbon footprint across the supply chain in Snowflake, logs progress against targets, and notifies the ESG team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Carbon Footprint Supply Chain Calculator
  description: Calculates scope 3 carbon footprint across the supply chain in Snowflake, logs progress against targets, and notifies the ESG team via Microsoft Teams.
  tags:
  - sustainability
  - supply-chain
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: carbon_footprint_sup
    port: 8080
    tools:
    - name: carbon-footprint
      description: Given an execution date, run the carbon footprint supply chain calculator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CARBON_FOOTPRINT_SUPPLY_CHAIN_CALCULATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CARBON_FOOTPRINT_SUPPLY_CHAIN__RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_carbon_footprint_sup_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → carbon-footprint-supply-chain-calculator.yml

Tracks influencer marketing campaign performance in Snowflake, computes engagement ROI, and distributes insights to the brand team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Beauty Brand Influencer Campaign Tracker
  description: Tracks influencer marketing campaign performance in Snowflake, computes engagement ROI, and distributes insights to the brand team via Microsoft Teams.
  tags:
  - marketing
  - influencer
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: beauty_brand_influen
    port: 8080
    tools:
    - name: beauty-brand
      description: Given an execution date, run the beauty brand influencer campaign tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.BEAUTY_BRAND_INFLUENCER_CAMPAIGN_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.BEAUTY_BRAND_INFLUENCER_CAMPAI_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_beauty_brand_influen_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → beauty-brand-influencer-campaign-tracker.yml

Submits a global IT change request in ServiceNow for system changes affecting Unilever's global infrastructure, routes for CAB approval, and notifies impacted stakeholders via Teams.

naftiko: '0.5'
info:
  label: Global IT Change Management Request
  description: Submits a global IT change request in ServiceNow for system changes affecting Unilever's global infrastructure, routes for CAB approval, and notifies impacted stakeholders via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, risk level, and affected regions, create a ServiceNow change request, assign to the Global CAB, and notify regional IT leads via Teams.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the proposed global IT change.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, high, critical.'
      - name: implementation_date
        in: body
        type: string
        description: Planned implementation date in YYYY-MM-DD format.
      - name: it_leads_channel_id
        in: body
        type: string
        description: Teams channel ID for regional IT leads.
      steps:
      - name: create-change
        type: call
        call: servicenow-change.create-change
        with:
          short_description: '{{change_description}}'
          risk: '{{risk_level}}'
          start_date: '{{implementation_date}}'
          assignment_group: Global_CAB
      - name: notify-it-leads
        type: call
        call: msteams-change.post-channel-message
        with:
          channel_id: '{{it_leads_channel_id}}'
          text: 'Change request {{create-change.number}}: {{change_description}} | Risk: {{risk_level}} | Implementation: {{implementation_date}} | CAB review required.'
  consumes:
  - type: http
    namespace: servicenow-change
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-change
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → global-it-change-management-request.yml

When a major incident is declared in ServiceNow, creates a Microsoft Teams bridge channel, logs the event in Snowflake, and notifies the SRE team.

naftiko: '0.5'
info:
  label: IT Incident Major Incident Bridge Launcher
  description: When a major incident is declared in ServiceNow, creates a Microsoft Teams bridge channel, logs the event in Snowflake, and notifies the SRE team.
  tags:
  - itsm
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it_incident_major_in
    port: 8080
    tools:
    - name: it-incident
      description: Given an execution date, run the it incident major incident bridge launcher process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.IT_INCIDENT_MAJOR_INCIDENT_BRIDGE_LAUNCH LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.IT_INCIDENT_MAJOR_INCIDENT_BRI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: itsm
          short_description: IT Incident Major Incident Bridge Launcher processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_it_incident_major_in_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-incident-major-incident-bridge-launcher.yml

Generates quality certificates for shipped batches from SAP data in Snowflake, logs issuance, creates ServiceNow records, and notifies the QA team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Quality Certificate Generator
  description: Generates quality certificates for shipped batches from SAP data in Snowflake, logs issuance, creates ServiceNow records, and notifies the QA team via Microsoft Teams.
  tags:
  - quality
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_quality_certific
    port: 8080
    tools:
    - name: sap-quality
      description: Given an execution date, run the sap quality certificate generator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_QUALITY_CERTIFICATE_GENERATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_QUALITY_CERTIFICATE_GENERA_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: quality
          short_description: SAP Quality Certificate Generator processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_quality_certific_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-quality-certificate-generator.yml

Monitors cold chain temperature data in Snowflake, flags excursions, creates ServiceNow incidents, and alerts the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Ice Cream Cold Chain Temperature Monitor
  description: Monitors cold chain temperature data in Snowflake, flags excursions, creates ServiceNow incidents, and alerts the logistics team via Microsoft Teams.
  tags:
  - logistics
  - cold-chain
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ice_cream_cold_chain
    port: 8080
    tools:
    - name: ice-cream
      description: Given an execution date, run the ice cream cold chain temperature monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ICE_CREAM_COLD_CHAIN_TEMPERATURE_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ICE_CREAM_COLD_CHAIN_TEMPERATU_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: logistics
          short_description: Ice Cream Cold Chain Temperature Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_ice_cream_cold_chain_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ice-cream-cold-chain-temperature-monitor.yml

Detects production scheduling conflicts in SAP via Snowflake, creates ServiceNow escalation cases, and notifies the planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Production Scheduling Conflict Resolver
  description: Detects production scheduling conflicts in SAP via Snowflake, creates ServiceNow escalation cases, and notifies the planning team via Microsoft Teams.
  tags:
  - manufacturing
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_production_sched
    port: 8080
    tools:
    - name: sap-production
      description: Given an execution date, run the sap production scheduling conflict resolver process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PRODUCTION_SCHEDULING_CONFLICT_RESOL LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PRODUCTION_SCHEDULING_CONF_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: manufacturing
          short_description: SAP Production Scheduling Conflict Resolver processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_production_sched_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-production-scheduling-conflict-resolver.yml

Retrieves SAP sustainability data (carbon emissions, water usage, waste) for a reporting period and publishes a sustainability KPI digest to the Unilever ESG leadership Teams channel.

naftiko: '0.5'
info:
  label: Sustainability KPI Reporting
  description: Retrieves SAP sustainability data (carbon emissions, water usage, waste) for a reporting period and publishes a sustainability KPI digest to the Unilever ESG leadership Teams channel.
  tags:
  - sustainability
  - esg
  - sap
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sustainability-reporting
    port: 8080
    tools:
    - name: publish-sustainability-kpis
      description: Given a reporting quarter and plant or business unit, retrieve carbon, water, and waste KPIs from SAP and post a sustainability performance digest to the ESG leadership Teams channel.
      inputParameters:
      - name: reporting_quarter
        in: body
        type: string
        description: Reporting quarter in YYYY-QN format (e.g., 2026-Q1).
      - name: plant_code
        in: body
        type: string
        description: SAP plant code to report on. Leave blank for global rollup.
      - name: esg_channel_id
        in: body
        type: string
        description: Teams channel ID for the ESG leadership team.
      steps:
      - name: get-sustainability-data
        type: call
        call: sap-esg.get-sustainability-kpis
        with:
          period: '{{reporting_quarter}}'
          plant: '{{plant_code}}'
      - name: post-esg-digest
        type: call
        call: msteams-esg.post-channel-message
        with:
          channel_id: '{{esg_channel_id}}'
          text: 'Sustainability Report ({{reporting_quarter}}): CO2e: {{get-sustainability-data.carbon_tonnes}}t | Water: {{get-sustainability-data.water_m3}}m³ | Waste recycled: {{get-sustainability-data.waste_recycled_pct}}% | Renewable energy: {{get-sustainability-data.renewable_energy_pct}}%'
  consumes:
  - type: http
    namespace: sap-esg
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/SUSTAINABILITY_REPORTING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sustainability-kpis
      path: /SustainabilityKPI
      inputParameters:
      - name: period
        in: query
      - name: plant
        in: query
      operations:
      - name: get-sustainability-kpis
        method: GET
  - type: http
    namespace: msteams-esg
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sustainability-kpi-reporting.yml

When a P1 IT incident is raised in ServiceNow, creates a Datadog event for observability tracking, sends an escalation alert to the regional IT team via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Incident Response and Escalation
  description: When a P1 IT incident is raised in ServiceNow, creates a Datadog event for observability tracking, sends an escalation alert to the regional IT team via Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-incident-response
    port: 8080
    tools:
    - name: handle-it-incident
      description: Given a P1 ServiceNow incident ID and affected system, create a Datadog event for correlation and notify the regional IT team lead via Teams with full incident context.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: affected_system
        in: body
        type: string
        description: The IT system affected by the incident (e.g., SAP ERP, M365, Network).
      - name: it_lead_upn
        in: body
        type: string
        description: UPN of the regional IT team lead for escalation.
      steps:
      - name: get-incident
        type: call
        call: servicenow-it.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'P1 IT Incident: {{affected_system}}'
          text: 'ServiceNow: {{incident_number}} — {{get-incident.short_description}}'
          alert_type: error
      - name: escalate-to-it-lead
        type: call
        call: msteams-it.send-message
        with:
          recipient_upn: '{{it_lead_upn}}'
          text: 'P1 IT INCIDENT: {{affected_system}} | ServiceNow: {{incident_number}} | Description: {{get-incident.short_description}} | Datadog: {{create-datadog-event.url}}'
  consumes:
  - type: http
    namespace: servicenow-it
    baseUri: https://unilever.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-it
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-incident-response-and-escalation.yml

Runs demand sensing algorithms against POS data in Snowflake, updates SAP forecast, and notifies the demand planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Demand Sensing Pipeline
  description: Runs demand sensing algorithms against POS data in Snowflake, updates SAP forecast, and notifies the demand planning team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_demand_sensing_p
    port: 8080
    tools:
    - name: sap-demand
      description: Given an execution date, run the sap demand sensing pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_DEMAND_SENSING_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_DEMAND_SENSING_PIPELINE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_demand_sensing_p_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-demand-sensing-pipeline.yml

Monitors shelf life expiration dates for stocked materials in SAP via Snowflake, flags soon-to-expire inventory, creates ServiceNow tasks, and alerts the warehouse team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Shelf Life Expiry Alert
  description: Monitors shelf life expiration dates for stocked materials in SAP via Snowflake, flags soon-to-expire inventory, creates ServiceNow tasks, and alerts the warehouse team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_shelf_life_expir
    port: 8080
    tools:
    - name: sap-shelf
      description: Given an execution date, run the sap shelf life expiry alert process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_SHELF_LIFE_EXPIRY_ALERT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_SHELF_LIFE_EXPIRY_ALERT_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: supply-chain
          short_description: SAP Shelf Life Expiry Alert processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_shelf_life_expir_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-shelf-life-expiry-alert.yml

Aggregates DTC e-commerce metrics in Snowflake, refreshes Power BI dashboards, and distributes performance digests to the digital commerce team via Microsoft Teams.

naftiko: '0.5'
info:
  label: E-Commerce DTC Channel Performance Digest
  description: Aggregates DTC e-commerce metrics in Snowflake, refreshes Power BI dashboards, and distributes performance digests to the digital commerce team via Microsoft Teams.
  tags:
  - e-commerce
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ecommerce_dtc_channe
    port: 8080
    tools:
    - name: ecommerce-dtc
      description: Given an execution date, run the e-commerce dtc channel performance digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ECOMMERCE_DTC_CHANNEL_PERFORMANCE_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ECOMMERCE_DTC_CHANNEL_PERFORMA_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_ecommerce_dtc_channe_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → e-commerce-dtc-channel-performance-digest.yml

Processes MRP exception messages from SAP in Snowflake, creates ServiceNow urgency cases, and alerts the supply planning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP MRP Exception Handler
  description: Processes MRP exception messages from SAP in Snowflake, creates ServiceNow urgency cases, and alerts the supply planning team via Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_mrp_exception_ha
    port: 8080
    tools:
    - name: sap-mrp
      description: Given an execution date, run the sap mrp exception handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_MRP_EXCEPTION_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_MRP_EXCEPTION_HANDLER_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: supply-chain
          short_description: SAP MRP Exception Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_mrp_exception_ha_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-mrp-exception-handler.yml

When a food safety concern is reported, creates a ServiceNow P1 incident, logs in Snowflake, opens a Jira investigation, and alerts the food safety team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Food Safety Incident Response Chain
  description: When a food safety concern is reported, creates a ServiceNow P1 incident, logs in Snowflake, opens a Jira investigation, and alerts the food safety team via Microsoft Teams.
  tags:
  - food-safety
  - servicenow
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: food_safety_incident
    port: 8080
    tools:
    - name: food-safety
      description: Given an execution date, run the food safety incident response chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.FOOD_SAFETY_INCIDENT_RESPONSE_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.FOOD_SAFETY_INCIDENT_RESPONSE__RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: food-safety
          short_description: Food Safety Incident Response Chain processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_food_safety_incident_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → food-safety-incident-response-chain.yml

When a product quality non-conformance is detected in SAP QM, opens a ServiceNow quality incident, assigns it to the quality assurance team, and notifies the plant manager via Teams.

naftiko: '0.5'
info:
  label: Product Quality Non-Conformance Alert
  description: When a product quality non-conformance is detected in SAP QM, opens a ServiceNow quality incident, assigns it to the quality assurance team, and notifies the plant manager via Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: handle-quality-nonconformance
      description: Given a SAP quality notification ID and plant, create a ServiceNow quality incident, assign it to QA, and notify the plant manager via Teams with corrective action requirements.
      inputParameters:
      - name: quality_notification_id
        in: body
        type: string
        description: The SAP quality notification ID for the non-conformance.
      - name: plant_code
        in: body
        type: string
        description: SAP plant code where the non-conformance was detected.
      - name: product_material
        in: body
        type: string
        description: SAP material number of the affected product.
      - name: plant_manager_upn
        in: body
        type: string
        description: UPN of the plant manager to notify.
      steps:
      - name: get-quality-notification
        type: call
        call: sap-quality.get-quality-notification
        with:
          notification_id: '{{quality_notification_id}}'
      - name: create-quality-incident
        type: call
        call: servicenow-quality.create-incident
        with:
          short_description: 'Quality NC: Material {{product_material}} at Plant {{plant_code}}'
          category: quality_assurance
          priority: '2'
          assignment_group: QA_Team
      - name: notify-plant-manager
        type: call
        call: msteams-quality.send-message
        with:
          recipient_upn: '{{plant_manager_upn}}'
          text: 'Quality non-conformance at Plant {{plant_code}}: Material {{product_material}}. SAP notification: {{quality_notification_id}}. ServiceNow incident: {{create-quality-incident.number}}'
  consumes:
  - type: http
    namespace: sap-quality
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality-notifications
      path: /A_QualityNotification('{{notification_id}}')
      inputParameters:
      - name: notification_id
        in: path
      operations:
      - name: get-quality-notification
        method: GET
  - type: http
    namespace: servicenow-quality
    baseUri: https://unilever.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-quality
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-quality-non-conformance-alert.yml

Tracks plastic packaging reduction metrics in Snowflake, computes progress against targets, refreshes Power BI dashboards, and notifies the sustainability team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Plastic Waste Reduction Progress Tracker
  description: Tracks plastic packaging reduction metrics in Snowflake, computes progress against targets, refreshes Power BI dashboards, and notifies the sustainability team via Microsoft Teams.
  tags:
  - sustainability
  - packaging
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: plastic_waste_reduct
    port: 8080
    tools:
    - name: plastic-waste
      description: Given an execution date, run the plastic waste reduction progress tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PLASTIC_WASTE_REDUCTION_PROGRESS_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PLASTIC_WASTE_REDUCTION_PROGRE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_plastic_waste_reduct_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → plastic-waste-reduction-progress-tracker.yml

Retrieves all Workday employees who have not yet completed open enrollment and sends personalized benefit enrollment reminders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Benefits Enrollment Reminder
  description: Retrieves all Workday employees who have not yet completed open enrollment and sends personalized benefit enrollment reminders via Microsoft Teams.
  tags:
  - hr
  - benefits
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-benefits
    port: 8080
    tools:
    - name: send-enrollment-reminders
      description: Given an enrollment deadline and benefit portal URL, retrieve unenrolled employees from Workday and post reminder messages to the all-employees Teams channel.
      inputParameters:
      - name: enrollment_deadline
        in: body
        type: string
        description: Open enrollment deadline in YYYY-MM-DD format.
      - name: benefit_portal_url
        in: body
        type: string
        description: URL to the benefits enrollment portal.
      - name: hr_channel_id
        in: body
        type: string
        description: Teams channel ID for the all-employees channel.
      steps:
      - name: get-unenrolled-workers
        type: call
        call: workday-benefits.get-workers
        with:
          enrollmentStatus: not_started
      - name: post-enrollment-reminder
        type: call
        call: msteams-benefits.post-channel-message
        with:
          channel_id: '{{hr_channel_id}}'
          text: Benefits enrollment closes {{enrollment_deadline}}. {{get-unenrolled-workers.count}} employees have not yet enrolled. Complete your elections at {{benefit_portal_url}}.
  consumes:
  - type: http
    namespace: workday-benefits
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      inputParameters:
      - name: enrollmentStatus
        in: query
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: msteams-benefits
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-benefits-enrollment-reminder.yml

Tracks supplier diversity spend metrics in Snowflake, computes progress against targets, refreshes Power BI dashboards, and notifies procurement leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Diversity Spend Tracker
  description: Tracks supplier diversity spend metrics in Snowflake, computes progress against targets, refreshes Power BI dashboards, and notifies procurement leadership via Microsoft Teams.
  tags:
  - procurement
  - diversity
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier_diversity_s
    port: 8080
    tools:
    - name: supplier-diversity
      description: Given an execution date, run the supplier diversity spend tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SUPPLIER_DIVERSITY_SPEND_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SUPPLIER_DIVERSITY_SPEND_TRACK_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_supplier_diversity_s_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-diversity-spend-tracker.yml

Processes employee engagement survey results from Workday in Snowflake, generates insights, and distributes to HR business partners via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Employee Engagement Survey Processor
  description: Processes employee engagement survey results from Workday in Snowflake, generates insights, and distributes to HR business partners via Microsoft Teams.
  tags:
  - hr
  - engagement
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_employee_eng
    port: 8080
    tools:
    - name: workday-employee
      description: Given an execution date, run the workday employee engagement survey processor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_EMPLOYEE_ENGAGEMENT_SURVEY_PROCE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_EMPLOYEE_ENGAGEMENT_SU_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_employee_eng_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-employee-engagement-survey-processor.yml

Monitors customs compliance status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Customs Trade Compliance Monitor
  description: Monitors customs compliance status from SAP in Snowflake, flags delayed clearances, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.
  tags:
  - compliance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_customs_trade_co
    port: 8080
    tools:
    - name: sap-customs
      description: Given an execution date, run the sap customs trade compliance monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CUSTOMS_TRADE_COMPLIANCE_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CUSTOMS_TRADE_COMPLIANCE_M_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: SAP Customs Trade Compliance Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_customs_trade_co_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-customs-trade-compliance-monitor.yml

Runs predictive maintenance models against SAP sensor data in Snowflake, creates ServiceNow work orders, and notifies the maintenance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Plant Maintenance Predictive Scheduler
  description: Runs predictive maintenance models against SAP sensor data in Snowflake, creates ServiceNow work orders, and notifies the maintenance team via Microsoft Teams.
  tags:
  - maintenance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_plant_maintenanc
    port: 8080
    tools:
    - name: sap-plant
      description: Given an execution date, run the sap plant maintenance predictive scheduler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PLANT_MAINTENANCE_PREDICTIVE_SCHEDUL LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PLANT_MAINTENANCE_PREDICTI_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: maintenance
          short_description: SAP Plant Maintenance Predictive Scheduler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_plant_maintenanc_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-plant-maintenance-predictive-scheduler.yml

Retrieves the GL balance from SAP for a given company code and account.

naftiko: '0.5'
info:
  label: SAP General Ledger Balance Lookup
  description: Retrieves the GL balance from SAP for a given company code and account.
  tags:
  - finance
  - sap
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: accounting
    port: 8080
    tools:
    - name: get-gl-balance
      description: Given a company code and GL account, retrieve the balance. Use for financial close.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      - name: gl_account
        in: body
        type: string
        description: The GL account number.
      call: sap.get-gl-balance
      with:
        company_code: '{{company_code}}'
        gl_account: '{{gl_account}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.d.EndingBalanceAmtInCoCodeCrcy
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: gl-balances
      path: /A_GLAccountLineItem
      operations:
      - name: get-gl-balance
        method: GET
Open in Framework → View in Fleet → sap-general-ledger-balance-lookup.yml

Reviews home care product formulas against regulatory requirements in Snowflake, flags non-compliant ingredients, creates ServiceNow cases, and notifies the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Home Care Formula Regulatory Review
  description: Reviews home care product formulas against regulatory requirements in Snowflake, flags non-compliant ingredients, creates ServiceNow cases, and notifies the regulatory team via Microsoft Teams.
  tags:
  - regulatory
  - home-care
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: home_care_formula_re
    port: 8080
    tools:
    - name: home-care
      description: Given an execution date, run the home care formula regulatory review process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.HOME_CARE_FORMULA_REGULATORY_REVIEW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.HOME_CARE_FORMULA_REGULATORY_R_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: regulatory
          short_description: Home Care Formula Regulatory Review processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_home_care_formula_re_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → home-care-formula-regulatory-review.yml

Monitors contract lifecycle events in SAP Ariba via Snowflake, flags expiring contracts, creates Jira renewal tasks, and notifies procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Lifecycle Monitor
  description: Monitors contract lifecycle events in SAP Ariba via Snowflake, flags expiring contracts, creates Jira renewal tasks, and notifies procurement via Microsoft Teams.
  tags:
  - procurement
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_ariba_contract_l
    port: 8080
    tools:
    - name: sap-ariba
      description: Given an execution date, run the sap ariba contract lifecycle monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_ARIBA_CONTRACT_LIFECYCLE_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_ARIBA_CONTRACT_LIFECYCLE_M_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: SAP Ariba Contract Lifecycle Monitor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_ariba_contract_l_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-lifecycle-monitor.yml

Monitors social media sentiment spikes in Snowflake, flags potential brand crises, creates ServiceNow incidents, and alerts the communications team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Brand Social Media Crisis Detector
  description: Monitors social media sentiment spikes in Snowflake, flags potential brand crises, creates ServiceNow incidents, and alerts the communications team via Microsoft Teams.
  tags:
  - marketing
  - social-media
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand_social_media_c
    port: 8080
    tools:
    - name: brand-social
      description: Given an execution date, run the brand social media crisis detector process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.BRAND_SOCIAL_MEDIA_CRISIS_DETECTOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.BRAND_SOCIAL_MEDIA_CRISIS_DETE_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: marketing
          short_description: Brand Social Media Crisis Detector processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_brand_social_media_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://unilever.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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → brand-social-media-crisis-detector.yml

Reconciles SAP Concur expense reports against corporate travel bookings for a given reporting period, flags policy violations, and routes exceptions to the finance team via Teams.

naftiko: '0.5'
info:
  label: Travel Expense Report Reconciliation
  description: Reconciles SAP Concur expense reports against corporate travel bookings for a given reporting period, flags policy violations, and routes exceptions to the finance team via Teams.
  tags:
  - finance
  - travel-expense
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-expense
    port: 8080
    tools:
    - name: reconcile-travel-expenses
      description: Given a reporting period, retrieve all Concur expense reports, identify policy violations, and notify the finance team via Teams with a reconciliation summary.
      inputParameters:
      - name: period_start
        in: body
        type: string
        description: Start of the reconciliation period in YYYY-MM-DD format.
      - name: period_end
        in: body
        type: string
        description: End of the reconciliation period in YYYY-MM-DD format.
      - name: finance_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance team.
      steps:
      - name: get-expense-reports
        type: call
        call: concur.get-expense-reports
        with:
          modifiedAfter: '{{period_start}}'
          modifiedBefore: '{{period_end}}'
      - name: post-reconciliation-summary
        type: call
        call: msteams-expense.post-channel-message
        with:
          channel_id: '{{finance_channel_id}}'
          text: 'Expense Reconciliation ({{period_start}} to {{period_end}}): Reports: {{get-expense-reports.count}} | Total: {{get-expense-reports.total_amount}} | Policy violations: {{get-expense-reports.violations_count}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports
      inputParameters:
      - name: modifiedAfter
        in: query
      - name: modifiedBefore
        in: query
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: msteams-expense
    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: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → travel-expense-report-reconciliation.yml

Analyzes transportation costs from SAP in Snowflake, identifies optimization opportunities, creates Jira tasks, and notifies the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Transportation Cost Analysis
  description: Analyzes transportation costs from SAP in Snowflake, identifies optimization opportunities, creates Jira tasks, and notifies the logistics team via Microsoft Teams.
  tags:
  - logistics
  - sap
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_transportation_c
    port: 8080
    tools:
    - name: sap-transportation
      description: Given an execution date, run the sap transportation cost analysis process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_TRANSPORTATION_COST_ANALYSIS LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_TRANSPORTATION_COST_ANALYS_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: SAP Transportation Cost Analysis - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_transportation_c_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-transportation-cost-analysis.yml

Validates personal care product ingredients against regulatory databases in Snowflake, flags non-compliant formulations, and alerts the regulatory affairs team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Personal Care Ingredient Compliance Checker
  description: Validates personal care product ingredients against regulatory databases in Snowflake, flags non-compliant formulations, and alerts the regulatory affairs team via Microsoft Teams.
  tags:
  - regulatory
  - personal-care
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: personal_care_ingred
    port: 8080
    tools:
    - name: personal-care
      description: Given an execution date, run the personal care ingredient compliance checker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PERSONAL_CARE_INGREDIENT_COMPLIANCE_CHEC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PERSONAL_CARE_INGREDIENT_COMPL_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_personal_care_ingred_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → personal-care-ingredient-compliance-checker.yml

Tracks deployment frequency from Azure DevOps in Snowflake, computes DORA metrics, and distributes reports to engineering leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Deployment Frequency Reporter
  description: Tracks deployment frequency from Azure DevOps in Snowflake, computes DORA metrics, and distributes reports to engineering leadership via Microsoft Teams.
  tags:
  - devops
  - azure-devops
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_devops_deploym
    port: 8080
    tools:
    - name: azure-devops
      description: Given an execution date, run the azure devops deployment frequency reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_DEVOPS_DEPLOYMENT_FREQUENCY_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_DEVOPS_DEPLOYMENT_FREQUE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_devops_deploym_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-deployment-frequency-reporter.yml

Identifies distribution gaps across retail channels in Snowflake, creates Jira tasks for field teams, and notifies sales management via Microsoft Teams.

naftiko: '0.5'
info:
  label: Retail Distribution Gap Analyzer
  description: Identifies distribution gaps across retail channels in Snowflake, creates Jira tasks for field teams, and notifies sales management via Microsoft Teams.
  tags:
  - sales
  - retail
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail_distribution_
    port: 8080
    tools:
    - name: retail-distribution
      description: Given an execution date, run the retail distribution gap analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.RETAIL_DISTRIBUTION_GAP_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.RETAIL_DISTRIBUTION_GAP_ANALYZ_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: Retail Distribution Gap Analyzer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_retail_distribution__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → retail-distribution-gap-analyzer.yml

Retrieves real-time stock levels for a material from SAP S/4HANA.

naftiko: '0.5'
info:
  label: SAP Material Stock Check
  description: Retrieves real-time stock levels for a material from SAP S/4HANA.
  tags:
  - supply-chain
  - sap
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-material-stock
      description: Given a SAP material number, retrieve stock levels. Use for inventory checks.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-stock
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: unrestricted_qty
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
  consumes:
  - type: http
    namespace: sap
    baseUri: https://unilever-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-material-stock-check.yml

Scans GitHub Actions workflows for supply chain vulnerabilities in Snowflake, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Actions Supply Chain Security Scanner
  description: Scans GitHub Actions workflows for supply chain vulnerabilities in Snowflake, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.
  tags:
  - security
  - github
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_actions_suppl
    port: 8080
    tools:
    - name: github-actions
      description: Given an execution date, run the github actions supply chain security scanner process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_ACTIONS_SUPPLY_CHAIN_SECURITY_SCA LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_ACTIONS_SUPPLY_CHAIN_SE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: ULOPS
          issue_type: Task
          summary: GitHub Actions Supply Chain Security Scanner - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_actions_suppl_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://unilever.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-supply-chain-security-scanner.yml

Tracks water usage metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Water Usage Sustainability Reporter
  description: Tracks water usage metrics from manufacturing in Snowflake, computes progress against sustainability goals, and notifies the ESG team via Microsoft Teams.
  tags:
  - sustainability
  - manufacturing
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: water_usage_sustaina
    port: 8080
    tools:
    - name: water-usage
      description: Given an execution date, run the water usage sustainability reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WATER_USAGE_SUSTAINABILITY_REPORTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WATER_USAGE_SUSTAINABILITY_REP_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_water_usage_sustaina_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://unilever.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → water-usage-sustainability-reporter.yml

Areas — Total: 2108

  • .NET
  • 3D
  • 3D Modeling
  • A/B Testing
  • AI Agents
  • AI Applications
  • AI Architectures
  • AI Assistants
  • AI Governance
  • AI Platforms
  • AI Tools
  • AJAX
  • API Design
  • API Development
  • API Gateways
  • API Management
  • Acceptance Testing
  • Access Cards
  • Access Control Management
  • Access Controls
  • Access Management
  • Accessibility
  • Accessibility Audits
  • Account Based Marketing
  • Account Management
  • Accountability
  • Accounting
  • Accounting Platforms
  • Accounting Software
  • Accounting Systems
  • Accounts Payables
  • Accounts Receivables
  • Active Directory
  • Activity Tracking
  • Ad Management
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Advertising Platforms
  • Advertising Technologies
  • Agent Frameworks
  • Agentic AI
  • Agentic Frameworks
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alerting
  • Alerts
  • Algorithm Design
  • Algorithm Development
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytics
  • Androids
  • Animations
  • Annotations
  • Anomaly Detections
  • Anti-Money Launderings
  • Apache Portable Runtimes
  • Applicant Tracking Systems
  • Application Architectures
  • Application Deliveries
  • Application Development
  • Application Integrations
  • Application Lifecycle Management
  • Application Management
  • Application Performance Management
  • Application Platforms
  • Application Programming Interfaces
  • Application Securities
  • Applications
  • Architecture Design
  • Architecture Strategies
  • Architectures
  • Archives
  • Archiving
  • Artemis
  • Artifact Repositories
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessment Tools
  • Assessments
  • Asset Inventories
  • Asset Management
  • Asset Managers
  • Asset Protection
  • Asset Tracking
  • Assignments
  • Asynchronous
  • Audience Engagements
  • Audience Segmentations
  • Audience Targetings
  • Audio
  • Audit Management
  • Audit Processes
  • Audit Reports
  • Audit Techniques
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Automated Testing
  • Automation
  • Automation Platforms
  • Automation Testing
  • Automotive
  • Autoscalings
  • Awareness
  • B2B Marketing
  • BI
  • BPM
  • Backend Development
  • Backend Engineering
  • Backends
  • Background Checks
  • Backup And Recovery
  • Backups
  • Banking
  • Banking Platforms
  • Bashes
  • Battery Technologies
  • Behavioral Analysis
  • Belts
  • Benchmarkings
  • Benchmarks
  • Benefits Administration
  • Best Practices
  • Big Data
  • Billings
  • Biotechnologies
  • Blockchains
  • Bloggings
  • Bookings
  • Bookkeepings
  • Border Controls
  • Borrowings
  • Bots
  • Bridges
  • Broadcastings
  • Browser Support
  • Browsers
  • Budgetings
  • Build Automation
  • Build Pipelines
  • Build Systems
  • Build Tools
  • Building Automation
  • Building Securities
  • Business
  • Business Alignments
  • Business Analysis
  • Business Analytics
  • Business Applications
  • Business Continuities
  • Business Excellence
  • Business Intelligence
  • Business Logics
  • Business Management
  • Business Models
  • Business Operations
  • Business Plannings
  • Business Plans
  • Business Process
  • Business Process Automation
  • Business Process Management
  • Business Process Mappings
  • Business Roles
  • Business Software
  • Business Solutions
  • Business Strategies
  • Business Tools
  • Business Transformations
  • Business to Consumers
  • Business-to-Business
  • CAD Software
  • CI
  • Caches
  • Caching
  • Calendars
  • Cameras
  • Campaign Management
  • Capacity Management
  • Capital Markets
  • Carbon Accounting
  • Career Development
  • Case Management
  • Cash Flow Management
  • Cash Management
  • Catalogs
  • Centralized Management
  • Centralized Repositories
  • Certificate Authorities
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Charting
  • Charts
  • Chatbots
  • Chats
  • Chemical Engineering
  • Cities
  • Claims Management
  • Classification
  • Clean Energies
  • Clearings
  • Client Communications
  • Client Experiences
  • Client Management
  • Client Relations
  • Client Relationship Management
  • Client Services
  • Clients
  • Climate Changes
  • Climate Strategies
  • Climates
  • Cloud Adoptions
  • Cloud Architectures
  • Cloud Computes
  • Cloud Computing
  • Cloud Computing Environments
  • Cloud Connectivity
  • Cloud Data
  • Cloud Data Environments
  • Cloud Data Platforms
  • Cloud Development
  • Cloud Ecosystems
  • Cloud Engineering
  • Cloud Environments
  • Cloud Governance
  • Cloud Implementations
  • Cloud Infrastructure
  • Cloud Integrations
  • Cloud Migrations
  • Cloud Natives
  • Cloud Networking
  • Cloud Platforms
  • Cloud Runs
  • Cloud Securities
  • Cloud Security Best Practices
  • Cloud Security Posture Management
  • Cloud Service Providers
  • Cloud Services
  • Cloud Software
  • Cloud Solutions
  • Cloud Storage
  • Cloud Systems
  • Cloud Technologies
  • Cloud Transformations
  • Cloud-Based
  • Cloud-Based Architectures
  • Cloud-Based Data Platforms
  • Cloud-Based Software
  • Cloud-Based Technologies
  • Cloud-based Solutions
  • Cloud-native Applications
  • Cloud-native Architectures
  • Cloud-native Development
  • Cloud-native Platforms
  • Cloud-native Services
  • Cloud-native Solutions
  • Clouds
  • Clustering
  • Coals
  • Code Analysis
  • Code Management
  • Code Quality
  • Code Repositories
  • Code Reviews
  • Code Signings
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collaterals
  • Collections
  • Command Lines
  • Commerce
  • Commodities
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Engagements
  • Community Healths
  • Compatibilities
  • Compensation Management
  • Competency Frameworks
  • Competitive Analyses
  • Competitive Analysis
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Compilers
  • Complaint Management
  • Complex Systems
  • Compliance
  • Compliance Expertises
  • Compliance Frameworks
  • Compliance Management
  • Compliance Managers
  • Compliance Monitoring
  • Compliance Monitoring Programs
  • Compliance Oversights
  • Compliance Policies
  • Compliance Services
  • Compliance Systems
  • Compliance Tools
  • Component Based
  • Compressions
  • Computational Biologies
  • Computational Modeling
  • Computations
  • Computer Aided Design
  • Computer Aided Engineering
  • Computer Aided Manufacturing
  • Computer Applications
  • Computer Sciences
  • Computer Systems
  • Computer Visions
  • Computers
  • Computes
  • Computing
  • Conference Plannings
  • Conferences
  • Conferencings
  • Configuration Management
  • Configuration Management Tools
  • Configurations
  • Connectivity
  • Connectors
  • Construction
  • Consulting Services
  • Consultings
  • Consumer Analytics
  • Consumer Behaviors
  • Consumer Electronics
  • Consumer Protection
  • Contact Centers
  • Contact Management
  • Contacts
  • Container Orchestration
  • Containerization
  • Containerization Technologies
  • Containerized Applications
  • Containerized Workloads
  • Containers
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Generations
  • Content Management
  • Content Management Systems
  • Content Marketing
  • Content Organizations
  • Content Personalizations
  • Content Strategies
  • Contents
  • Contexts and Dependency Injections
  • Continuous Deliveries
  • Continuous Deployments
  • Continuous Improvements
  • Continuous Integration/Continuous Deployments
  • Continuous Integrations
  • Continuous Learning
  • Continuous Monitoring
  • Contract Management
  • Contributions
  • Control Algorithms
  • Control Methods
  • Control Systems
  • Controllers
  • Controls
  • Controls Frameworks
  • Conversational AI
  • Conversion Optimizations
  • Conversion Rate Optimizations
  • Conveyor Systems
  • Coordinates
  • Copywritings
  • Core Systems
  • Corporate Finances
  • Corporate Learning
  • Cost Accounting
  • Cost Containments
  • Cost Controls
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Crawlings
  • Creative Productions
  • Creative Services
  • Creative Suites
  • Creative Tools
  • Credentials
  • Credit Cards
  • Credit Controls
  • Credit Management
  • Credit Ratings
  • Credit Risks
  • Credit Valuation Adjustments
  • Crisis Management
  • Critical Thinkings
  • Cross Platforms
  • Cross-border Data Transfers
  • Cs
  • Cultural Changes
  • Currencies
  • Custodial Services
  • Custodies
  • Custom Development
  • Custom Software
  • Custom Solutions
  • Customer Analytics
  • Customer Data
  • Customer Data Platforms
  • Customer Databases
  • Customer Engagements
  • Customer Experience Design
  • Customer Experiences
  • Customer Feedback
  • Customer Intelligence
  • Customer Journey Mappings
  • Customer Journeys
  • Customer Management
  • Customer Onboardings
  • Customer Portals
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Segmentations
  • Customer Service
  • Customer Success
  • Customer Support
  • Customer Targetings
  • Customizations
  • Customs
  • Customs Brokerages
  • Customs Procedures
  • Cyber Defenses
  • Cyber Resiliences
  • Cyber Securities
  • Cyber Security Assessments
  • Cybersecurities
  • DNS, DHCP, and IP Address Management
  • Dashboards
  • Data
  • Data Access
  • Data Acquisition
  • Data Activations
  • Data Analysis
  • Data Analysis Methods
  • Data Analysis Software
  • Data Analysis Tools
  • Data Analysis Tools And Software
  • Data Analytic Tools
  • Data Analytics
  • Data Analytics Platforms
  • Data Analytics Tools
  • Data And Analytical Tools
  • Data Architectures
  • Data Capabilities
  • Data Captures
  • Data Catalogs
  • Data Centers
  • Data Classification
  • Data Cleanings
  • Data Cleansing
  • Data Cleanups
  • Data Collection Systems
  • Data Collection Tools
  • Data Collections
  • Data Consumptions
  • Data Conversions
  • Data Discoveries
  • Data Distributions
  • Data Encryptions
  • Data Engineering
  • Data Enrichments
  • Data Entries
  • Data Exchanges
  • Data Extractions
  • Data Fabrics
  • Data Factories
  • Data Flows
  • Data Foundations
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Strategies
  • Data Governance Toolings
  • Data Governance Tools
  • Data Handling
  • Data Infrastructure
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Interpretations
  • Data Lake Storage
  • Data Lakes
  • Data Lifecycle
  • Data Lifecycle Management
  • Data Lineages
  • Data Loss Preventions
  • Data Management
  • Data Management Frameworks
  • Data Management Platforms
  • Data Management Systems
  • Data Management Tools
  • Data Manipulations
  • Data Mappings
  • Data Marketplaces
  • Data Meshes
  • Data Migrations
  • Data Minimizations
  • Data Mining
  • Data Monitoring
  • Data Movements
  • Data Operations
  • Data Orchestration
  • Data Ownerships
  • Data Pipelines
  • Data Platforms
  • Data Preparations
  • Data Privacies
  • Data Processes
  • Data Processing
  • Data Processing Frameworks
  • Data Processing Pipelines
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Providers
  • Data Quality
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Management
  • Data Quality Tools
  • Data Reconciliations
  • Data Replications
  • Data Reportings
  • Data Repositories
  • Data Retentions
  • Data Retrievals
  • Data Science Models
  • Data Sciences
  • Data Securities
  • Data Services
  • Data Sharing
  • Data Stacks
  • Data Standardizations
  • Data Stewardships
  • Data Storage
  • Data Storytellings
  • Data Strategies
  • Data Streamings
  • Data Structures
  • Data Systems
  • Data Technologies
  • Data Testing
  • Data Tools
  • Data Tracking
  • Data Transfers
  • Data Transformations
  • Data Transmissions
  • Data Validation
  • Data Visualisations
  • Data Visualization Software
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouses
  • Data Warehousing
  • Data Wranglings
  • Data and Analytics
  • Data-Driven
  • Data-Driven Processes
  • Data-Driven Products
  • Data-driven Decision Making
  • Data-driven Initiatives
  • Data-driven Insights
  • Data-driven Optimizations
  • Database Administration
  • Database Applications
  • Database Design
  • Database Management
  • Database Queries
  • Database Securities
  • Database Systems
  • Database Technologies
  • Databases
  • Debt Collections
  • Debuggings
  • Decentralized
  • Decentralized Autonomous Organizations
  • Decision Making
  • Decision Sciences
  • Decision Support
  • Decision Support Systems
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Dependency Management
  • Dependency Mappings
  • Dependency Tracking
  • Deployment Pipelines
  • Deployment Plannings
  • Deployment Strategies
  • Deployments
  • Derivatives
  • Design
  • Design Guidelines
  • Design Principles
  • Design Reviews
  • Design Software
  • Design Systems
  • Design Thinkings
  • Design Tools
  • Design Validation
  • Desktop Software
  • Desktops
  • Developer Experiences
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Platforms
  • Development Practices
  • Development Process
  • Development Tools
  • Device Drivers
  • Diagnostic Tools
  • Diagnostics
  • Diagrammings
  • Digital Ads
  • Digital Advertising
  • Digital Arts
  • Digital Assets
  • Digital Certificates
  • Digital Channels
  • Digital Commerce
  • Digital Contents
  • Digital Distributions
  • Digital Engagements
  • Digital Experiences
  • Digital Infrastructure
  • Digital Learning Tools
  • Digital Marketing
  • Digital Marketing Technologies
  • Digital Media
  • Digital Operations
  • Digital Products
  • Digital Services
  • Digital Solutions
  • Digital Strategies
  • Digital Systems
  • Digital Technologies
  • Digital Tools
  • Digital Transformations
  • Digital Twins
  • Digital Wallets
  • Digitals
  • Digitizations
  • Directed Acyclic Graphs
  • Directory
  • Directory Services
  • Disaster Recovery
  • Discontinued
  • Disease Preventions
  • Distributed
  • Distributed Applications
  • Distributed Computing
  • Distributed Data Processing
  • Distributed Environments
  • Distributed Systems
  • Distribution Systems
  • Distributions
  • Document Creations
  • Document Management
  • Document Management Systems
  • Document Object Models
  • Document Processing
  • Documentaries
  • Documentations
  • Documents
  • Drift Detections
  • Due Diligences
  • Dynamic Application Security Testing
  • Dynamic Contents
  • Dynamic Models
  • Dynamics
  • E-commerces
  • E-learnings
  • E-mails
  • E-procurements
  • ERP
  • ESB
  • Ecommerce Platforms
  • Ecommerces
  • Econometric Models
  • Econometric Techniques
  • Econometrics
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edge Computing
  • Edteches
  • Education Technologies
  • Educations
  • Efficiencies
  • Elections
  • Electric Vehicles
  • Electrical Grids
  • Electromagnetic Compatibilities
  • Electronic Commerce
  • Electronic Communications
  • Electronic Data Interchange
  • Electronic Payments
  • Electronic Signatures
  • Electronic Tradings
  • Electronics
  • Email Marketing
  • Email Securities
  • Emails
  • Embedded Analytics
  • Embedded Systems
  • Embeddings
  • Emergency Responses
  • Employee Benefits
  • Employee Development
  • Employee Engagements
  • Employee Experiences
  • Employee Networks
  • Employment
  • Enablement
  • Encryptions
  • End To End
  • End-to-end Testing
  • Endpoint Management
  • Endpoint Protection
  • Energies
  • Energy Efficiencies
  • Energy Management
  • Energy Performances
  • Engineering
  • Enterprise AI
  • Enterprise Applications
  • Enterprise Architectures
  • Enterprise Communications
  • Enterprise Data
  • Enterprise IT
  • Enterprise Integrations
  • Enterprise Management
  • Enterprise Performance Management
  • Enterprise Resource Planning
  • Enterprise Risk Management
  • Enterprise Risks
  • Enterprise Securities
  • Enterprise Software
  • Enterprise Solutions
  • Enterprise Systems
  • Enterprise Technologies
  • Enterprises
  • Entertainments
  • Entity Resolutions
  • Entrepreneurships
  • Environment Management
  • Equipments
  • Equities
  • Error Handling
  • Estimations
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Event Management
  • Event Marketing
  • Event Plannings
  • Event Streamings
  • Event Technologies
  • Event-driven Solutions
  • Events
  • Examples
  • Excels
  • Executions
  • Executive Reportings
  • Expense Management
  • Experiment Design
  • Experimentations
  • Exploitations
  • Exploratory Data Analysis
  • Extended Detection and Responses
  • Extensions
  • External Databases
  • External Services
  • External Systems
  • Extract Transform Loads
  • Facilities Management
  • Feature Engineering
  • Feature Enhancements
  • Federations
  • Feedback
  • Feedback Collections
  • Feedback Controls
  • Feedback Systems
  • File Sharing
  • File Transfers
  • Filing Systems
  • Finances
  • Financial Accounting
  • Financial Analysis
  • Financial Analytics
  • Financial Compliances
  • Financial Controls
  • Financial Data
  • Financial Instruments
  • Financial Management
  • Financial Messaging
  • Financial Modeling
  • Financial Models
  • Financial News
  • Financial Operations
  • Financial Plannings
  • Financial Policies
  • Financial Reportings
  • Financial Risk Management
  • Financial Securities
  • Financial Services
  • Financial Software
  • Financial Stabilities
  • Financial Systems
  • Fine-tunings
  • Firewalls
  • Firmwares
  • First-Party Data
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Flinks
  • Flow Data
  • Food Safety
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Formatting Objects Processors
  • Forms
  • Fossil Fuels
  • Foundations
  • Frameworks
  • Fraud Detections
  • Fraud Preventions
  • Freight Forwardings
  • Frenches
  • Front-ends
  • Frontends
  • Full Stack Development
  • Full Stacks
  • Functional Testing
  • Functions
  • Futures
  • Game Developers
  • Game Development
  • Game Engines
  • Gaming Consoles
  • Gamings
  • Gateways
  • General Ledgers
  • Generative AI
  • Generative Modeling
  • Generative Models
  • Genomics
  • Geographies
  • Geolocations
  • Global Markets
  • Global Positioning Systems
  • Goal Settings
  • Google Cloud Functions
  • Governance
  • Governance And Controls
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Policies
  • Government Relations
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphs
  • Green Buildings
  • Green Technologies
  • HCM
  • HR Analytics
  • HR Management
  • HR Systems
  • HR Tech
  • HR Technologies
  • Hardenings
  • Hardware
  • Hbases
  • Healthcare
  • Healthcare Economics
  • Healthcare Systems
  • Heating, Ventilation, and Air Conditionings
  • Hedging
  • Help Desks
  • High Availabilities
  • High Performance Computing
  • High Performances
  • High Throughputs
  • Hirings
  • Hospitality
  • Hosting
  • Human Factors
  • Human Resources
  • Human-Centered Design
  • Hybrid Clouds
  • Hypothesis Testing
  • IP Address Management
  • IPAM
  • IT Architectures
  • IT Audits
  • IT Governance
  • IT Infrastructure
  • IT Management
  • IT Operations
  • IT Plannings
  • IT Platforms
  • IT Project Management
  • IT Risk Management
  • IT Risks
  • IT Service Management
  • IT Services
  • IT Strategies
  • Ideas
  • Ideations
  • Identities
  • Identity And Access Management
  • Identity Management
  • Identity Verifications
  • Illuminations
  • Image Buildings
  • Image Generations
  • Implementations
  • Import Exports
  • Incident Management
  • Incident Responses
  • Inclusive Design
  • Incubation
  • Indexings
  • Industrial Automation
  • Industrial Engineering
  • Industrial Equipments
  • Industry Analysis
  • Inference Optimizations
  • Inferences
  • Informatics
  • Information Architectures
  • Information Design
  • Information Governance
  • Information Management
  • Information Protection
  • Information Securities
  • Information Security Risk Management
  • Information Sharing
  • Information Systems
  • Information Technologies
  • Infrastructure
  • Infrastructure As Codes
  • Infrastructure Improvements
  • Infrastructure Management
  • Infrastructure-as-a-Service
  • Innovation
  • Insights
  • Inspections
  • Instant Messaging
  • Instrumentations
  • Insurances
  • Integrated Development Environments
  • Integrated Solutions
  • Integration Frameworks
  • Integration Platforms
  • Integration Strategies
  • Integration Testing
  • Integration Tests
  • Integrations
  • Integrity
  • Intellectual Properties
  • Intelligence
  • Intelligent Systems
  • Interactive Design
  • Interactive Voice Responses
  • Interactives
  • Interest Rate Swaps
  • Interface Design
  • Interfaces
  • Internal Applications
  • Internal Audits
  • Internal Communications
  • Internal Control Frameworks
  • Internal Controls
  • Internal Databases
  • Internal Networks
  • Internal Platforms
  • Internal Reporting Tools
  • Internal Systems
  • Internal Tools
  • International Laws
  • International Markets
  • International Trades
  • Internationalizations
  • Internet
  • Internet Securities
  • Internet of Things
  • Interoperabilities
  • Intranets
  • Intrusion Detections
  • Inventory Management
  • Investment Analysis
  • Investment Banking
  • Investment Management
  • Investments
  • Investor Relations
  • Invoice Processing
  • Isolations
  • Issue Tracking
  • Iterative Development
  • Ivies
  • Java Virtual Machines
  • Job Boards
  • Journalism
  • Journey Design
  • Journey Mappings
  • Kernels
  • Key Management
  • Key Metrics
  • Key Values
  • Knowledge Bases
  • Knowledge Graphs
  • Knowledge Management
  • Knowledge Sharing
  • LLM
  • Large Data Sets
  • Large Datasets
  • Large Language Models
  • Large-scale Distributed Systems
  • Launch Strategies
  • Law Enforcements
  • Lead Generations
  • Lead Management
  • Leaderships
  • Learning
  • Learning And Development
  • Learning Management
  • Learning Technologies
  • Ledgers
  • Legacy Systems
  • Legal
  • Legal Compliances
  • Legal Frameworks
  • Legal Holds
  • Legal Tech
  • Legal Technologies
  • Lendings
  • Lessons Learned
  • Libraries
  • License Management
  • Licensings
  • Life Cycle Management
  • Lifecycle Management
  • Lightings
  • Linear Algebras
  • Liquidity Management
  • Live Chats
  • Live Data
  • Live Streamings
  • Load Balancers
  • Load Balancings
  • Load Testing
  • Local GAAP
  • Localizations
  • Log Management
  • Logging
  • Logistic Regressions
  • Logistics
  • Loss Data
  • Low Carbons
  • Low Codes
  • Low Latencies
  • Low-Code Platforms
  • M&AS
  • Machine Learning
  • Machine Learning Algorithms
  • Machine Learning Engineering
  • Machine Learning Frameworks
  • Machine Learning Models
  • Machine Learning Platforms
  • Machine Learning Systems
  • Machinings
  • Mails
  • Maintenance
  • Major Incident Management
  • Malware Protection
  • Managed Services
  • Management
  • Management Accounting
  • Management Information
  • Management Software
  • Management Systems
  • Management Tools
  • Manual Processes
  • Manual Testing
  • Manufacturing
  • Mappings
  • Market Analysis
  • Market Analytics
  • Market Coverages
  • Market Data
  • Market Information
  • Market Intelligence
  • Market Researches
  • Market Risks
  • Marketing
  • Marketing Analytics
  • Marketing Automation
  • Marketing Platforms
  • Marketing Strategies
  • Marketing Technologies
  • Marketing Tools
  • Marketplace Platforms
  • Marketplaces
  • Markets
  • Massively Parallel Processing
  • Master Data
  • Master Data Management
  • Material Design
  • Material Handling
  • Mathematical Modeling
  • Mathematics
  • Matrixes
  • Measurements
  • Mechanical Systems
  • Media
  • Media Contents
  • Media Management
  • Media Monitoring
  • Mediations
  • Medical Devices
  • Medical Records
  • Meeting Management
  • Meetings
  • Mental Healths
  • Mentoring
  • Mergers And Acquisitions
  • Meridians
  • Messaging
  • Messaging Platforms
  • Metadata
  • Metadata Management
  • Metrics
  • Microcontrollers
  • Microservices
  • Microsoft Access
  • Middle Offices
  • Middlewares
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Analytics
  • Mobile Applications
  • Mobile Apps
  • Mobile Devices
  • Mobile Technologies
  • Mobiles
  • Model Analysis
  • Model Architectures
  • Model Compressions
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Evaluations
  • Model Fine-tunings
  • Model Governance
  • Model Interpretabilities
  • Model Lifecycle Management
  • Model Management
  • Model Monitoring
  • Model Optimizations
  • Model Performance
  • Model Trainings
  • Model Validation
  • Modeling
  • Modeling Tools
  • Modernizations
  • Modularity
  • Monetizations
  • Monitoring
  • Monitoring And Controls
  • Monitoring Tools
  • Monte Carloes
  • Multi-Agent Systems
  • Multi-Factor Authentications
  • Multi-channels
  • Multi-platforms
  • Multi-regions
  • Multimedias
  • Multimodals
  • Multiplatforms
  • Multiple Systems
  • NLP
  • Natural Gas
  • Natural Language Processing
  • Navigation
  • Negotiations
  • Netwerkens
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Configurations
  • Network Design
  • Network Devices
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Optimizations
  • Network Performance
  • Network Securities
  • Network Topologies
  • Networking
  • Neural Networks
  • Neurodiversities
  • New Tabs
  • News
  • News Media
  • Newsletters
  • No Codes
  • NoSQL
  • Nonprofits
  • Nostro
  • Notebooks
  • Notifications
  • OIA
  • OLE for Process Controls
  • ORM
  • OSX
  • Object-Oriented
  • Observability
  • Observability Toolings
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Software
  • Office Suites
  • Omnichannels
  • On Demands
  • Onboardings
  • Online Banking
  • Online Learning
  • Online Services
  • Online Shoppings
  • Online Tools
  • Ontologies
  • Open Source
  • Open-source Libraries
  • Open-source Technologies
  • Operating System Securities
  • Operating Systems
  • Operational Efficiencies
  • Operational Excellence
  • Operational Intelligence
  • Operational Metrics
  • Operational Reportings
  • Operational Resiliences
  • Operational Risks
  • Operational Systems
  • Operational Technologies
  • Operations
  • Operations Management
  • Operations Researches
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Orchestration
  • Order Books
  • Order Executions
  • Order Management
  • Order Management Systems
  • Organizational Changes
  • Organizational Design
  • Organizational Development
  • Organizational Learning
  • Organizational Structures
  • Organizational Transformations
  • Organizations
  • Package Management
  • Packages
  • Packaging
  • Packaging Innovation
  • Paid Media
  • Panoramas
  • Patch Management
  • Pattern Recognitions
  • Patterns
  • Pay Per Clicks
  • Payment Models
  • Payment Processing
  • Payment Solutions
  • Payment Systems
  • Payments
  • Payroll
  • Penetration Testing
  • Performance
  • Performance Analysis
  • Performance Engineering
  • Performance Evaluations
  • Performance Improvements
  • Performance Management
  • Performance Marketing
  • Performance Measurements
  • Performance Metrics
  • Performance Monitoring
  • Performance Optimizations
  • Performance Testing
  • Performance Tracking
  • Performance Tuning
  • Persistences
  • Personalizations
  • Pharmaceuticals
  • Photographies
  • Physical Securities
  • Pigs
  • Pipeline Management
  • Pipeline Orchestration
  • Pipelines
  • Pivot Tables
  • Planning Analytics
  • Plannings
  • Platform Development
  • Platform Ecosystems
  • Platform Engineering
  • Platform Management
  • Platform Observability
  • Platform Securities
  • Platform Services
  • Platform Software
  • Platform Solutions
  • Platform Strategies
  • Platform Systems
  • Platform-as-a-Service
  • Platforms
  • Plugins
  • Point Of Sales
  • Policies
  • Policy Administration
  • Policy As Codes
  • Policy Enforcements
  • Policy Researches
  • Political Engagements
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Portfolio Management Tools
  • Portfolio Reviews
  • Power Distributions
  • Power Generations
  • Power Plants
  • Power Tools
  • Power Transmissions
  • Practice Management
  • Predictabilities
  • Predictions
  • Predictive Analytics
  • Predictive Modeling
  • Presentation Software
  • Presentations
  • Price Optimizations
  • Price Transparency
  • Pricing Analytics
  • Pricing Models
  • Pricing Strategies
  • Pricing Systems
  • Pricings
  • Prioritizations
  • Privacy
  • Privacy Impact Assessments
  • Probabilities
  • Problem Management
  • Problem Resolutions
  • Problem Solving
  • Problem-Solving Tools
  • Process Analysis
  • Process Analytics
  • Process Automation
  • Process Controls
  • Process Design
  • Process Documentations
  • Process Engineering
  • Process Frameworks
  • Process Improvements
  • Process Management
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Modeling
  • Process Monitoring
  • Process Optimizations
  • Process Orchestration
  • Process Re-engineerings
  • Process Reengineerings
  • Process Safety
  • Processes
  • Procurement Tools
  • Procurements
  • Product Analytics
  • Product Areas
  • Product Costings
  • Product Creation Life Cycles
  • Product Creation Lifecycle
  • Product Design
  • Product Design And Development Process
  • Product Development
  • Product Development Lifecycle
  • Product Information Management
  • Product Lifecycle Management
  • Product Management
  • Product Management Tools
  • Product Owners
  • Product Ownerships
  • Product Platforms
  • Product Roadmaps
  • Product Securities
  • Product Strategies
  • Product Testing
  • Production
  • Production Deployments
  • Production Environments
  • Production Management
  • Production Monitoring
  • Production Support
  • Production Systems
  • Productivity
  • Productivity Software
  • Productivity Tools
  • Products
  • Professional Development
  • Professional Networking
  • Professional Services
  • Professional Trainings
  • Profilings
  • Profitability Analysis
  • Program Management
  • Programmable Logic Controllers
  • Programming
  • Programming Languages
  • Progress Reports
  • Project Charters
  • Project Closeouts
  • Project Governance
  • Project Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Promptings
  • Prompts
  • Property Management
  • Protection
  • Protocols
  • Prototype Development
  • Prototyping
  • Provisioning Process
  • Provisionings
  • Proxies
  • Prunings
  • Psychologies
  • Public Affairs
  • Public Clouds
  • Public Healths
  • Public Key Infrastructure
  • Purchasings
  • Push Notifications
  • QA
  • QA Automation
  • Quality Assurance
  • Quality Control Reports
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Testing
  • Quality Tools
  • Quality Tracking
  • Quantitative Analysis
  • Quantitative Methods
  • Quantitative Modeling
  • Quantum Computing
  • Query Languages
  • Query Optimizations
  • Queues
  • Rapid Development
  • Rapid Prototyping
  • Ratings
  • Reactives
  • Real Estates
  • Real Time
  • Real-Time Operating Systems
  • Real-time Analytics
  • Real-time Data
  • Real-time Data Streaming Technologies
  • Real-time Data Visualizations
  • Real-time Insights
  • Real-time Monitoring
  • Real-time Visibility
  • Reasonings
  • Receivables Management
  • Recipes
  • Reconciliation Reports
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Reference Data
  • Registrations
  • Regression Analysis
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Compliances
  • Regulatory Filings
  • Regulatory Intelligence
  • Regulatory Reportings
  • Regulatory Solutions
  • Regulatory Technologies
  • Reinforcement Learning
  • Relational Data
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Activities
  • Release Engineering
  • Release Management
  • Release Management Processes
  • Release Pipelines
  • Release Plannings
  • Reliabilities
  • Reliability Engineering
  • Remittances
  • Remote Access
  • Remote Collaborations
  • Remote Communications
  • Remote Works
  • Rendering
  • Renewable Energies
  • Replications
  • Reporting And Analytics
  • Reporting Applications
  • Reporting Automation
  • Reporting Dashboards
  • Reporting Frameworks
  • Reporting Mechanisms
  • Reporting Platforms
  • Reporting Solutions
  • Reporting Systems
  • Reporting Tools
  • Reportings
  • Repository Management
  • Requirements
  • Requirements Gatherings
  • Requirements Management
  • Research
  • Research Data
  • Research Tools
  • Reservation Systems
  • Resilience Engineering
  • Resiliences
  • Resiliency
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Rest Assured
  • Retail Technologies
  • Retails
  • Reusable Components
  • Revenue Management
  • Revenue Optimizations
  • Revenues
  • Review And Approvals
  • Reviews
  • Rich Internet Applications
  • Risk Analysis
  • Risk Analysis Tools
  • Risk Assessments
  • Risk Management
  • Risk Management Plans
  • Risk Management Tools
  • Risk Models
  • Robotic Process Automation
  • Robotics
  • Robustness
  • Root Cause Analysis
  • Routers
  • Routings
  • Runtimes
  • SUMIF
  • Safes
  • Safety
  • Safety Engineering
  • Sales
  • Sales Analytics
  • Sales Analytics Tools
  • Sales Automation
  • Sales Enablement
  • Sales Enablement Tools
  • Sales Intelligence
  • Sales Management
  • Sales Productivity
  • Sales Technologies
  • Sales Tools
  • Sales Trainings
  • Sanctions
  • Sandboxes
  • Scalabilities
  • Scaling
  • Scannings
  • Scenario Analysis
  • Scenario Modeling
  • Scenarios
  • Scheduling
  • Scientific Computing
  • Scientific Methods
  • Scorings
  • Screenings
  • Scripting Languages
  • Scriptings
  • Search
  • Search Engine Optimizations
  • Search Engines
  • Secure Architectures
  • Secure Coding Practices
  • Secure Codings
  • Secure Configurations
  • Secure Design
  • Secure Design Reviews
  • Secure Development
  • Secure Platforms
  • Secure Transports
  • Secure+s
  • Securities Tradings
  • Security
  • Security Administration
  • Security Architectures
  • Security Assessments
  • Security Audits
  • Security Automation
  • Security Best Practices
  • Security Compliances
  • Security Controls
  • Security Design
  • Security Development Lifecycle
  • Security Engineering
  • Security Frameworks
  • Security Governance
  • Security Groups
  • Security Incident Responses
  • Security Information and Event Management
  • Security Infrastructure
  • Security Management
  • Security Measures
  • Security Monitoring
  • Security Operations
  • Security Orchestration, Automation and Responses
  • Security Platforms
  • Security Procedures
  • Security Requirements
  • Security Reviews
  • Security Risk Assessments
  • Security Settings
  • Security Solutions
  • Security Systems
  • Security Testing
  • Security Tools
  • Segmentations
  • Self Services
  • Self-Hosted
  • Self-improvements
  • Semantic Searches
  • Sensors
  • Serverless
  • Serverless Architectures
  • Servers
  • Service Bus
  • Service Catalogs
  • Service Clouds
  • Service Deliveries
  • Service Design
  • Service Desks
  • Service Management
  • Service Operations
  • Service Portfolio Management
  • Service Recovery
  • Services
  • Servlets
  • Settlements
  • Shared Responsibilities
  • Shells
  • Shippings
  • Short Message Services
  • Signal Processing
  • Simple API for XML
  • Simulation Modeling
  • Simulation Platforms
  • Simulation Tools
  • Simulations
  • Simulators
  • Site Reliability Engineering
  • Skill Development
  • Skills Development
  • Slides
  • Slideshows
  • Smart Homes
  • Smart Workings
  • Smartphones
  • Smoke Testing
  • Social
  • Social Data
  • Social Media
  • Social Media Management
  • Social Media Marketing
  • Social Networking
  • Social Networks
  • Software
  • Software Applications
  • Software Architectures
  • Software Configuration Management
  • Software Configurations
  • Software Deliveries
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Kits
  • Software Engineering
  • Software Interfaces
  • Software Licensings
  • Software Management
  • Software Platforms
  • Software Projects
  • Software Quality
  • Software Solutions
  • Software Systems
  • Software Technologies
  • Software Testing
  • Software Tools
  • Software-as-a-Service
  • Solutions
  • Source Code Management
  • Source Codes
  • Source Controls
  • Source Systems
  • Sourcings
  • Space Explorations
  • Spend Management
  • Spreadsheets
  • Stakeholder Management
  • Standups
  • Startups
  • Static Application Security Testing
  • Statistical Analysis
  • Statistical Analysis Software
  • Statistical Analysis Techniques
  • Statistical Computing
  • Statistical Methods
  • Statistical Modeling
  • Statistical Modellings
  • Statistical Models
  • Statistical Packages
  • Statistical Techniques
  • Statistical Tools
  • Statistics
  • Stock Controls
  • Stock Reconciliations
  • Storage
  • Stored Procedures
  • Strategic Design
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Streaming Data
  • Streamings
  • Structured Data
  • Subscription Management
  • Subscriptions
  • Supervised Learning
  • Supplier Contracts
  • Supplier Management
  • Supply Chain Finances
  • Supply Chain Management
  • Supply Chain Securities
  • Supply Chains
  • Support
  • Support Platforms
  • Support Systems
  • Surveillances
  • Survey Tools
  • Sustainability
  • Switches
  • Synthetic Testing
  • Synthetics
  • System Administration
  • System Analysis
  • System Applications
  • System Architectures
  • System Automation
  • System Configurations
  • System Design
  • System Development
  • System Enhancements
  • System Hardenings
  • System Implementations
  • System Information
  • System Integrations
  • System Interfaces
  • System Maintenance
  • System Management
  • System Monitoring
  • System Operations
  • System Optimizations
  • System Performances
  • System Programming
  • System Requirements
  • System Securities
  • System Software
  • System Solutions
  • System Stabilities
  • System Testing
  • System Tests
  • System Tools
  • System Updates
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Architectures
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Enhancements
  • Systems Integrations
  • Systems Management
  • Systems Testing
  • Systems Thinkings
  • T1S
  • Tableaux De Bords
  • Tablets
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Management
  • Tasks
  • Tax Compliances
  • Tax Laws
  • Tax Management
  • Tax Plannings
  • Tax Preparations
  • Tax Researches
  • Tax Software
  • Tax Systems
  • Tax Technology Solutions
  • Taxes
  • Tcls
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Teaps
  • Technical Debt
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Adoptions
  • Technology Architectures
  • Technology Governance
  • Technology Platforms
  • Technology Risk Management
  • Technology Services
  • Technology Stacks
  • Technology Strategies
  • Technology Upgrades
  • Telecommunications
  • Telefonoes
  • Telefons
  • Telefoons
  • Telemetry
  • Telephonies
  • Telewerkens
  • Terminals
  • Territory Management
  • Test Anything Protocols
  • Test Automation
  • Test Automation Frameworks
  • Test Design
  • Test Engineering
  • Test Equipments
  • Test Executions
  • Test Instruments
  • Test Plannings
  • Test Reportings
  • Test Strategies
  • Test Tools
  • Test-and-learns
  • Testing Frameworks
  • Testing Strategies
  • Testing Tools
  • Tests
  • Text Mining
  • Third Parties
  • Third Party Risks
  • Third-Party Integrations
  • Third-party Data
  • Third-party Management
  • Third-party Risk Management
  • Third-party Securities
  • Third-party Systems
  • Threat Analysis
  • Threat Detections
  • Threat Huntings
  • Threat Intelligence
  • Threat Mitigations
  • Threat Modeling
  • Threat Preventions
  • Threat Protection
  • Ticketing
  • Ticketing Systems
  • Tickets
  • Time Management
  • Time Series
  • Timelines
  • Tools
  • Total Rewards
  • Tracing
  • Tracking
  • Tracs
  • Trade Compliances
  • Trade Finances
  • Trade Management
  • Trade Operations
  • Trade Shows
  • Trade Support
  • Trading Platforms
  • Tradings
  • Traffic Management
  • Training Data
  • Training Management
  • Training Matrixes
  • Training Platforms
  • Trainings
  • Transaction Processing
  • Transfer Learning
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travel Management
  • Travels
  • Traversals
  • Treasuries
  • Treasury Management
  • Treasury Operations
  • Troubleshooting
  • Tuning
  • Turkishes
  • UI
  • UI Design
  • UX
  • UX Design
  • Unified Communications
  • Unit Testing
  • Unixes
  • Unstructured Data
  • Unsupervised Learning
  • Updates
  • Uptime
  • Usabilities
  • Usability Testing
  • User Acceptance Testing
  • User Engagements
  • User Experiences
  • User Feedback
  • User Generated Contents
  • User Guides
  • User Insights
  • User Interface/User Experiences
  • User Interfaces
  • User Journeys
  • User Management
  • User Provisionings
  • User Researches
  • User Testing
  • Utilities
  • Utility Systems
  • VBA
  • VOIP
  • Validation
  • Validation Rules
  • Validation and Testing
  • Valuation Models
  • Valuations
  • Value Streams
  • Vector Databases
  • Vehicle Repairs
  • Vendor Management
  • Venture Capital
  • Venue Management
  • Venue Selections
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Editing Tools
  • Video Editings
  • Video Games
  • Video Productions
  • Videogespreks
  • Videos
  • Virtual Environments
  • Virtual Events
  • Virtual Meetings
  • Virtual Trainings
  • Virtualizations
  • Visibility
  • Visual Analytics
  • Visual Design
  • Visual Effects
  • Visual Management
  • Visualizations
  • Voice
  • Volume Managers
  • Votings
  • Vues
  • Vulnerability Assessments
  • Vulnerability Management
  • Vulnerability Scannings
  • Wallets
  • Warehouse Automation
  • Warehouse Equipments
  • Warehouse Management
  • Warehouse Technologies
  • Web Analytics
  • Web Application Technologies
  • Web Applications
  • Web Apps
  • Web Based
  • Web Browsers
  • Web Components
  • Web Design
  • Web Development
  • Web Interfaces
  • Web Performances
  • Web Platforms
  • Web Services
  • Web Sites
  • Web Technologies
  • Web-based Applications
  • Webinars
  • Webs
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wikis
  • Wins
  • Words
  • Work From Homes
  • Work Life Balances
  • Workflow Analysis
  • Workflow Automation
  • Workflow Design
  • Workflow Management
  • Workflow Management Tools
  • Workflow Optimizations
  • Workflow Orchestration
  • Workflow Systems
  • Workflow Toolings
  • Workflow Tools
  • Workflows
  • Workforce Development
  • Workforce Management
  • Working Capital
  • Workplace Safety
  • Workshops
  • Workspaces

Services — Total: 378

  • ADP
  • AWS Lambda
  • Adobe
  • Adobe Acrobat
  • Adobe Analytics
  • Adobe Campaign
  • Adobe Captivate
  • Adobe Creative Cloud
  • Adobe Creative Suite
  • Adobe Illustrator
  • Adobe Launch
  • Adobe Photoshop
  • Adobe Premiere Pro
  • Adobe Suite
  • Airtable
  • Alteryx
  • Amazon API Gateway
  • Amazon ECS
  • Amazon Kinesis
  • Amazon Redshift
  • Amazon S3
  • Amazon SNS
  • Amazon SQS
  • Amazon SageMaker
  • Amazon Web Services
  • Ambassador
  • Android
  • Ansible Automation Platform
  • Ansible Tower
  • Anthropic
  • Apache Airflow
  • Apache Software Foundation
  • Apigee
  • Appian
  • Apple
  • Apple Keynote
  • Apple Pay
  • Apple Safari
  • Ariba
  • Artifactory
  • Aruba
  • Asana
  • Atlassian
  • AutoCAD
  • Autodesk Fusion 360
  • Autodesk Maya
  • Avalara
  • Axway
  • Azure Active Directory
  • Azure Data Factory
  • Azure Databricks
  • Azure DevOps
  • Azure Event Hubs
  • Azure Functions
  • Azure Key Vault
  • Azure Kubernetes Service
  • Azure Log Analytics
  • Azure Machine Learning
  • Azure Service Bus
  • Azure Synapse Analytics
  • Azure Virtual Desktop
  • Azure Virtual Machines
  • Backstage
  • BigCommerce
  • Bitbucket
  • Bloomberg
  • Bloomberg AIM
  • Bloomberg Buyside Enterprise Solutions
  • Bloomberg Economics
  • Bloomberg Enterprise Data
  • Bloomberg Intelligence
  • Bloomberg Law (BLAW)
  • Bloomberg News
  • Bloomberg Professional Service
  • Bloomberg Query Language (BQL)
  • Bloomberg TV
  • Bloomberg Television and Radio
  • Bloomberg Terminal
  • Bloomberg Tradebook
  • Boomi
  • Box
  • Canva
  • ChatGPT
  • Checkmarx
  • Choreo
  • Circana
  • Cisco
  • Cisco Catalyst Center
  • Cisco Expressway
  • Cisco Firepower
  • Cisco Nexus
  • Cisco Voice Portal
  • Cisco Webex
  • Citrix
  • Citrix NetScaler
  • Claude
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Cobalt
  • Commvault
  • Concur
  • Conductor
  • Confluence
  • Cortex
  • Coupa
  • Crystal Reports
  • Cvent
  • Databricks
  • Databricks Asset Bundles
  • Datadog
  • Dataiku
  • Discord
  • DocuSign
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • Eloqua
  • F5 Networks
  • Facebook
  • Facebook Ads
  • FactSet
  • Fern
  • Figma
  • Finch
  • Fortify
  • Fusio
  • G2
  • GCP Cloud Storage
  • Gemini
  • GitHub
  • GitHub Actions
  • GitHub Copilot
  • GitLab
  • Gmail
  • Gong
  • Google
  • Google Ads
  • Google Analytics
  • Google Android
  • Google Apps Script
  • Google Campaign Manager
  • Google Chrome
  • Google Cloud Dataflow
  • Google Cloud Platform
  • Google Data Studio
  • Google Docs
  • Google Drive
  • Google Forms
  • Google Maps
  • Google Marketing Platform
  • Google Optimize
  • Google Pay
  • Google Search Console
  • Google Sheets
  • Google Slides
  • Google Tag Manager
  • Google Workspace
  • Harness
  • Hobart
  • HubSpot
  • Hugging Face
  • Hunter
  • IBM
  • Indeed
  • Informatica
  • Informática
  • Insomnia
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Intuit
  • Istio
  • JFrog Artifactory
  • Jira
  • Juniper
  • Juniper Networks
  • Kinesis
  • Knit
  • Konfig
  • Kong
  • Kuma
  • Lambda
  • Lightroom
  • LinkedIn
  • Looker
  • Looker Studio
  • Lumos
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Maya
  • McAfee
  • Membrane
  • Merge
  • Meta
  • Metasploit
  • Microsoft
  • Microsoft .NET
  • Microsoft 365
  • Microsoft Access
  • Microsoft Azure
  • Microsoft Bicep
  • Microsoft Configuration Manager
  • Microsoft Copilot
  • Microsoft Defender
  • Microsoft Dynamics
  • Microsoft Dynamics 365
  • Microsoft Edge
  • Microsoft Endpoint Configuration Management
  • Microsoft Endpoint Manager
  • Microsoft Entity Framework
  • Microsoft Entra
  • Microsoft Excel
  • Microsoft Exchange
  • Microsoft Graph
  • Microsoft Identity Manager
  • Microsoft Intune
  • Microsoft Office
  • Microsoft Office 365
  • Microsoft Outlook
  • Microsoft Planner
  • Microsoft Power Apps
  • Microsoft Power Automate
  • Microsoft Power Platform
  • Microsoft PowerPoint
  • Microsoft Project
  • Microsoft Purview
  • Microsoft Sentinel
  • Microsoft Teams
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Windows 10
  • Microsoft Word
  • Microsoft Xbox
  • Mixpanel
  • Montran
  • Moody's
  • MuleSoft
  • NASA
  • Nango
  • Navision
  • NetApp
  • New Relic
  • Notion
  • Ollama
  • OpenAI
  • OpenShift
  • Oracle
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle E-Business Suite
  • Oracle Enterprise Manager
  • Oracle Fusion
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Oracle R12
  • Oracle Siebel
  • Oracle WebLogic
  • Orion
  • Palo Alto Networks
  • Panora
  • Paradox
  • Paragon
  • Paw
  • PeopleSoft
  • Perforce
  • Photoshop
  • Pluralsight
  • Port
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Prisma
  • Productiv
  • Prosci
  • Pulse
  • Qlik
  • Qlik Sense
  • Qlik Sense Enterprise
  • QlikSense
  • QlikView
  • Qube
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Enterprise Linux
  • Red Hat Satellite
  • Reuters
  • Revert
  • SAP
  • SAP Ariba
  • SAP BRIM (Billing and Revenue Innovation Management)
  • SAP BW
  • SAP Commerce Cloud
  • SAP Concur
  • SAP Concur Expense
  • SAP HANA
  • SAP Integration Suite
  • SAP S/4HANA
  • SAP Sales and Distribution (SD)
  • SQL Server
  • SailPoint
  • Salesforce
  • Salesforce Automation
  • Salesforce Einstein
  • Salesforce Lightning
  • Salesforce Marketing Cloud
  • Salesforce Sales Cloud
  • Salesforce Service Cloud
  • Scalar
  • Seismic
  • Sentry System
  • Service Cloud
  • ServiceNow
  • SharePoint
  • Shell
  • Shopify
  • Siebel
  • SimCorp Dimension
  • Slack
  • Snowflake
  • SolarWinds
  • Solaris Zones
  • Sparx Enterprise Architect
  • Splunk
  • Spot
  • Square
  • Stainless
  • Stripe
  • Tableau
  • Tableau Desktop
  • Tanium
  • TeamCity
  • Temenos Transact
  • Temporal
  • Teradata
  • Torii
  • Tradeweb
  • Trellix Web Gateway
  • Tropic
  • Twitch
  • Twitter
  • Tyk
  • Unity
  • Unix
  • VMware
  • Vantage
  • Vendr
  • Vercel
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebLogic
  • WebSphere
  • WhatsApp
  • Windmill
  • Workday
  • Workday Integration
  • Workday Payroll
  • Workday Report Writer
  • Youtube
  • Zendesk
  • Zesty
  • Zoom
  • ZoomInfo
  • Zylo
  • n8n
  • nOps

Tools — Total: 231

  • Akri
  • Angular
  • Ansible
  • Apache
  • Apache AGE
  • Apache APR
  • Apache ActiveMQ
  • Apache Airflow
  • Apache Ant
  • Apache Archiva
  • Apache Aries
  • Apache Arrow
  • Apache Atlas
  • Apache Axis
  • Apache Beam
  • Apache BookKeeper
  • Apache Brooklyn
  • Apache CXF
  • Apache Camel
  • Apache Cassandra
  • Apache Commons
  • Apache Cordova
  • Apache CouchDB
  • Apache Curator
  • Apache DolphinScheduler
  • Apache Drill
  • Apache Felix
  • Apache Flex
  • Apache Flink
  • Apache Flume
  • Apache Fluo
  • Apache FreeMarker
  • Apache Gora
  • Apache Groovy
  • Apache HBase
  • Apache Hadoop
  • Apache Hive
  • Apache Hop
  • Apache Iceberg
  • Apache Ignite
  • Apache Ivy
  • Apache Jackrabbit
  • Apache James
  • Apache Jena
  • Apache Kafka
  • Apache Kibble
  • Apache Knox
  • Apache Kylin
  • Apache MINA
  • Apache Maven
  • Apache Mesos
  • Apache NiFi
  • Apache ORC
  • Apache Olingo
  • Apache OpenJPA
  • Apache OpenOffice
  • Apache OpenWebBeans
  • Apache Ozone
  • Apache POI
  • Apache Phoenix
  • Apache Pig
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Royale
  • Apache Rya
  • Apache SDAP
  • Apache SINGA
  • Apache Serf
  • Apache ShenYu
  • Apache SkyWalking
  • Apache Sling
  • Apache SpamAssassin
  • Apache Spark
  • Apache Spatial
  • Apache Steve
  • Apache Storm
  • Apache Streams
  • Apache Submarine
  • Apache Subversion
  • Apache Synapse
  • Apache TVM
  • Apache Tapestry
  • Apache Tcl
  • Apache Tez
  • Apache Thrift
  • Apache Tika
  • Apache TinkerPop
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache VCL
  • Apache Velocity
  • Apache Web Services
  • Apache Wicket
  • Apache XML Graphics
  • Apache Zeppelin
  • Apache ZooKeeper
  • Argo
  • BFE
  • Backstage
  • Blender
  • Buildpacks
  • C#
  • C++
  • Capsule
  • Chef
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Contour
  • Copa
  • Cortex
  • Cucumber
  • Dex
  • Django
  • Docker
  • Dragonfly
  • Eclipse
  • Elastic Stack
  • Elasticsearch
  • Elk
  • Elk Stack
  • Envoy
  • Ethereum
  • Falco
  • FastAPI
  • Fluid
  • Flux
  • Git
  • Grafana
  • HAMI
  • Harbor
  • Hashicorp Vault
  • Helm
  • Hugging Face Transformers
  • Interlink
  • Istio
  • JUnit
  • Jenkins
  • Jest
  • K3s
  • KCL
  • Kafka Connect
  • Keycloak
  • Kotlin
  • Kubeflow
  • Kubeflow Pipelines
  • Kubernetes
  • Kubernetes Operators
  • Kuma
  • Lean
  • Lightning Web Components
  • Lima
  • Linux
  • Llama
  • Matplotlib
  • MongoDB
  • MySQL
  • NATS
  • NUnit
  • Nexus
  • Nginx
  • Node.js
  • NumPy
  • ORAS
  • Open Policy Agent
  • OpenSearch
  • OpenTelemetry
  • PHP
  • Packer
  • Pandas
  • Perl
  • Pixie
  • Playwright
  • Porter
  • PostgreSQL
  • PowerShell
  • Prometheus
  • Pulumi
  • PySpark
  • PyTorch
  • Python
  • R
  • RabbitMQ
  • Radius
  • Ratify
  • React
  • React Native
  • Redis
  • Redux
  • Rook
  • SOPS
  • SPIRE
  • SVN
  • Scala
  • Score
  • Semantic Kernel
  • Sonar
  • SonarQube
  • Spring
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud Stream
  • Spring Framework
  • Stacker
  • Swift
  • Telepresence
  • TensorFlow
  • Terraform
  • Thanos
  • Ubuntu
  • Vault
  • Vineyard
  • Vite
  • Vitess
  • Vue.js
  • Wireshark
  • WordPress
  • YARN
  • Zot
  • bootc
  • cURL
  • eBPF
  • gRPC
  • jQuery
  • kpt
  • werf

Standards — Total: 219

  • ACID
  • AIS
  • API-First
  • AUTHORS.md
  • Acceptance Criteria
  • Accessibility Standards
  • Accounting Standards
  • Actor Model
  • Agile
  • Agile Delivery
  • Agile Methodology
  • Agile SDLC
  • Architectural Design Patterns
  • Architecture Pattern
  • BDD
  • BLE
  • Banking Regulation
  • Big O Notation
  • CCPA
  • CHANGELOG.md
  • CITATION.cff
  • CNCF
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • CONTRIBUTORS.md
  • CSS
  • Certificate Enrolment Protocols
  • Circuit Breaker
  • Communication Protocols
  • Configuration Language
  • Consensus
  • Convention Over Configuration
  • Cybersecurity Standards
  • DHCP
  • DNS
  • DSL
  • Data Flow Diagrams
  • Data Format
  • Data Modeling
  • Data Models
  • Data Privacy Standards
  • Data Quality Standards
  • Data Warehouse Schemas
  • Database Schema Design
  • Defense In Depth
  • Dependency Injection
  • Design Patterns
  • Design Standards
  • DevOps
  • DevSecOps
  • Development Methodology
  • Dimensional Modeling
  • Disclosure Requirements
  • Domain-Driven Design
  • Enterprise Integration Patterns
  • Entity Relationship
  • Equator Principles
  • Event Sourcing
  • Event-driven Architecture
  • Extreme Programming
  • FDA Regulations
  • FTP
  • File Format
  • FinOps
  • Financial Regulation
  • Flowcharts
  • Functional Programming
  • GDPR
  • Gantt Charts
  • Good Manufacturing Practices
  • Graph Query Language (GQL)
  • GraphQL
  • Gremlin
  • HIPAA
  • HTML
  • HTML5
  • HTTP
  • HTTP/2
  • Health Standards
  • IAM
  • ISO
  • ISO Standard
  • IT Standards
  • ITIL
  • ITSM
  • Integration Patterns
  • Internal Control Standards
  • Inversion Of Control
  • JCR
  • JMS
  • JPA
  • JSF
  • JSON
  • Kanban
  • Kerberos
  • LDAP
  • LICENSE.md
  • Lean Management
  • Lean Manufacturing
  • Lean Six Sigma
  • Lean Six Sigma Black Belt
  • MLOps
  • MVC
  • Mandatory Reserves Requirement
  • MapReduce
  • Methodology
  • Mockups
  • Monolithic Architecture
  • NFC
  • NIO
  • NIST
  • Network Protocols
  • Normalization
  • OAuth
  • OCI
  • OData
  • OIDC
  • OSHA
  • OWASP
  • Object-Oriented Programming
  • OpenAPI
  • OpenID Connect
  • PCI Compliance
  • PDF
  • Partitioning
  • Privacy By Design
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Project Management Methodology
  • Protocol Buffers
  • Prototypes
  • Pub/Sub
  • QoS
  • Quality Of Service
  • Quality Standards
  • RACI
  • RBAC
  • RDF
  • RDP
  • REST
  • RESTful
  • RFID
  • RPC
  • RTSP
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • Reporting Templates
  • Reserve Requirements
  • Runbooks
  • SAFe Agile
  • SAML
  • SCADA
  • SDLC
  • SECURITY.md
  • SOA
  • SOAP
  • SPA
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Design
  • Schema Evolution
  • Schema Validation
  • Scrum
  • SecOps
  • Secure-by-Design
  • Security By Design
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Service Oriented Architecture
  • Six Sigma
  • Sketches
  • Software Design Patterns
  • Software Development Life Cycle
  • Software Development Lifecycle
  • Software-Defined Networking
  • Specification
  • Standard Operating Procedures
  • Standardization
  • Standards
  • Swagger
  • TCP/IP
  • Technical Specifications
  • Technology Standards
  • Templates
  • Test Cases
  • Test First
  • Test Plans
  • Test Scripts
  • Test Specifications
  • Test Suites
  • Test-driven Development
  • UML
  • Use Cases
  • User Stories
  • VNC
  • VPN
  • WCAG
  • Waterfall
  • Web Standards
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML
  • Zero Trust
  • Zero Trust Architecture
  • Zero Trust Network Access
  • Zero-Trust Security Model
  • openCypher

Why do we do this?

  • Understand the state of the market by industry.
  • Meet new and diverse design partners across verticals.
  • Help us prioritize industry-specific business capabilities.

Who is this for?

  • AI, API, integration and platform leadership within the industry.
  • The C-Suite looking to benchmark their enterprise against peers.
  • Analysts and media outlets reporting on industry-level technology trends.

Why become a design partner?

  • Collaboration to define industry-wide capabilities and benchmarks.
  • Obtain more control over the integrations your industry depends on.
  • Help shape the Naftiko roadmap to meet your vertical’s needs.

About This Research

  • Signals aggregate how we rate investments across all companies in the industry.
  • Areas reveal the technology areas being invested in across the vertical.
  • Services show which SaaS platforms appear across industry companies.
  • Tools highlight the open-source investments being made industry-wide.
  • Standards speak to how aligned integrations are with market standards.

About This Guidance

  • Impact Report provides a narrative analysis of the industry’s collective AI investment posture.
  • Impact Pages outlines the layered data behind the industry’s AI response, with company rankings per signal area.
  • Companies lists all organizations tracked in this industry vertical.
  • Radar maps the maturity of technology investments across the industry.
  • Capabilities are Naftiko definitions for how industry-common services and tools can deliver AI-driven business value.
  • Navigation highlights strategic opportunities for this industry vertical.

What This Means For You

See where you stand, decide what to build, control what you build — grounded in public-data signals, not boilerplate best practice.

01

Where you stand

The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.

See full report →
02

What to build

Capabilities being built across the peer set — tied to the markets you actually serve.

View capabilities →
03

Where to go next

A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.

Get your navigation →
04

Control what you build

Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.

First capability live in 90 days.

Become a design partner →